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.

Sesjonshåndtering

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

Oppnå økthåndtering Selenium webdriver

Så alt vi gjør etter dette vil kun utføres i det bestemte Firefox nettleserøkt.

Oppnå økthåndtering Selenium webdriver

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

Kjør parallelle tester med Selenium

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:

Kjør parallelle 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>

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