Parallel udførelse i Selenium
⚡ Smart opsummering
Sessioner, parallel kørsel og afhængighed i Selenium kombiner et unikt sessions-id pr. WebDriver-instans med TestNG suite-kontroller, der lader mange browservinduer køre uafhængige eller ordnede scripts på én gang og afslutter regressionscyklussen hurtigere.

For at forstå, hvordan man kører scripts parallelt, skal du først vide, hvordan Selenium isolerer hver browser gennem sessioner.
Hvorfor har vi brug for sessionshåndtering?
Under testudførelsen Selenium WebDriver skal interagere med browseren i hvert trin for at udføre givne kommandoer. Mens testen kører, kan en anden bruger starte et andet script på den samme maskine og samme type browser.
I en sådan situation har vi brug for en mekanisme, så de to henrettelser ikke overlapper hinanden. Selenium løser dette gennem sessionshåndtering.
Sådan opnår du sessionshåndtering Selenium WebDriver?
Hvis du inspicerer Selenium WebDriver-kilden, finder du en variabel kaldet sessionIdHver gang du opretter en ny WebDriver-instans, oprettes en frisk sessionId genereres og er knyttet til det Firefox, Chrome eller IE-driveren.
Hver efterfølgende kommando kører kun i den pågældende browsersession.
Da dette er indbygget i WebDriver, er der ingen grund til at tildele sessions-id'et manuelt.
Code Eksempel: Der genereres to forskellige sessioner for to WebDriver-instanser.
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/"); } }
Sådan kører du parallelle tests med Selenium
Der er situationer, hvor du ønsker at køre flere tests på samme tid, f.eks. browser-tjek eller store rygersuiter.
I sådanne tilfælde parallel attribut på TestNG Suite-tagget gør arbejdet.
Attributten parallel i suite-tagget accepterer fire værdier:
| Attributværdi | Betydning |
|---|---|
| tests | Alle test tilfælde inde i en mærket af test XML-filen kører parallelt. |
| klasser | Alle testcases inden for en Java klasse kører parallelt. |
| metoder | Alle metoder, der er annoteret med @Test, udføres parallelt. |
| forekomster | Test i samme instans kører parallelt, mens to metoder fra to forskellige instanser kører i forskellige tråde. |
thread-count attributten bestemmer, hvor mange tråde der allokeres til den pågældende udførelse. Par den med TestNG rammer og installere TestNG in Eclipse før kørsel. For skalering ud over en enkelt maskine, rut den samme suite igennem Selenium Gitter 4 til distribueret parallel udførelse.
Komplet eksempel: tre testcases kører parallelt og udfylder logindata på https://demo.guru99.com/.
Det komplette projekt ser sådan ud:
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 rækkefølge og afhængighed
Du kan indstille rækkefølgen og afhængigheden af test sag udførelse. Antag, at du har to testcases, testGuru99TC1 og testGuru99TC2, og du vil testGuru99TC2 at løbe før testGuru99TC1. Brug dependsOnMethods attribut (eller dependsOnGroups (for gruppeniveau-kæde) for at fastsætte den rækkefølge. For bredere automatiseringsramme design, sammenlign JUnit vs TestNG, og gennemgå findElement reference, hvis dine afhængige tests 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>
TestNG kørselstid, hostet på testng.org, evaluerer disse deklarationer før tråde startes, så afhængige metoder altid starter efter deres forudsætninger er afsluttet.





