Parallelle uitvoering in Selenium

โšก Slimme samenvatting

Sessies, parallelle uitvoering en afhankelijkheden in Selenium combineer een unieke sessionId per WebDriver-instantie met TestNG Suite-besturingselementen maken het mogelijk om meerdere browservensters tegelijk onafhankelijke of geordende scripts te laten uitvoeren, waardoor de regressietest sneller wordt voltooid.

  • ๐Ÿงฉ Belangrijkste principe: Elke nieuwe WebDriver-instantie genereert een nieuwe sessionId, waardoor twee drivers nooit dezelfde opdrachten of cookies delen op dezelfde machine.
  • โš™๏ธ Implementatie: Stel parallel=โ€methodenโ€ (of tests, klassen, instanties) plus thread-count in op de TestNG De suite-tag van testng.xml wordt gebruikt om de uitvoering te spreiden.
  • ๐Ÿงต Parallellisme: Gebruik รฉรฉn WebDriver per @Test-methode om raceomstandigheden in gedeelde browservensters tijdens gelijktijdige uitvoeringen te voorkomen.
  • ๐Ÿ”— Afhankelijkheid: Tests met `dependsOnMethods` in `testng.xml` bevatten tags of de `@Test`-annotatie wanneer een methode aan een andere vooraf moet gaan.
  • ๐Ÿค– AI-gebruik: Moderne AI-hulpmiddelen voorspellen het optimale aantal threads, groeperen veilige parallelle methoden en signaleren onbetrouwbare kandidaten op basis van historische uitvoeringsgegevens.

Hoe parallelle uitvoering te starten in Selenium

Om te begrijpen hoe je scripts parallel kunt uitvoeren, moet je eerst weten hoe Selenium isoleert elke browser via sessies.

Waarom hebben we sessieafhandeling nodig?

Tijdens de testuitvoering wordt de Selenium WebDriver moet bij elke stap met de browser communiceren om de gegeven commando's uit te voeren. Terwijl die test draait, kan een andere gebruiker een tweede script starten op dezelfde machine en met hetzelfde type browser.

Sessieafhandeling

In zo'n situatie hebben we een mechanisme nodig om te voorkomen dat de twee uitvoeringen elkaar overlappen. Selenium Dit wordt opgelost door middel van sessiebeheer.

Hoe u Sessieafhandeling kunt bereiken Selenium WebDriver?

Als u de inspecteert Selenium In de broncode van WebDriver vindt u een variabele genaamd sessionIdElke keer dat u een nieuwe WebDriver-instantie aanmaakt, wordt er een nieuwe sessionId wordt gegenereerd en daaraan gekoppeld Firefox, Chrome- of IE-stuurprogramma.

Bereik sessieafhandeling Selenium webdriver

Elke volgende opdracht wordt alleen uitgevoerd binnen die specifieke browsersessie.

Bereik sessieafhandeling Selenium webdriver

Omdat dit ingebouwd is in WebDriver, is het niet nodig om de sessionId handmatig toe te wijzen.

Code Voorbeeld: Er worden twee verschillende sessies gegenereerd voor twee WebDriver-instanties.

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/");
    }
}

Parallelle tests uitvoeren met Selenium

Er zijn situaties waarin je meerdere tests tegelijk wilt uitvoeren, bijvoorbeeld: cross-browser controles of grote rookkamers.

In dergelijke gevallen is de parallel attribuut op het TestNG Suitetag doet het werk.

Voer parallelle tests uit met Selenium

Het parallel-attribuut van de suite-tag accepteert vier waarden:

AttribuutwaardeBetekenis
testenAlles testgevallen binnenin een label van de het testen van XML-bestand wordt parallel uitgevoerd.
klassenAlle testgevallen binnen een Java De lessen worden parallel uitgevoerd.
methodenAlle methoden die zijn geannoteerd met @Test worden parallel uitgevoerd.
gevallenTests binnen dezelfde instantie worden parallel uitgevoerd, terwijl twee methoden van twee verschillende instanties in verschillende threads draaien.

De thread-count Dit attribuut bepaalt hoeveel threads er voor die uitvoering worden toegewezen. Combineer het met de TestNG kader en installeren TestNG in Eclipse voordat u het uitvoert. Voor schaalvergroting naar meer dan รฉรฉn machine kunt u dezelfde suite via de volgende route laten lopen. Selenium Grid 4 voor gedistribueerde parallelle uitvoering.

Volledig voorbeeld: drie testgevallen worden parallel uitgevoerd en vullen inloggegevens in. https://demo.guru99.com/.

Het complete project ziet er als volgt uit:

Voer parallelle tests uit met 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 (parallelle 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>

Testcasevolgorde en afhankelijkheid

Je kunt de volgorde en afhankelijkheid instellen. testcase uitvoering. Stel dat je twee testgevallen hebt, testGuru99TC1 en testGuru99TC2, en jij wilt testGuru99TC2 om te rennen voordat testGuru99TC1. Gebruik de dependsOnMethods attribuut (of dependsOnGroups voor ketenvorming op groepsniveau) om die volgorde vast te leggen. Voor bredere automatiseringsraamwerk ontwerp, vergelijk JUnit vs TestNG, en bekijk de element vinden Raadpleeg deze referentie als uw afhankelijke tests dezelfde locators delen.

testng.xml (afhankelijk van 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">
        <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/>
        <include name="testGuru99TC2"/>
      </class>
    </classes>
  </test>
</suite>

De TestNG runtime, gehost op testng.orgevalueert deze declaraties voordat threads worden gestart, zodat afhankelijke methoden altijd pas beginnen nadat aan hun vereisten is voldaan.

Veelgestelde vragen

Een sessie is een unieke sessie-ID die wordt gegenereerd telkens wanneer een nieuwe WebDriver-instantie wordt aangemaakt. Elk commando van die driver wordt doorgestuurd naar de bijbehorende browsersessie, waardoor de ene test van de andere wordt geรฏsoleerd.

Het attribuut `parallel` op de `suite`-tag accepteert tests, klassen, methoden of instanties. TestNG Start meerdere threads (ingesteld door thread-count) en voert de gekozen eenheid gelijktijdig uit, waardoor de totale uitvoeringstijd wordt verkort.

Gebruik het `dependsOnMethods` attribuut in de `include` tag van `testng.xml`, of `@Test(dependsOnMethods = โ€œnameโ€)` in de code. TestNG Voert eerst de vereiste test uit en slaat de afhankelijke test over als deze mislukt.

AI-tools groeperen gerelateerde tests, voorspellen het optimale aantal threads op basis van eerdere uitvoeringstijden en herschikken testsuites zodat langzame tests als eerste starten, waardoor de totale doorlooptijd van de build-pipeline wordt verkort.

Ja. AI analyseert oproepgrafieken en historische foutenlogboeken om afhankelijkheden tussen methoden voor te stellen, circulaire afhankelijkheden te signaleren en veilige parallelle groepen voor te stellen, waardoor handmatig onderhoud van testng.xml wordt verminderd.

Vat dit bericht samen met: