Parallell utførelse i Selenium

⚡ Smart oppsummering

Økter, parallell kjøring og avhengighet i Selenium kombinere en unik sessionId per WebDriver-forekomst med TestNG suite-kontroller, slik at mange nettleservinduer kjører uavhengige eller ordnede skript samtidig og fullfører regresjonssyklusen raskere.

  • 🧩 Nøkkelprinsipp: Hver ny WebDriver-instans genererer en ny sessionId, slik at to drivere aldri deler kommandoer eller informasjonskapsler på samme maskin.
  • ⚙️ Gjennomføring: Sett parallel=”metoder” (eller tester, klasser, instanser) pluss antall tråder på TestNG suite-taggen til testng.xml for å spre utførelse.
  • 🧵 parallellitet: Bruk én WebDriver per @Test-metode for å unngå kappløpsbetingelser på delte nettleservinduer under samtidige kjøringer.
  • 🔗 Avhengighet: Ordenstester med dependsOnMethods i testng.xml inkluderer tagger eller @Test-annotasjonen når én metode må gå foran en annen.
  • 🤖 AI-bruk: Moderne AI-hjelpere forutsier optimalt trådtall, grupperer sikre parallelle metoder og avdekker ustabile kandidater fra historiske kjøredata.

Slik kjører du parallell utførelse i Selenium

For å forstå hvordan man kjører skript parallelt, må du først vite hvordan Selenium isolerer hver nettleser gjennom økter.

Hvorfor trenger vi økthåndtering?

Under testgjennomføringen Selenium WebDriver må samhandle med nettleseren i hvert trinn for å utføre gitte kommandoer. Mens testen kjører, kan en annen bruker starte et annet skript på samme maskin og samme type nettleser.

Sesjonshåndtering

I en slik situasjon trenger vi en mekanisme slik at de to utførelsene ikke overlapper hverandre. Selenium løser dette gjennom økthåndtering.

Hvordan oppnå økthåndtering i Selenium WebDriver?

Hvis du inspiserer Selenium WebDriver-kilden, finner du en variabel som heter sessionIdHver gang du oppretter en ny WebDriver-instans, opprettes en fersk sessionId genereres og er knyttet til det Firefox, Chrome eller IE-driveren.

Oppnå økthåndtering Selenium webdriver

Hver påfølgende kommando kjører bare i den bestemte nettleserøkten.

Oppnå økthåndtering Selenium webdriver

Fordi dette er innebygd i WebDriver, er det ikke nødvendig å tilordne sessionId manuelt.

Code Eksempel: To forskjellige økter genereres for to WebDriver-forekomster.

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

Hvordan kjøre parallelle tester med Selenium

Det finnes situasjoner der du ønsker å kjøre flere tester samtidig, som for eksempel nettleserkontroller eller store røyksuiter.

I slike tilfeller parallel attributt på TestNG Suite-taggen gjør jobben.

Kjør parallelle tester med Selenium

Attributtet parallel til suite-taggen godtar fire verdier:

AttributtverdiBetydning
testerAlle test tilfeller inne i en taggen til testing XML-filen kjøres parallelt.
klasserAlle testtilfeller innenfor en Java klassen går parallelt.
metoderAlle metoder som er kommentert med @Test kjøres parallelt.
forekomsterTester i samme instans kjører parallelt, mens to metoder fra to forskjellige instanser kjører i forskjellige tråder.

Ocuco thread-count attributtet bestemmer hvor mange tråder som allokeres for den utførelsen. Koble det sammen med TestNG rammeverk og installere TestNG in Eclipse før kjøring. For skalering utover én enkelt maskin, rute den samme suiten gjennom Selenium Rutenett 4 for distribuert parallell utførelse.

Komplett eksempel: tre testtilfeller kjøres parallelt og fyller ut innloggingsdata på https://demo.guru99.com/.

Det komplette prosjektet ser slik ut:

Kjør parallelle tester med 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 metoder)
<?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>

Test Case-rekkefølge og avhengighet

Du kan angi rekkefølgen og avhengigheten til testforsøk utførelse. Anta at du har to testtilfeller, testGuru99TC1 og testGuru99TC2, og du vil testGuru99TC2 å løpe før testGuru99TC1. Bruke dependsOnMethods attributt (eller dependsOnGroups for gruppenivåkjede) for å fikse den rekkefølgen. For bredere automatiseringsrammeverk design, sammenlign JUnit vs TestNG, og se gjennom finnElement referanse hvis dine avhengige tester deler lokatorer.

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

Ocuco TestNG kjøretid, hostet på testng.org, evaluerer disse deklarasjonene før tråder startes, slik at avhengige metoder alltid starter etter at forutsetningene deres er fullført.

Spørsmål og svar

En økt er en unik økt-ID som genereres hver gang en ny WebDriver-instans opprettes. Hver kommando fra den driveren ruter til den samsvarende nettleserøkten, og isolerer én test fra en annen.

Attributtet parallel på suite-taggen godtar tester, klasser, metoder eller instanser. TestNG starter flere tråder (angitt av trådantall) og kjører den valgte enheten samtidig, noe som reduserer den totale utførelsestiden.

Bruk dependsOnMethods-attributtet i include-taggen til testng.xml, eller @Test(dependsOnMethods = “name”) i koden. TestNG kjører forutsetningen først og hopper over den avhengige testen ved feil.

AI-verktøy klynger relaterte tester, forutsier optimalt trådantall fra tidligere kjøretider og omorganiserer suiter slik at trege tester starter først, noe som forkorter den totale veggklokketiden for byggeprosessen.

Ja. AI analyserer kallegrafer og historiske feillogger for å foreslå dependsOnMethods-lenker, flagge sirkulære avhengigheter og foreslå sikre parallelle grupper, noe som reduserer manuelt vedlikehold av testng.xml.

Oppsummer dette innlegget med: