Wie kann ich die Reihenfolge der Ausführung von Tests in TestNG anpassen?
Zum Beispiel:
public class Test1 {
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
@Test
public void test3() {
System.out.println("test3");
}
}
In der obigen Suite ist die Reihenfolge der Ausführung von Tests beliebig. Für eine Ausführung kann die Ausgabe sein:
test1
test3
test2
Wie führe ich die Tests in der Reihenfolge aus, in der sie geschrieben wurden?
dependsOnGroups
ist äußerst nützlich, aber es scheint mir, dass TestNG ignoriert,priority
wenn beide miteinander kombiniert werden.Um ein bestimmtes Szenario anzusprechen:
quelle
Wenn Sie die
@Test(priority = )
Option in TestNG nicht verwenden möchten , können Sie die Javaassist- Bibliothek und die TestNGs verwendenIMethodInterceptor
, um die Tests in der Reihenfolge zu priorisieren, in der die Testmethoden in der Testklasse definiert sind. Dies basiert auf der hier bereitgestellten Lösung .Fügen Sie diesen Listener Ihrer Testklasse hinzu:
Dies ermittelt im Wesentlichen die Zeilennummern der Methoden und sortiert sie nach aufsteigender Reihenfolge ihrer Zeilennummer, dh nach der Reihenfolge, in der sie in der Klasse definiert sind.
quelle
quelle
Normalerweise bietet TestNG eine Reihe von Anmerkungen, die wir
@BeforeSuite, @BeforeTest, @BeforeClass
zum Initialisieren von Browsern / Setups verwenden können.Wir können Priorität zuweisen, wenn Sie eine Anzahl von Testfällen in Ihr Skript geschrieben haben und gemäß der zugewiesenen Priorität ausführen möchten. Verwenden Sie dann:
@Test(priority=0)
ab 0,1,2,3 ....In der Zwischenzeit können wir die Anzahl der Testfälle gruppieren und durch Gruppierung ausführen. dafür werden wir verwenden
@Test(Groups='Regression')
Am Ende können wir wie beim Schließen der Browser
@AfterTest, @AfterSuite, @AfterClass
Anmerkungen verwenden.quelle
Wenn ich Ihre Frage richtig verstehe, indem Sie Tests in einer bestimmten Reihenfolge ausführen möchten, kann TestNG IMethodInterceptor verwendet werden. Unter http://beust.com/weblog2/archives/000479.html erfahren Sie, wie Sie diese nutzen können.
Wenn Sie eine Vorinitialisierung durchführen möchten, besuchen Sie IHookable http://testng.org/javadoc/org/testng/IHookable.html und den zugehörigen Thread http://groups.google.com/group/testng-users/browse_thread/. thread / 42596505990e8484 / 3923db2f127a9a9c? lnk = gst & q = IHookable # 3923db2f127a9a9c
quelle
Huckepack von der Antwort von user1927494: Wenn Sie einen einzelnen Test vor allen anderen ausführen möchten, können Sie Folgendes tun:
quelle
Durch Angabe der Testmethoden, die in testNg.xml ausgeführt werden sollen, können die Testfälle in der gewünschten Reihenfolge ausgeführt werden
<suite> <test name="selenium1"> <classes> <class name="com.test.SeleniumTest" > <methods><include name="methodB"></include> <include name="methodA"></include> </methods> </class> </classes> </test> </suite>
quelle
Durch Verwendung des Prioritätsparameters für @Test können wir die Reihenfolge der Testausführung steuern.
quelle
Priority
Parameter gab es 2012 noch nicht?Die Reihenfolge der Methoden in der Klassendatei ist nicht vorhersehbar. Sie müssen daher entweder Abhängigkeiten verwenden oder Ihre Methoden explizit in XML aufnehmen.
Standardmäßig führt TestNG Ihre Tests in der Reihenfolge aus, in der sie in der XML-Datei enthalten sind. Wenn Sie möchten, dass die in dieser Datei aufgeführten Klassen und Methoden in einer unvorhersehbaren Reihenfolge ausgeführt werden, setzen Sie das Attribut keep-order auf false
quelle
Ich habe das gleiche Problem festgestellt. Der mögliche Grund liegt in der parallelen Ausführung von testng. Die Lösung besteht darin, die Option "Priorität" hinzuzufügen oder einfach die Datei "keep-order =" true "in Ihrer Datei" testng.xml "zu aktualisieren.
quelle
Eine Antwort mit einer wichtigen Erklärung:
Es gibt zwei Parameter von " TestNG ", die die Reihenfolge der Ausführung der Tests bestimmen sollen:
Und:
In beiden Fällen hängen diese Funktionen von der Methode oder Gruppe ab.
Aber die Unterschiede:
In diesem Fall:
Die Methode ist von der gesamten Gruppe abhängig, sodass diese Methode nicht unbedingt unmittelbar nach der Ausführung der abhängigen Funktion ausgeführt wird. Sie kann jedoch später im Lauf und sogar nach anderen Testläufen auftreten.
Es ist wichtig zu beachten, dass für den Fall, dass dieser Parameter mehr als eine Verwendung innerhalb derselben Testgruppe enthält, dies ein sicheres Rezept für Probleme ist, da die abhängigen Methoden der gesamten Testgruppe zuerst und erst dann ausgeführt werden Methoden, die von ihnen abhängen.
In diesem Fall jedoch:
Selbst wenn dieser Parameter innerhalb derselben Testgruppe mehrmals verwendet wird, wird die abhängige Methode weiterhin ausgeführt, nachdem die abhängige Methode sofort ausgeführt wurde.
Hoffe es ist klar und hilf.
quelle
Es gibt Möglichkeiten, Tests in einer bestimmten Reihenfolge auszuführen. Normalerweise müssen Tests jedoch wiederholbar und unabhängig sein, um sicherzustellen, dass nur die gewünschte Funktionalität getestet wird und nicht von Nebenwirkungen des Codes außerhalb der getesteten Funktionen abhängig ist.
Um Ihre Frage zu beantworten, müssen Sie weitere Informationen bereitstellen, z. B. WARUM es wichtig ist, Tests in einer bestimmten Reihenfolge auszuführen.
quelle
Falls Sie zusätzliche Dinge wie verwenden
dependsOnMethods
, möchten Sie möglicherweise den gesamten @ Test-Fluss in Ihrer testng.xml-Datei definieren. AFAIK, die in Ihrer Suite-XML-Datei (testng.xml) definierte Reihenfolge überschreibt alle anderen Bestellstrategien.quelle
Verwenden Sie: keep-order = "true" enabled = "true", um Testfälle in der von Ihnen geschriebenen Weise auszuführen.
quelle
Tests wie Unit-Tests? Wozu? Tests MÜSSEN unabhängig sein, sonst können Sie einen Test nicht einzeln durchführen. Wenn sie unabhängig sind, warum überhaupt eingreifen? Plus - was ist eine "Bestellung", wenn Sie sie in mehreren Threads auf mehreren Kernen ausführen?
quelle