Je rencontre le problème suivant: j'ai créé deux classes qui incluent @Tests avec l'attribut priority:
@Test( priority = 1 )
public void testA1() {
System.out.println("testA1");
}
@Test( priority = 2 )
public void testA2() {
System.out.println("testA2");
}
@Test( priority = 3 )
public void testA3() {
System.out.println("testA3");
}
... et ...
@Test( priority = 1 )
public void testB1() {
System.out.println("testB1");
}
@Test( priority = 2 )
public void testB2() {
System.out.println("testB2");
}
@Test( priority = 3 )
public void testB3() {
System.out.println("testB3");
}
Je mets les deux classes sous un test dans testng.xml, mais lorsque je lance le test, il ordonne mes @Tests en fonction des priorités des deux classes:
testA1
testB1
testA2
testB2
testA3
testB3
J'attends le résultat suivant:
testA1
testA2
testA3
testB1
testB2
testB3
Ma question est la suivante: comment puis-je empêcher de commander mes @Tests basés sur les deux classes et d'exécuter @Tests à partir d'une classe à la fois?
Dans votre suite XML, utilisez group-by-instances = "true"
Sample, où TestClass1 et TestClass2 ont le même contenu que le vôtre.
<suite thread-count="2" verbose="10" name="testSuite" parallel="tests">
<test verbose="2" name="MytestCase" group-by-instances="true">
<classes>
<class name="com.crazytests.dataproviderissue.TestClass1" />
<class name="com.crazytests.dataproviderissue.TestClass2" />
</classes>
</test>
</suite>
Je reçois la sortie
testA1
testA2
testA3
testB1
testB2
testB3
Vous pouvez simplement fournir @Test(testName="test1") / @Test(testName="test2")
en haut de chaque classe et les priorités seront automatiquement regroupées par classe. Bien sûr, vous conservez les annotations existantes.
vous devriez changer la priorité sur le test B.
@Test( priority = 4 )
public void testB1() {
System.out.println("testB1");
}
@Test( priority = 5 )
public void testB2() {
System.out.println("testB2");
}
@Test( priority = 6 )
public void testB3() {
System.out.println("testB3");
}
et pas de changement pour XML car il fonctionne en priorité
La méthode la plus correcte consiste à utiliser dependOnMethods. Les niveaux de priorité sont globaux pour le test (ne mélangez pas avec les méthodes de test annotées avec @Test). En d'autres termes: Lorsque testng exécute test (à partir de la balise <test>
), il regroupe les méthodes par priorité, puis l'exécute. Dans votre cas, testA1 et testB1 ont priorité = 1, ils seront donc exécutés au début.