Parallel udførelse i Selenium

⚡ Smart opsummering

Sessioner, parallel kørsel og afhængighed i Selenium kombiner et unikt sessions-id pr. WebDriver-instans med TestNG suite-kontroller, der lader mange browservinduer køre uafhængige eller ordnede scripts på én gang og afslutter regressionscyklussen hurtigere.

  • 🧩 Nøgleprincip: Hver ny WebDriver-instans genererer et nyt sessions-id, så to drivere aldrig deler kommandoer eller cookies på den samme maskine.
  • 🇧🇷 Gennemførelse: Sæt parallel=”metoder” (eller tests, klasser, instanser) plus trådantal på TestNG suite-tagget for testng.xml for at sprede udførelsen.
  • 🧵 parallelitet: Brug én WebDriver pr. @Test-metode for at undgå kapløbsbetingelser på delte browservinduer under samtidige kørsel.
  • 🔗 Afhængighed: Orden af ​​tests med dependsOnMethods i testng.xml inkluderer tags eller @Test-annotationen, når én metode skal gå forud for en anden.
  • 🤖 AI-brug: Moderne AI-hjælpere forudsiger optimalt trådantal, grupperer sikre parallelle metoder og afdækker ustabile kandidater ud fra historiske kørselsdata.

Sådan kører du parallel udførelse i Selenium

For at forstå, hvordan man kører scripts parallelt, skal du først vide, hvordan Selenium isolerer hver browser gennem sessioner.

Hvorfor har vi brug for sessionshåndtering?

Under testudførelsen Selenium WebDriver skal interagere med browseren i hvert trin for at udføre givne kommandoer. Mens testen kører, kan en anden bruger starte et andet script på den samme maskine og samme type browser.

Sessionshåndtering

I en sådan situation har vi brug for en mekanisme, så de to henrettelser ikke overlapper hinanden. Selenium løser dette gennem sessionshåndtering.

Sådan opnår du sessionshåndtering Selenium WebDriver?

Hvis du inspicerer Selenium WebDriver-kilden, finder du en variabel kaldet sessionIdHver gang du opretter en ny WebDriver-instans, oprettes en frisk sessionId genereres og er knyttet til det Firefox, Chrome eller IE-driveren.

Opnå sessionshåndtering i Selenium webdriver

Hver efterfølgende kommando kører kun i den pågældende browsersession.

Opnå sessionshåndtering i Selenium webdriver

Da dette er indbygget i WebDriver, er der ingen grund til at tildele sessions-id'et manuelt.

Code Eksempel: Der genereres to forskellige sessioner for to 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/");
    }
}

Sådan kører du parallelle tests med Selenium

Der er situationer, hvor du ønsker at køre flere tests på samme tid, f.eks. browser-tjek eller store rygersuiter.

I sådanne tilfælde parallel attribut på TestNG Suite-tagget gør arbejdet.

Kør parallelle test med Selenium

Attributten parallel i suite-tagget accepterer fire værdier:

AttributværdiBetydning
testsAlle test tilfælde inde i en mærket af test XML-filen kører parallelt.
klasserAlle testcases inden for en Java klasse kører parallelt.
metoderAlle metoder, der er annoteret med @Test, udføres parallelt.
forekomsterTest i samme instans kører parallelt, mens to metoder fra to forskellige instanser kører i forskellige tråde.

thread-count attributten bestemmer, hvor mange tråde der allokeres til den pågældende udførelse. Par den med TestNG rammer og installere TestNG in Eclipse før kørsel. For skalering ud over en enkelt maskine, rut den samme suite igennem Selenium Gitter 4 til distribueret parallel udførelse.

Komplet eksempel: tre testcases kører parallelt og udfylder logindata på https://demo.guru99.com/.

Det komplette projekt ser sådan ud:

Kør parallelle test med Selenium

TestGuru99MultipleSession.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 (parallelle 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>

Test Case rækkefølge og afhængighed

Du kan indstille rækkefølgen og afhængigheden af test sag udførelse. Antag, at du har to testcases, testGuru99TC1 og testGuru99TC2, og du vil testGuru99TC2 at løbe før testGuru99TC1. Brug dependsOnMethods attribut (eller dependsOnGroups (for gruppeniveau-kæde) for at fastsætte den rækkefølge. For bredere automatiseringsramme design, sammenlign JUnit vs TestNG, og gennemgå findElement reference, hvis dine afhængige tests deler lokatorer.

testng.xml (afhængigerafMetoder)
<?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>

TestNG kørselstid, hostet på testng.org, evaluerer disse deklarationer før tråde startes, så afhængige metoder altid starter efter deres forudsætninger er afsluttet.

Ofte Stillede Spørgsmål

En session er et unikt sessions-id, der genereres hver gang en ny WebDriver-instans oprettes. Hver kommando fra den driver dirigerer til den matchende browsersession og isolerer dermed én test fra en anden.

Attributten parallel på suite-tagget accepterer tests, klasser, metoder eller instanser. TestNG starter flere tråde (indstillet af trådantal) og kører den valgte enhed samtidigt, hvilket reducerer den samlede udførelsestid.

Brug attributten dependsOnMethods i include-tagget i testng.xml eller @Test(dependsOnMethods = “name”) i koden. TestNG kører forudsætningen først og springer den afhængige test over ved fejl.

AI-værktøjer klynger relaterede tests, forudsiger optimalt trådantal ud fra tidligere kørselstider og omarrangerer suiter, så langsomme tests starter først, hvilket forkorter den samlede wall-clock-tid for byggepipelinen.

Ja. AI analyserer kaldgrafer og historiske fejllogfiler for at foreslå dependsOnMethods-links, markere cirkulære afhængigheder og foreslå sikre parallelle grupper, hvilket reducerer manuel vedligeholdelse af testng.xml.

Opsummer dette indlæg med: