Parallell utförande i Selenium
⚡ Smart sammanfattning
Sessioner, parallell körning och beroende i Selenium kombinera ett unikt sessions-ID per WebDriver-instans med TestNG svitens kontroller, vilket låter många webbläsarfönster köra oberoende eller ordnade skript samtidigt och slutföra regressionscykeln snabbare.

För att förstå hur man kör skript parallellt behöver du först veta hur Selenium isolerar varje webbläsare genom sessioner.
Varför behöver vi sessionshantering?
Under testkörningen, Selenium WebDriver måste interagera med webbläsaren i varje steg för att utföra givna kommandon. Medan testet körs kan en annan användare starta ett andra skript på samma maskin och samma typ av webbläsare.
I en sådan situation behöver vi en mekanism så att de två utförandena inte överlappar varandra. Selenium löser detta genom sessionshantering.
Hur man uppnår sessionshantering Selenium WebDriver?
Om du inspekterar Selenium WebDriver-källan, hittar du en variabel som heter sessionIdVarje gång du skapar en ny WebDriver-instans skapas en ny sessionId genereras och bifogas det Firefox, Chrome eller IE-drivrutinen.
Varje efterföljande kommando körs bara inom den specifika webbläsarsessionen.
Eftersom detta är inbyggt i WebDriver finns det inget behov av att tilldela sessions-ID manuellt.
Code Exempel: Två olika sessioner genereras för två 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/"); } }
Hur man kör parallelltester med Selenium
Det finns situationer där man vill köra flera tester samtidigt, till exempel kontroller mellan webbläsare eller stora rökrum.
I sådana fall parallel attribut på TestNG Suite-taggen gör jobbet.
Attributet parallell i suite-taggen accepterar fyra värden:
| Attributvärde | Betydelse |
|---|---|
| tester | Alla testfall inuti en taggen för testning XML-filen körs parallellt. |
| klasser | Alla testfall inom en Java klassen går parallellt. |
| metoder | Alla metoder som är annoterade med @Test körs parallellt. |
| instanser | Tester i samma instans körs parallellt, medan två metoder från två olika instanser körs i olika trådar. |
Ocuco-landskapet thread-count attributet avgör hur många trådar som allokeras för den körningen. Koppla ihop det med TestNG ramverk och installera TestNG in Eclipse innan körning. För skalning bortom en enda maskin, routa samma svit genom Selenium Rutnät 4 för distribuerad parallell exekvering.
Komplett exempel: tre testfall körs parallellt och fyller i inloggningsdata https://demo.guru99.com/.
Det kompletta projektet ser ut så här:
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>
Testfallsordning och beroende
Du kan ange ordning och beroende för testfall körning. Anta att du har två testfall, testGuru99TC1 och testGuru99TC2, och du vill testGuru99TC2 att springa före testGuru99TC1. Använd dependsOnMethods attribut (eller dependsOnGroups för gruppnivåkedja) för att fixera den ordningen. För bredare automationsramverk designa, jämföra JUnit vs TestNGoch granska hittaElement referens om dina beroende tester delar positioner.
<?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-landskapet TestNG körtid, värd på testng.org, utvärderar dessa deklarationer innan trådar startas, så beroende metoder startar alltid efter att deras förutsättningar är klara.





