Lassen Sie uns zunächst verstehen, wie Skripte parallel ausgeführt werden
Warum brauchen wir Session Handling?
Während der Testausführung muss der Selenium WebDriver ständig mit dem Browser interagieren, um bestimmte Befehle auszuführen. Zum Zeitpunkt der Ausführung ist es auch möglich, dass vor Abschluss der aktuellen Ausführung eine andere Person die Ausführung eines anderen Skripts auf demselben Computer und in demselben Browsertyp startet.
In einer solchen Situation brauchen wir einen Mechanismus, durch den sich unsere beiden unterschiedlichen Ausführungen nicht überschneiden sollten. Dies kann mithilfe der Sitzungsbehandlung in Selen erreicht werden.
Wie erreicht man die Sitzungsbehandlung in Selenium WebDriver?
Wenn Sie den Quellcode von Selenium WebDriver überprüfen, finden Sie eine Variable mit dem Namen 'sessionId'. Jedes Mal, wenn wir eine neue Instanz eines WebDriver-Objekts erstellen, wird eine neue 'sessionId' generiert und an diesen bestimmten Firefox / Chrome / IE-Treiber () angehängt.
Alles, was wir danach tun, wird nur in dieser bestimmten Firefox-Browsersitzung ausgeführt.
Da es sich um eine integrierte Funktionalität handelt, muss die Sitzungs-ID nicht explizit zugewiesen werden
Codebeispiel: Hier werden zwei verschiedene Sitzungen für zwei verschiedene WebDriver generiert.
import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;öffentliche Klasse SessionHandling {public static void main (String… strings) {// Erste Sitzung von WebDriverWebDriver-Treiber = neuer FirefoxDriver ();// Gehe zur Guru99 Seitedriver.get ("http://demo.guru99.com/V4/");// Zweite Sitzung von WebDriverWebDriver driver2 = neuer FirefoxDriver ();// Gehe zur Guru99 Seitedriver2.get ("http://demo.guru99.com/V4/");}}}}
So führen Sie parallele Tests mit Selen durch
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 im |
Klassen | Alle Testfälle innerhalb einer Java-Klasse werden parallel ausgeführt |
Methoden | Alle Methoden mit @ Test-Annotation 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 die Anmeldedaten in http://demo.guru99.com ausgefüllt
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;öffentliche Klasse TestGuru99MultipleSession {@Prüfungpublic void executeSessionOne () {// Erste Sitzung von WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");WebDriver-Treiber = neuer ChromeDriver ();// Gehe zur Guru99 Seitedriver.get ("http://demo.guru99.com/V4/");// Finde das Textfeld Benutzername und fülle es ausdriver.findElement (By.name ("uid")). sendKeys ("Driver 1");}}@Prüfungpublic void executeSessionTwo () {// Zweite Sitzung von WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");WebDriver-Treiber = neuer ChromeDriver ();// Gehe zur Guru99 Seitedriver.get ("http://demo.guru99.com/V4/");// Finde das Textfeld Benutzername und fülle es ausdriver.findElement (By.name ("uid")). sendKeys ("Driver 2");}}@Prüfungpublic void executeSessionThree () {// Dritte Sitzung von WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");WebDriver-Treiber = neuer ChromeDriver ();// Gehe zur Guru99 Seitedriver.get ("http://demo.guru99.com/V4/");// Finde das Textfeld Benutzername und fülle es ausdriver.findElement (By.name ("uid")). sendKeys ("Driver 3");}}}}
TestNG.XML
xml version = "1.0" encoding = "UTF-8"?>class> class> test> suite>
Testfallreihenfolge und Abhängigkeit
Sie können die Reihenfolge und Abhängigkeit der Testfallausführung festlegen.
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 'definedOnMethods', um die Abhängigkeit und die Reihenfolge der Ausführung festzulegen.
xml version = "1.0" encoding = "UTF-8"?>ab class> class> test> suite>
Zusammenfassung
- Eine neue Sitzungs-ID wird für eine neue Instanz von WebDriver erstellt.
- Eine Sitzung wird an einen bestimmten Browser gebunden.
- Mit Attribut-Thread und parallel führen Sie Ihre Skripte parallel aus.
- Sie können die Attributabhängigkeit verwenden, um die Reihenfolge für die Testausführung festzulegen