Parallell utförande i Selenium: Sessionshantering & TestNG Dependency
För att förstå hur man kör skript parallellt, låt oss först förstå
Varför behöver vi sessionshantering?
Under testkörningen, Selenium WebDriver måste interagera med webbläsaren hela tiden för att utföra givna kommandon. Vid tidpunkten för exekvering är det också möjligt att, innan nuvarande exekvering slutförs, någon annan startar exekvering av ett annat skript, i samma maskin och i samma typ av webbläsare.
I en sådan situation behöver vi en mekanism genom vilken våra två olika avrättningar inte ska överlappa varandra. Detta kan uppnås med Session Handling in Selenium.
Hur man uppnår sessionshantering Selenium WebDriver?
Om du kontrollerar källkoden för Selenium WebDriver, hittar du en variabel som heter 'sessionId'. När vi skapar en ny instans av ett WebDriver-objekt kommer ett nytt "sessionId" att genereras och bifogas med just det Firefox/Chrome/IE-drivrutin ().
Så allt vi gör efter detta kommer endast att utföras i det specifika Firefox webbläsarsession.
Eftersom detta är en inbyggd funktion, finns det inget uttryckligt behov av att tilldela sessions-id
Kodexempel: Här kommer två olika sessioner att genereras för två olika 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/"); } }
Hur man kör parallelltester med Selenium
Det finns situationer där du vill köra flera tester samtidigt.
I sådana fall kan man använda "parallell" attribut
Parallellattributet för svittaggen kan acceptera fyra värden:
tester | Alla testfall inuti tagg av Testning xml-fil kommer att köras parallellt. |
klasser | Alla testfall i en Java klass kommer att gå parallellt |
metoder | Alla metoder med @Test-anteckning kommer att köras parallellt. |
instanser | Testfall i samma instans kommer att köras parallellt men två metoder med två olika instanser kommer att köras i olika trådar. |
Attributet thread-count låter dig ange hur många trådar som ska tilldelas för denna körning.
Komplett exempel: I detta exempel kommer tre testfall att köras parallellt och fylla in inloggningsdata https://demo.guru99.com/
Det kompletta projektet kommer att se ut så här:
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>
Testfallsordning och beroende
Du kan ställa in ordning och beroende av Testfall avrättning.
Anta att du har två testfall, 'testGuru99TC1' och 'testGuru99TC2' och du vill köra testfallet 'testGuru99TC2' före 'testGuru99TC1'. I det fallet kommer vi att använda 'dependsOnMethods'-attributet för att göra beroende och ordning för exekvering.
<?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>
Sammanfattning
- Ett nytt sessions-ID skapas för en ny instans av WebDriver.
- En session kommer att binda till en viss webbläsare.
- Med hjälp av attributtråd och parallell kör du dina skript parallellt.
- Du kan använda attributberoende för att ställa in ordern för testkörning