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.

  • 🧩 Nyckelprincip: Varje ny WebDriver-instans genererar ett nytt sessions-ID, så två drivrutiner delar aldrig kommandon eller cookies på samma maskin.
  • ⚙️ Genomförande: Sätt parallell=”metoder” (eller tester, klasser, instanser) plus trådantal på TestNG suite-taggen för testng.xml för att sprida ut körningen.
  • 🧵 Parallel: Använd en WebDriver per @Test-metod för att undvika kapplöpningsförhållanden i delade webbläsarfönster under samtidiga körningar.
  • 🔗 Beroende: Ordna tester med dependsOnMethods inuti testng.xml, inklusive taggar eller @Test-annoteringen när en metod måste föregå en annan.
  • 🤖 AI-användning: Moderna AI-hjälpmedel förutsäger optimalt trådantal, grupperar säkra parallella metoder och identifierar osäkra kandidater från historiska körningsdata.

Hur man kör parallell körning i Selenium

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.

Sessionshantering

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.

Uppnå sessionshantering Selenium webbdrivrutin

Varje efterföljande kommando körs bara inom den specifika webbläsarsessionen.

Uppnå sessionshantering Selenium webbdrivrutin

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.

SessionHandling.java
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.

Kör parallella tester med Selenium

Attributet parallell i suite-taggen accepterar fyra värden:

AttributvärdeBetydelse
testerAlla testfall inuti en taggen för testning XML-filen körs parallellt.
klasserAlla testfall inom en Java klassen går parallellt.
metoderAlla metoder som är annoterade med @Test körs parallellt.
instanserTester 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:

Kör parallella tester med Selenium

TestaGuru99MultipleSession.java
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

testng.xml (parallella metoder)
<?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.

testng.xml (berorPåMetoder)
<?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.

Vanliga frågor

En session är ett unikt sessions-ID som genereras varje gång en ny WebDriver-instans skapas. Varje kommando från den drivrutinen dirigeras till matchande webbläsarsession och isolerar ett test från ett annat.

Attributet parallell på suite-taggen accepterar tester, klasser, metoder eller instanser. TestNG skapar flera trådar (inställda av trådantal) och kör den valda enheten samtidigt, vilket minskar den totala exekveringstiden.

Använd attributet dependsOnMethods inuti include-taggen för testng.xml, eller @Test(dependsOnMethods = “name”) i koden. TestNG kör förutsättningen först och hoppar över det beroende testet vid fel.

AI-verktyg klustrar relaterade tester, förutspår optimalt trådantal från tidigare körtider och ordnar om sviter så att långsamma tester startar först, vilket förkortar den totala klockfrekvensen för byggpipelinen.

Ja. AI analyserar anropsgrafer och historiska felloggar för att föreslå dependsOnMethods-länkar, flagga cirkulära beroenden och föreslå säkra parallella grupper, vilket minskar manuellt underhåll av testng.xml.

Sammanfatta detta inlägg med: