Parallell utførelse i Selenium
For å forstå hvordan man kjører skript parallelt, la oss først forstå
Hvorfor trenger vi økthåndtering?
Under testgjennomføringen Selenium WebDriver må samhandle med nettleseren hele tiden for å utføre gitte kommandoer. På kjøringstidspunktet er det også mulig at, før gjeldende kjøring fullføres, noen andre starter kjøringen av et annet skript, i samme maskin og i samme type nettleser.
I en slik situasjon trenger vi en mekanisme som gjør at våre to forskjellige henrettelser ikke skal overlappe hverandre. Dette kan oppnås ved å bruke Session Handling in Selenium.
Hvordan oppnå økthåndtering i Selenium WebDriver?
Hvis du sjekker kildekoden til Selenium WebDriver, vil du finne en variabel kalt 'sessionId'. Hver gang vi oppretter en ny forekomst av et WebDriver-objekt, vil en ny "sessionId" bli generert og knyttet til den aktuelle Firefox/Chrome/IE-driver ().
Så alt vi gjør etter dette vil kun utføres i det bestemte Firefox nettleserøkt.
Siden dette er en innebygd funksjonalitet, er det ikke noe eksplisitt behov for å tildele økt-IDen
Kodeeksempel: Her vil to forskjellige økter bli generert for to forskjellige WebDriver.
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(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("https://demo.guru99.com/V4/"); } }
Hvordan kjøre parallelle tester med Selenium
Det er situasjoner der du ønsker å kjøre flere tester samtidig.
I slike tilfeller kan man bruke "parallell" attributt
Parallellattributtet til suite-taggen kan godta fire verdier:
tester | Alle testsakene inne tag av Testing xml-filen vil kjøre parallelt. |
klasser | Alle testsakene inne i en Java klasse vil gå parallelt |
metoder | Alle metodene med @Test-annotering vil utføres parallelt. |
forekomster | Testtilfeller i samme forekomst vil kjøre parallelt, men to metoder med to forskjellige forekomster vil kjøre i forskjellige tråder. |
Attributtet thread-count lar deg spesifisere hvor mange tråder som skal tildeles for denne utførelsen.
Komplett eksempel: I dette eksemplet vil tre testtilfeller kjøre parallelt og fylle inn påloggingsdata https://demo.guru99.com/
Det komplette prosjektet vil se slik ut:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find 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(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it 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"> </class> </classes> </test> </suite>
Test Case-rekkefølge og avhengighet
Du kan angi rekkefølge og avhengighet av Testsak henrettelse.
Anta at du har to testtilfeller, 'testGuru99TC1' og 'testGuru99TC2', og du vil utføre testsaken 'testGuru99TC2' før 'testGuru99TC1'. I så fall vil vi bruke 'dependsOnMethods'-attributtet for å gjøre avhengighet og rekkefølge for utførelse.
<?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 value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
Sammendrag
- En ny sesjons-ID opprettes for en ny forekomst av WebDriver.
- Én økt vil binde seg til én bestemt nettleser.
- Ved å bruke attributtetråd og parallell kjører du skriptene dine parallelt.
- Du kan bruke attributtavhengighet til å sette rekkefølgen til testkjøring