Paralelno izvođenje u Selenium

⚡ Pametni sažetak

Sesije, paralelno izvođenje i ovisnost u Selenium kombinirajte jedinstveni sessionId po instanci WebDrivera s TestNG kontrole paketa, omogućujući mnogim prozorima preglednika da istovremeno izvršavaju neovisne ili uređene skripte i brže završe ciklus regresije.

  • 🧩 Ključni princip: Svaka nova instanca WebDrivera generira novi sessionId, tako da dva upravljačka programa nikada ne dijele naredbe ili kolačiće na istom računalu.
  • provedba: Postavite parallel=”metode” (ili testove, klase, instance) plus broj niti na TestNG Oznaka paketa testng.xml za raspoređivanje izvršavanja.
  • 🧵 Paralelizam: Koristite jedan WebDriver po @Test metodi kako biste izbjegli uvjete utrke na dijeljenim prozorima preglednika tijekom istodobnih pokretanja.
  • 🔗 Ovisnost: Naručite testove s dependsOnMethods unutar testng.xml include tags ili anotaciju @Test kada jedna metoda mora prethoditi drugoj.
  • 🤖 Upotreba umjetne inteligencije: Moderni AI pomagači predviđaju optimalni broj niti, grupno sigurne paralelne metode i otkrivaju nestabilne kandidate iz povijesnih podataka o izvršavanju.

Kako pokrenuti paralelno izvršavanje u Selenium

Da biste razumjeli kako paralelno izvršavati skripte, prvo morate znati kako Selenium izolira svaki preglednik kroz sesije.

Zašto nam je potrebno rukovanje sesijom?

Tijekom izvođenja testa, Selenium WebDriver mora komunicirati s preglednikom u svakom koraku kako bi izvršio zadane naredbe. Dok se taj test izvodi, drugi korisnik može pokrenuti drugu skriptu na istom računalu i istoj vrsti preglednika.

Rukovanje sesijom

U takvoj situaciji, potreban nam je mehanizam kako se dva izvršenja ne bi preklapala. Selenium rješava to rukovanjem sesijama.

Kako postići rukovanje sesijom u Selenium WebDriver?

Ako pregledate Selenium U izvornom kodu WebDrivera naći ćete varijablu pod nazivom sessionIdSvaki put kada stvorite novu instancu WebDrivera, nova sessionId generira se i pridružuje tome Firefox, Chrome ili IE upravljački program.

Postignite upravljanje sesijom Selenium webdriver

Svaka sljedeća naredba izvršava se samo unutar te određene sesije preglednika.

Postignite upravljanje sesijom Selenium webdriver

Budući da je ovo ugrađeno u WebDriver, nema potrebe ručno dodijeliti sessionId.

Code Primjer: Za dvije instance WebDrivera generiraju se dvije različite sesije.

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/");
    }
}

Kako izvoditi paralelne testove sa Selenium

Postoje situacije u kojima želite pokrenuti više testova istovremeno, kao što je provjere u više preglednika ili velike pušačke sobe.

U takvim slučajevima parallel atribut na TestNG Oznaka apartmana obavlja posao.

Pokrenite paralelne testove s Selenium

Parallel atribut oznake suite prihvaća četiri vrijednosti:

Vrijednost atributaZnačenje
ispitivanjaSvi test slučajevi unutar oznaka od testiranje XML datoteka se izvršava paralelno.
NastavaSvi testni slučajevi unutar Java nastava se odvija paralelno.
metodeSve metode označene s @Test izvršavaju se paralelno.
instanceTestovi u istoj instanci izvode se paralelno, dok se dvije metode dviju različitih instanci izvode u različitim nitima.

The thread-count Atribut određuje koliko je niti dodijeljeno za to izvršavanje. Uparite ga s TestNG okvir i instalirati TestNG in Eclipse prije pokretanja. Za skaliranje izvan jednog stroja, usmjerite isti paket kroz Selenium Mreža 4 za distribuirano paralelno izvršavanje.

Potpuni primjer: tri testna slučaja se izvode paralelno i popunjavaju podatke za prijavu na https://demo.guru99.com/.

Kompletan projekt izgleda ovako:

Pokrenite paralelne testove s 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 (paralelne metode)
<?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>

Redoslijed testnih slučajeva i ovisnost

Možete postaviti redoslijed i ovisnost testni slučaj izvršenje. Pretpostavimo da imate dva testna slučaja, testGuru99TC1 i testGuru99TC2, a ti želiš testGuru99TC2 trčati prije testGuru99TC1, Koristiti dependsOnMethods atribut (ili dependsOnGroups za ulančavanje na razini grupe) kako bi se popravio taj redoslijed. Za šire okvir za automatizaciju dizajn, usporedba JUnit vs TestNGi pregledajte pronađiElement referenca ako vaši ovisni testovi dijele lokatore.

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

The TestNG vrijeme izvođenja, hostirano na testng.org, procjenjuje ove deklaracije prije pokretanja niti, tako da ovisne metode uvijek počinju nakon što završe njihovi preduvjeti.

Pitanja i odgovori

Sesija je jedinstveni ID sesije koji se generira svaki put kada se stvori nova instanca WebDrivera. Svaka naredba iz tog upravljačkog programa usmjerava se na odgovarajuću sesiju preglednika, izolirajući jedan test od drugog.

Atribut parallel na oznaci suite prihvaća testove, klase, metode ili instance. TestNG stvara više niti (postavljeno brojem niti) i istovremeno pokreće odabranu jedinicu, smanjujući ukupno vrijeme izvršavanja.

Koristite atribut dependsOnMethods unutar oznake include datoteke testng.xml ili @Test(dependsOnMethods = “name”) u kodu. TestNG prvo pokreće preduvjet i preskače zavisni test u slučaju neuspjeha.

Alati umjetne inteligencije grupiraju testove povezane s klasterima, predviđaju optimalni broj niti iz prošlih vremena izvođenja i mijenjaju redoslijed paketa tako da spori testovi počinju prvi, skraćujući ukupno vrijeme rada za cjevovod izgradnje.

Da. Umjetna inteligencija analizira grafove poziva i povijesne zapise o greškama kako bi predložila veze dependsOnMethods, označila kružne ovisnosti i predložila sigurne paralelne grupe, smanjujući ručno održavanje datoteke testng.xml.

Sažmite ovu objavu uz: