2014-10-29 18 views
10

che sto affrontando con il seguente problema: ho creato due classi che comprendono @Tests con attributo di priorità:priorità in TestNG con più classi

@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"); 
} 

... e ...

@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"); 
} 

ho messo entrambe le classi in un test in testng.xml, ma quando si esegue il test, ordinerò miei @Tests sulla base delle priorità di entrambe le classi:

testA1 
testB1 
testA2 
testB2 
testA3 
testB3 

Mi aspetto il seguente risultato:

testA1 
testA2 
testA3 
testB1 
testB2 
testB3 

La mia domanda è che come posso evitare di ordinare i miei @Tests sulla base di entrambe le classi ed eseguire @Tests solo da una classe allo stesso tempo?

risposta

14

Nella vostra suite utilizzo gruppo XML-by-istanze = "true"

Campione, dove TestClass1 e TestClass2 ha lo stesso contenuto come la tua

<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> 

ho l'uscita

testA1

testA2

testA3

testB1

testB2

testB3

+1

Grazie, per me funziona anche nel mio codice di esempio :) Ma sai forse come passare questo parametro a testng.xml in modo programmatico? Ho provato "setGroupByInstances (true)" ma non ha funzionato. – peetya

+0

Non ho un xml ... come impostare questo in Java? – sebnukem

+0

Per peetya: Penso che sia importante impostare setGroupByInstances (true) nel posto giusto ... come nell'esempio, è nell'elemento "Test", quindi: XmlTest test = new XmlTest (suite); test.setGroupByInstances (true); – Androdos

1

Non è necessario utilizzare XML, è possibile fornire appena @Test(testName="test1")/@Test(testName="test2") nella parte superiore di ogni classe, e le priorità saranno raggruppati automaticamente per classe.

+0

Puoi fornire testng.xml per questo? Un esempio – Sagar007

+0

@ Sagar007 Non ho usato testng.xml affatto –

+0

Ma voglio correre con testng xml. È possibile ? Ho 3 lezioni e voglio dare una sequenza. – Sagar007

0

si dovrebbe cambiare la priorità sulla prova B per essere come questo

@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"); 
    } 

e nessun cambiamento per XML perché viene eseguito come priorità

0

Il modo più corretto è quello di utilizzare dependsOnMethods. I livelli di priorità sono globali per il test (non confondersi con i metodi di prova annotati con @Test). In altre parole: quando testng esegue il test (dal tag <test>) raggruppa i metodi per priorità e quindi eseguirlo. Nel tuo caso sia testA1 che testB1 hanno priorità = 1, quindi verrà eseguito all'inizio.