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.

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.
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.
Svaka sljedeća naredba izvršava se samo unutar te određene sesije preglednika.
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.
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.
Parallel atribut oznake suite prihvaća četiri vrijednosti:
| Vrijednost atributa | Značenje |
|---|---|
| ispitivanja | Svi test slučajevi unutar oznaka od testiranje XML datoteka se izvršava paralelno. |
| Nastava | Svi testni slučajevi unutar Java nastava se odvija paralelno. |
| metode | Sve metode označene s @Test izvršavaju se paralelno. |
| instance | Testovi 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:
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>
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.
<?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.





