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.

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.
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.
Minden további parancs csak az adott böngésző-munkameneten belül fut.
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.
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.
A suite tag parallel attribútuma négy értéket fogad el:
| Attribútumérték | Jelentés |
|---|---|
| tesztek | Hírek teszt esetek egy belsejében a címkéje tesztelés Az XML fájlok párhuzamosan futnak. |
| osztályok | Minden teszteset egy Java osztály párhuzamosan fut. |
| mód | Az összes @Test-tel annotált metódus párhuzamosan fut. |
| példányok | Az 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:
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
<?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.
<?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.





