2014-10-29 4 views
10

ich mit folgendem Problem: Ich habe zwei Klassen, die @Tests mit Prioritätsattribut umfassen:Priorität in TestNG mit mehreren Klassen

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

... und ...

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

ich habe beiden Klassen unter einem Test in testng.xml aber wenn ich den Test ausführen, wird es meinen @Tests basierte und auf den Prioritäten aus beiden Klassen:

testA1 
testB1 
testA2 
testB2 
testA3 
testB3 

erwarte ich folgendes Ergebnis:

testA1 
testA2 
testA3 
testB1 
testB2 
testB3 

Meine Frage ist, wie kann ich meine @Tests bestellen basierend auf den beiden Klassen verhindern und @Tests von einer Klasse zur gleichen Zeit nur laufen?

Antwort

14

In Ihrer Suite xml Verwendung group-by-Instanzen = "true"

Probe, wo TestClass1 und TestClass2 den gleichen Inhalt hat wie Sie

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

ich die Ausgabe

testA1 erhalten

testA2

testA3

testB1

testB2

testB3

+1

Vielen Dank, es funktioniert auch in meinem Beispielcode gut :) Aber wissen Sie vielleicht, wie Sie diesen Parameter programmatisch an testng.xml übergeben? Ich habe versucht "setGroupByInstances (true)", aber es hat nicht funktioniert. – peetya

+0

Ich habe kein xml ... wie setze ich das in Java? – sebnukem

+0

Peetya: Ich denke, es ist wichtig setGroupByInstances (true) an der richtigen Stelle zu setzen ... wie im Beispiel, ist es in "Test" -Element, so: XmlTest test = neue XmlTest (suite); test.setGroupByInstances (wahr); – Androdos

1

Sie brauchen nicht xml zu verwenden, die Sie gerade @Test(testName="test1")/@Test(testName="test2") an der Spitze jeder Klasse zur Verfügung stellen kann, und die Prioritäten automatisch pro Klasse gruppiert werden.

+0

Kannst du testng.xml dafür geben? Ein Beispiel – Sagar007

+0

@ Sagar007 Ich habe keine Tests verwendet.Xml überhaupt –

+0

Aber ich möchte mit Testng Xml laufen. Ist das möglich ? Ich habe 3 Klasse und möchte Sequenz geben. – Sagar007

0

sollten Sie die Priorität auf B-Test ändern wie diese

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

und keine Änderungen für XML, weil es als Priorität läuft

0

Der richtige Weg ist dependsOnMethods zu verwenden. Die Prioritätsstufen sind global für den Test (nicht mit Testmethoden mischen, die mit @Test gekennzeichnet sind). Mit anderen Worten: Wenn Test läuft Test (von <test> Tag) es Methoden nach Prioritäten gruppiert und dann ausführen. In Ihrem Fall haben sowohl testA1 als auch testB1 Priorität = 1 und werden daher am Anfang ausgeführt.