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.

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.
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.
Hver påfølgende kommando kjører bare i den bestemte nettleserøkten.
Fordi dette er innebygd i WebDriver, er det ikke nødvendig å tilordne sessionId manuelt.
Code Eksempel: To forskjellige økter genereres for to WebDriver-forekomster.
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.
Attributtet parallel til suite-taggen godtar fire verdier:
| Attributtverdi | Betydning |
|---|---|
| tester | Alle test tilfeller inne i en taggen til testing XML-filen kjøres parallelt. |
| klasser | Alle testtilfeller innenfor en Java klassen går parallelt. |
| metoder | Alle metoder som er kommentert med @Test kjøres parallelt. |
| forekomster | Tester 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:
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>
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.
<?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.





