2016-06-10 10 views
1

Ich bin an einem Punkt in meinem Framework stecken geblieben.Wie man den invocationCount-Wert zur Laufzeit in TestNG setzt @Test Annotation

Ich möchte eine @ Test Annotation für mehrere Male ausführen. Dafür habe ich es gegooglet und eine Lösung gefunden, um die invocationCount Variable mit @Test Annotation zu setzen.

Also, was ich tat, ist:

@Test(invocationCount=3) 

Dies war perfekt für mich arbeiten. Aber mein Problem ist, dass ich den Wert dieses Parameters mit einer Variablen festlegen möchte.

z. Ich habe eine Variable &, was ich will, ist wie:

int x=5; 

@Test(invocationCount=x) 

Gibt es eine Möglichkeit, dies oder jede andere gute Annäherung an das gleiche tun @Test Anmerkung für einige Male auszuführen.

Vielen Dank im Voraus.

Antwort

1

Set TestNG timeout from testcase ist eine ähnliche Frage.

Sie haben 2 Möglichkeiten:

Wenn x konstant ist, können Sie eine IAnnotationTransformer verwenden.

Andernfalls können Sie Hack verwenden möchten:

public class DynamicTimeOutSample { 

    private final int count; 

    @DataProvider 
    public static Object[][] dp() { 
    return new Object[][]{ 
     new Object[]{ 10 }, 
     new Object[]{ 20 }, 
    }; 
    } 

    @Factory(dataProvider = "dp") 
    public DynamicTimeOutSample(int count) { 
    this.count = count; 
    } 

    @BeforeMethod 
    public void setUp(ITestContext context) { 
    ITestNGMethod currentTestNGMethod = null; 
    for (ITestNGMethod testNGMethod : context.getAllTestMethods()) { 
     if (testNGMethod.getInstance() == this) { 
     currentTestNGMethod = testNGMethod; 
     break; 
     } 
    } 
    currentTestNGMethod.setInvocationCount(count); 
    } 

    @Test 
    public void test() { 
    } 
}