Párhuzamos végrehajtás be Selenium

⚡ Okos összefoglaló

Munkamenetek, párhuzamos futtatás és függőségek Selenium WebDriver példányonként egyedi munkamenet-azonosítót kombinál a TestNG csomagvezérlőket, amelyek lehetővé teszik, hogy sok böngészőablak egyszerre független vagy rendezett szkripteket futtasson, és gyorsabban befejezze a regressziós ciklust.

  • 🧩 Alapelv: Minden új WebDriver példány új munkamenet-azonosítót generál, így két illesztőprogram soha nem oszt meg parancsokat vagy sütiket ugyanazon a gépen.
  • 🇧🇷 Végrehajtás: Állítsa be a parallel=”methods” (vagy testek, osztályok, példányok) és a thread-count értéket a következőn: TestNG suite tag a testng.xml fájlban a végrehajtás elosztásához.
  • 🧵 Párhuzamosság: Használjon egy WebDriver-t @Test metódusonként, hogy elkerülje a versenyhelyzeteket a megosztott böngészőablakokban egyidejű futtatások során.
  • 🔗 Függőség: A dependsOnMethods metódusokkal rendelkező sorrendi tesztek a testng.xml fájlban címkéket vagy a @Test annotációt használva kerülhetnek sorrendbe, ha az egyik metódusnak meg kell előznie a másikat.
  • 🤖 MI használata: A modern mesterséges intelligencia segítők megjósolják az optimális szálszámot, csoportosítják a biztonságos párhuzamos metódusokat, és felszínre hozzák a bizonytalan jelölteket a korábbi futási adatokból.

Hogyan futtatható párhuzamos végrehajtás a Selenium

Ahhoz, hogy megértsük, hogyan futtathatunk szkripteket párhuzamosan, először is tudnunk kell, hogyan... Selenium munkamenetek alapján elkülöníti az egyes böngészőket.

Miért van szükségünk munkamenet-kezelésre?

A teszt végrehajtása során a Selenium A WebDrivernek minden lépésben interakcióba kell lépnie a böngészővel a megadott parancsok végrehajtásához. Amíg a teszt fut, egy másik felhasználó elindíthat egy második szkriptet ugyanazon a gépen és ugyanolyan típusú böngészővel.

Munkamenet kezelése

Ilyen helyzetben szükségünk van egy olyan mechanizmusra, amely megakadályozza a két végrehajtás átfedését. Selenium munkamenet-kezeléssel oldja meg ezt.

Hogyan lehet elérni a munkamenet-kezelést Selenium WebDriver?

Ha megvizsgálod a Selenium A WebDriver forráskódban találsz egy változót, melynek neve sessionIdMinden alkalommal, amikor új WebDriver példányt hoz létre, egy friss sessionId létrejön és ehhez kapcsolódik Firefox, Chrome vagy IE illesztőprogram.

Érje el a munkamenet-kezelést Selenium webdriver

Minden további parancs csak az adott böngésző-munkameneten belül fut.

Érje el a munkamenet-kezelést Selenium webdriver

Mivel ez be van építve a WebDriverbe, nincs szükség a munkamenet-azonosító manuális hozzárendelésére.

Code Példa: Két különböző munkamenet jön létre két WebDriver példányhoz.

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

Hogyan lehet párhuzamos teszteket futtatni Selenium

Vannak olyan helyzetek, amikor több tesztet kell egyszerre futtatni, például böngészőközi ellenőrzések vagy nagy füstkabinok.

Ilyen esetekben a parallel attribútum a TestNG A suite tag elvégzi a munkát.

Futtasson párhuzamos teszteket a Selenium

A suite tag parallel attribútuma négy értéket fogad el:

AttribútumértékJelentés
tesztekHírek teszt esetek egy belsejében a címkéje tesztelés Az XML fájlok párhuzamosan futnak.
osztályokMinden teszteset egy Java osztály párhuzamosan fut.
módAz összes @Test-tel annotált metódus párhuzamosan fut.
példányokAz ugyanazon példányban lévő tesztek párhuzamosan futnak, míg két különböző példány két metódusa különböző szálakban fut.

Az thread-count attribútum határozza meg, hogy hány szálat foglaljon le az adott végrehajtáshoz. Párosítsa a következővel: TestNG keret és a telepíteni TestNG in Eclipse futtatás előtt. Egyetlen gépen túli skálázáshoz ugyanazt a csomagot kell átirányítani Selenium 4 rács elosztott párhuzamos végrehajtáshoz.

Teljes példa: három teszteset fut párhuzamosan és kitölti a bejelentkezési adatokat https://demo.guru99.com/.

A teljes projekt így néz ki:

Futtasson párhuzamos teszteket a Selenium

TesztelésGuru99Többszörös Munkamenet.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 (párhuzamos metódusok)
<?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>

Tesztesetek sorrendje és függősége

Beállíthatod a sorrendet és a függőséget próbaper végrehajtás. Tegyük fel, hogy két teszteseted van, testGuru99TC1 és a testGuru99TC2, és szeretné testGuru99TC2 elé futni testGuru99TC1. Használja a dependsOnMethods attribútum (vagy dependsOnGroups csoportszintű láncoláshoz) a sorrend rögzítéséhez. Szélesebb körű automatizálási keretrendszer tervezés, összehasonlítás JUnit vs TestNG, és tekintse át a findElement hivatkozás, ha a függő tesztek megosztják a lokátorokat.

testng.xml (függések a módszerektől)
<?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>

Az TestNG futásidejű, a következő helyen tárolva: testingng.org, a szálak indítása előtt kiértékeli ezeket a deklarációkat, így a függő metódusok mindig az előfeltételeik befejezése után indulnak el.

GYIK

Egy munkamenet egy egyedi munkamenet-azonosító, amely minden új WebDriver-példány létrehozásakor generálódik. Az adott illesztőprogram minden parancsa a megfelelő böngésző-munkamenethez irányítódik, elkülönítve az egyes teszteket a többitől.

A suite tag parallel attribútuma teszteket, osztályokat, metódusokat vagy példányokat fogad el. TestNG több szálat indít (a szálak száma határozza meg), és a kiválasztott egységet egyidejűleg futtatja, csökkentve a teljes végrehajtási időt.

Használd a dependsOnMethods attribútumot a testng.xml include tagjén belül, vagy a @Test(dependsOnMethods = “name”) függvényt a kódban. TestNG először az előfeltételt futtatja, és hiba esetén kihagyja a függő tesztet.

A mesterséges intelligencia eszközök klaszterezik a kapcsolódó teszteket, megjósolják az optimális szálszámot a korábbi futási környezetekből, és átrendezik a csomagokat, hogy a lassú tesztek induljanak el először, lerövidítve a build folyamat teljes átfutási idejét.

Igen. A mesterséges intelligencia hívási grafikonokat és korábbi hibanaplókat elemezve javasol dependsOnMethods linkeket, jelöli a körkörös függőségeket, és biztonságos párhuzamos csoportokat javasol, csökkentve ezzel a testng.xml manuális karbantartásának szükségességét.

Foglald össze ezt a bejegyzést a következőképpen: