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.

  • 🧩 Grundprinzip: Jede neue WebDriver-Instanz generiert eine neue Session-ID, sodass zwei Treiber niemals Befehle oder Cookies auf demselben Rechner gemeinsam nutzen.
  • ⚙️ Implementierung: Setze parallel="Methoden" (oder Tests, Klassen, Instanzen) plus Thread-Anzahl auf dem TestNG Das Suite-Tag der testng.xml-Datei soll die Ausführung auf mehrere Ebenen verteilen.
  • 🧵 Parallelität: Um Race Conditions bei gleichzeitig ausgeführten Tests zu vermeiden, sollte pro @Test-Methode ein eigener WebDriver verwendet werden.
  • 🔗 Abhängigkeit: Ordnen Sie die Tests mit dependsOnMethods innerhalb der testng.xml include-Tags oder der @Test-Annotation an, wenn eine Methode vor einer anderen erfolgen muss.
  • 🤖 KI-Nutzung: Moderne KI-Hilfsprogramme prognostizieren die optimale Anzahl an Threads, gruppieren sichere parallele Methoden und identifizieren unzuverlässige Kandidaten anhand historischer Laufzeitdaten.

Wie man parallele Ausführung durchführt in Selenium

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.

Sitzungsbehandlung

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.

Erreichen Sie die Sitzungsbearbeitung in Selenium WebTreiber

Jeder nachfolgende Befehl wird nur innerhalb dieser einen Browsersitzung ausgeführt.

Erreichen Sie die Sitzungsbearbeitung in Selenium WebTreiber

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.

SessionHandling.java
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.

Führen Sie parallele Tests mit aus Selenium

Das Attribut „parallel“ des Suite-Tags akzeptiert vier Werte:

AttributwertBedeutung
TestsAlle Testfälle innerhalb eines Etikett des testing Die XML-Datei wird parallel verarbeitet.
UnterrichtAlle Testfälle innerhalb eines Java Die Klassen werden parallel ausgeführt.
MethodenAlle mit @Test annotierten Methoden werden parallel ausgeführt.
InstanzenTests 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:

Führen Sie parallele Tests mit aus Selenium

TestGuru99MultipleSession.java
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

testng.xml (parallele Methoden)
<?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.

testng.xml (dependsOnMethods)
<?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.

Häufig gestellte Fragen

Eine Sitzung ist eine eindeutige Sitzungs-ID, die bei jeder Erstellung einer neuen WebDriver-Instanz generiert wird. Jeder Befehl dieses Treibers wird an die entsprechende Browsersitzung weitergeleitet, wodurch die einzelnen Tests voneinander isoliert werden.

Das Attribut „parallel“ im Suite-Tag akzeptiert Tests, Klassen, Methoden oder Instanzen. TestNG Erzeugt mehrere Threads (festgelegt durch Thread-Anzahl) und führt die ausgewählte Einheit gleichzeitig aus, wodurch die Gesamtausführungszeit verkürzt wird.

Verwenden Sie das dependsOnMethods-Attribut innerhalb des include-Tags von testng.xml oder @Test(dependsOnMethods = “name”) im Code. TestNG Führt zuerst die Voraussetzung aus und überspringt den abhängigen Test bei einem Fehler.

KI-Tools gruppieren verwandte Tests, prognostizieren die optimale Thread-Anzahl anhand vergangener Laufzeiten und ordnen Testsuiten so um, dass langsame Tests zuerst starten, wodurch die Gesamtzeit für die Build-Pipeline verkürzt wird.

Ja. Die KI analysiert Aufrufdiagramme und historische Fehlerprotokolle, um dependsOnMethods-Verknüpfungen vorzuschlagen, zirkuläre Abhängigkeiten zu kennzeichnen und sichere parallele Gruppen vorzuschlagen, wodurch die manuelle Pflege von testng.xml reduziert wird.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: