2016-07-31 9 views
0

Verwendung habe ich eine testng Methode wie folgt aus:TestNG parallel Test/Methode dataprovoder

@Test(dataProvider="takeMyProvider") 
public void myTest(String param1, String param2){ 

    System.out.println(param1 + " " + param2); 

} 

My Dataprovider gibt 10 Elemente. Meine Methode wird 10 Mal in einem Thread ausgeführt. Wie ist es möglich, dies zu parallelisieren? Zum Beispiel

  • Ich möchte 5 Methoden parallel haben. Der Webdriver sollte 5 Browser gleichzeitig öffnen. Nach diesen fünf Tests parallel sollten die anderen 5-Test

oder

  • die WebDriver sollte 10 Browser und alle 10 Elemente haben eine Idee

Hat jemand parallel tun öffnen ausgeführt werden?

Antwort

0

TestNG des @Test Anmerkung hat bereits, was Sie wollen ... Bis zu einem gewissen Grad:

// Execute 10 times with a pool of 5 threads 
@Test(invocationCount = 10, threadPoolSize = 5) 

Was wird dies nicht tut, wird Ihr erstes Szenario genau passen, das heißt, die ersten 5 läuft, auf sie warten Zum Beenden führen Sie die anderen 5 aus.

1

Sie können die Parallelität über eine Suite-Datei in TestNG definieren. Beispiel folgende Läufe Methoden parallel zu 10 Threads:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="MySuiteNameHere" parallel="methods" thread-count="10"> 

    <test name="Selenium Tests"> 
     <classes> 
      <class name="foo.bar.FooTest"/> 
     </classes> 
    </test> 
</suite> 

Sie müssen auch beachten Sie, dass Ihre Daten-Provider können ist Thread-sicher zu ermöglichen es nicht, die Methode zu zwingen, sequentiell auszuführen.

// data providers force single threaded by default 
@DataProvider(name = "takeMyProvider", parallel = true) 

Seien Sie vorsichtig, obwohl. TestNG erstellt beim Ausführen mit parallelen Methoden keine neuen Instanzen des Klassenobjekts. Das bedeutet, dass beim Speichern von Werten für das Testklassenobjekt Probleme mit Threads auftreten können.

Beachten Sie auch, wenn Sie die Anzahl der Threads auf 5 setzen, wartet nicht auf die ersten 5, um alle fertig zu sein und starten Sie dann die nächsten 5. Es legt im Grunde alle Testmethoden in eine Warteschlange und startet dann x Gewinde. Jeder Thread fragt dann einfach das nächste Element aus der Warteschlange ab, wenn es verfügbar ist.

0

Vielen Dank für Ihr Feedback und nützliche Tipps. Meine Tests liefen - vielleicht - parallel, aber nur in einer Browser-Instanz.

Lets Sprung im Detail:

My Dataprovider ein Objekt zurückgibt [] []

@Dataprovider(name = "takeMyProvider", parallel = true) 
public object[][] myProvider(){ 
    return new object[][]{{"1", "name1"}, {"2", "name2"} {"3", "name3"}} 
} 

Diese Testmethode dreimal ausgeführt wird

@Test(dataProvider="takeMyProvider") 
public void myTest(String param1, String param2){ 

    System.out.println(param1 + " " + param2); 

} 

aber nur in einer Browser-Instanz . Das ist nicht was ich will.

Ich möchte, dass testNG 3 Chrome-Instanzen startet und die 3 Tests parallel durchführt.

Btw Ich führe die Tests auf einem Selenraster. Vielleicht mit 100 Knoten. Es wäre perfekt, wenn 100 Knoten diesen Test parallel machen. Oder sogar 1.000, hängt vom Datenprovider ab.

Hat jemand eine Idee?

Mit freundlichen Grüßen