Parallele Ausführung in Selenium: Sitzungsbearbeitung & TestNG Abhängigkeit
Um zu verstehen, wie Skripte parallel ausgeführt werden, sollten wir uns zunächst damit befassen
Warum brauchen wir Session Handling?
Während der Testausführung wird die Selenium WebDriver muss ständig mit dem Browser interagieren, um bestimmte Befehle auszuführen. Zum Zeitpunkt der Ausführung ist es auch möglich, dass jemand anderes vor Abschluss der aktuellen Ausführung die Ausführung eines anderen Skripts auf demselben Computer und in demselben Browsertyp startet.
In einer solchen Situation benötigen wir einen Mechanismus, durch den sich unsere beiden unterschiedlichen Ausführungen nicht überschneiden dürfen. Dies kann mithilfe der Sitzungsbehandlung in erreicht werden Selenium.
So erreichen Sie die Sitzungsbehandlung in Selenium WebDriver?
Wenn Sie den Quellcode von überprüfen Selenium WebDriver finden Sie eine Variable mit dem Namen „sessionId“. Immer wenn wir eine neue Instanz eines WebDriver-Objekts erstellen, wird eine neue „sessionId“ generiert und an diese bestimmte angehängt Firefox/Chrome/IE-Treiber ().
Alles, was wir danach tun, wird also nur in diesem speziellen Fall ausgeführt Firefox Browser-Sitzung.
Da es sich um eine integrierte Funktionalität handelt, besteht keine explizite Notwendigkeit, die Sitzungs-ID zuzuweisen
Codebeispiel: Hier werden zwei verschiedene Sitzungen für zwei verschiedene WebDriver generiert.
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class SessionHandling { public static void main(String...strings ){ //First session of WebDriver WebDriver driver = new FirefoxDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("http://demo.guru99.com/V4/"); } }
So führen Sie parallele Tests mit aus Selenium
Es gibt Situationen, in denen Sie mehrere Tests gleichzeitig ausführen möchten.
In solchen Fällen kann man das Attribut „parallel“ verwenden
Das parallele Attribut des Suite-Tags kann vier Werte annehmen:
Tests | Alle Testfälle darin Tag von Testen xml-Datei wird parallel ausgeführt. |
Unterricht | Alle Testfälle in a Java Der Unterricht findet parallel statt |
Methoden | Alle Methoden mit der Annotation @Test werden parallel ausgeführt. |
Instanzen | Testfälle in derselben Instanz werden parallel ausgeführt, aber zwei Methoden von zwei verschiedenen Instanzen werden in unterschiedlichen Threads ausgeführt. |
Mit dem Attribut thread-count können Sie angeben, wie viele Threads für diese Ausführung zugewiesen werden sollen.
Vollständiges Beispiel: In diesem Beispiel werden drei Testfälle parallel ausgeführt und Anmeldedaten eingegeben http://demo.guru99.com/
Das vollständige Projekt sieht folgendermaßen aus:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo(){ //Second session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
TestNG.XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods" > <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> </class> </classes> </test> </suite>
Reihenfolge und Abhängigkeit der Testfälle
Sie können die Reihenfolge und Abhängigkeit festlegen Testfall Ausführung.
Angenommen, Sie haben zwei Testfälle, „testGuru99TC1“ und „testGuru99TC2“, und Sie möchten den Testfall „testGuru99TC2“ vor „testGuru99TC1“ ausführen. In diesem Fall verwenden wir das Attribut „dependsOnMethods“, um Abhängigkeiten und die Reihenfolge der Ausführung festzulegen.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods" > <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> <include value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
Zusammenfassung
- Für eine neue Instanz von WebDriver wird eine neue Sitzungs-ID erstellt.
- Eine Sitzung wird an einen bestimmten Browser gebunden.
- Mithilfe der Attribute „Thread“ und „Parallel“ führen Sie Ihre Skripte parallel aus.
- Mithilfe der Attributabhängigkeit können Sie die Reihenfolge für die Testausführung festlegen