Parallele Ausführung in Selenium
⚡ Intelligente Zusammenfassung
Sitzungen, parallele Ausführung und Abhängigkeiten in Selenium kombinieren Sie eine eindeutige Sitzungs-ID pro WebDriver-Instanz mit TestNG Die Suite-Steuerelemente ermöglichen es, dass mehrere Browserfenster gleichzeitig unabhängige oder geordnete Skripte ausführen und den Regressionszyklus schneller abschließen.

Um zu verstehen, wie man Skripte parallel ausführt, muss man zunächst wissen, wie Selenium isoliert jeden Browser über Sitzungen.
Warum brauchen wir Session Handling?
Während der Testausführung wird die Selenium WebDriver muss bei jedem Schritt mit dem Browser interagieren, um die vorgegebenen Befehle auszuführen. Während dieser Test läuft, kann ein anderer Benutzer ein zweites Skript auf demselben Rechner und mit demselben Browsertyp starten.
In einer solchen Situation benötigen wir einen Mechanismus, der eine Überschneidung der beiden Ausführungen verhindert. Selenium Dies wird durch die Sitzungsverwaltung gelöst.
So erreichen Sie die Sitzungsbehandlung in Selenium WebDriver?
Wenn Sie die Selenium Im WebDriver-Quellcode finden Sie eine Variable namens sessionIdJedes Mal, wenn Sie eine neue WebDriver-Instanz erstellen, wird ein neuer sessionId wird generiert und daran angehängt Firefox, Chrome- oder IE-Treiber.
Jeder nachfolgende Befehl wird nur innerhalb dieser einen Browsersitzung ausgeführt.
Da dies in WebDriver integriert ist, ist es nicht nötig, die sessionId manuell zuzuweisen.
Code Ejemplo: Für zwei WebDriver-Instanzen werden zwei unterschiedliche Sitzungen 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(); // Go to guru99 demo site driver.get("https://demo.guru99.com/V4/"); // Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); // Go to guru99 demo site driver2.get("https://demo.guru99.com/V4/"); } }
So führen Sie parallele Tests mit aus Selenium
Es gibt Situationen, in denen man mehrere Tests gleichzeitig ausführen möchte, zum Beispiel Browserübergreifende Prüfungen oder große Rauchersuiten.
In solchen Fällen ist die parallel Attribut auf dem TestNG Das Suite-Tag erledigt die Arbeit.
Das Attribut „parallel“ des Suite-Tags akzeptiert vier Werte:
| Attributwert | Bedeutung |
|---|---|
| Tests | Alle Testfälle innerhalb eines Etikett des testing Die XML-Datei wird parallel verarbeitet. |
| Unterricht | Alle Testfälle innerhalb eines Java Die Klassen werden parallel ausgeführt. |
| Methoden | Alle mit @Test annotierten Methoden werden parallel ausgeführt. |
| Instanzen | Tests in derselben Instanz werden parallel ausgeführt, während zwei Methoden zweier verschiedener Instanzen in unterschiedlichen Threads ausgeführt werden. |
Das thread-count Das Attribut bestimmt, wie viele Threads für diese Ausführung zugewiesen werden. Kombinieren Sie es mit dem TestNG Rahmen und installieren TestNG in Eclipse vor der Ausführung. Für die Skalierung auf mehr als einen Rechner leiten Sie dieselbe Suite durch Selenium Raster 4 für die verteilte parallele Ausführung.
Vollständiges Beispiel: Drei Testfälle werden parallel ausgeführt und füllen die Anmeldedaten aus. https://demo.guru99.com/.
Das vollständige Projekt sieht folgendermaßen aus:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executeSessionOne() { // First session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); // Find the 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(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executeSessionThree() { // Third session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); 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"/> </classes> </test> </suite>
Reihenfolge und Abhängigkeit der Testfälle
Sie können die Reihenfolge und Abhängigkeit von Testfall Ausführung. Angenommen, Sie haben zwei Testfälle, testGuru99TC1 und testGuru99TC2, und du willst testGuru99TC2 vorher laufen testGuru99TC1. Benutze die dependsOnMethods Attribut (oder dependsOnGroups (für die Verkettung auf Gruppenebene), um diese Reihenfolge festzulegen. Für weiterführende Informationen Automatisierungs-Framework Design, Vergleich JUnit vs TestNGund überprüfen Sie die Element finden Referenzieren Sie, ob Ihre abhängigen Tests gemeinsame Locators verwenden.
<?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 name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/> <include name="testGuru99TC2"/> </class> </classes> </test> </suite>
Das TestNG Laufzeit, gehostet bei testng.org, wertet diese Deklarationen aus, bevor Threads gestartet werden, sodass abhängige Methoden immer erst nach Erfüllung ihrer Voraussetzungen starten.





