web-dev-qa-db-fra.com

Priorité dans TestNG avec plusieurs classes

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?

14
peetya

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

17
Sachin Francis

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.

1
Marinos An

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é

0
Ratri Mayangsari

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.

0
Oleksandr Kulychok