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.

Sessionshantering

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 ().

Uppnå sessionshantering Selenium webbdrivrutin

Så allt vi gör efter detta kommer endast att utföras i det specifika Firefox webbläsarsession.

Uppnå sessionshantering Selenium webbdrivrutin

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

Kör parallella tester med Selenium

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:

Kör parallella tester med Selenium

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