Wykonywanie równoległe w Selenium
⚡ Inteligentne podsumowanie
Sesje, przebieg równoległy i zależności w Selenium połącz unikalny identyfikator sesji dla każdej instancji WebDriver z TestNG kontrolek pakietu, umożliwiających wielu oknom przeglądarki jednoczesne uruchamianie niezależnych lub uporządkowanych skryptów i szybsze zakończenie cyklu regresji.

Aby zrozumieć, jak uruchamiać skrypty równolegle, najpierw musisz wiedzieć, jak Selenium izoluje każdą przeglądarkę poprzez sesje.
Dlaczego potrzebujemy obsługi sesji?
Podczas wykonywania testu, Selenium WebDriver musi na każdym kroku komunikować się z przeglądarką, aby wykonać polecenia. Podczas trwania testu inny użytkownik może uruchomić drugi skrypt na tym samym komputerze i w tej samej przeglądarce.
W takiej sytuacji potrzebny jest mechanizm, który zapobiegnie nakładaniu się dwóch wykonań. Selenium rozwiązuje ten problem poprzez obsługę sesji.
Jak osiągnąć obsługę sesji w Selenium Sterownik sieciowy?
Jeśli sprawdzisz Selenium W źródle WebDriver znajdziesz zmienną o nazwie sessionId. Za każdym razem, gdy tworzysz nową instancję WebDriver, tworzony jest nowy sessionId jest generowany i dołączany do tego Firefox, Chrome lub sterownik IE.
Każde kolejne polecenie będzie wykonywane wyłącznie w ramach danej sesji przeglądarki.
Ponieważ jest to funkcja wbudowana w WebDriver, nie ma potrzeby ręcznego przypisywania sessionId.
Code Przykład: Dla dwóch instancji WebDriver generowane są dwie różne sesje.
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/"); } }
Jak uruchamiać testy równoległe za pomocą Selenium
Są sytuacje, w których chcesz przeprowadzić wiele testów jednocześnie, np. sprawdzanie między przeglądarkami lub duże kabiny dla palących.
W takich przypadkach parallel atrybut na TestNG tag suite wykonuje całą pracę.
Atrybut równoległy znacznika pakietu przyjmuje cztery wartości:
| Wartość atrybutu | Znaczenie |
|---|---|
| Testy | Wszystkie produkty przypadki testowe wewnątrz tag testowanie Plik XML uruchamiany równolegle. |
| Klasy | Wszystkie przypadki testowe wewnątrz Java zajęcia prowadzone równolegle. |
| metody | Wszystkie metody oznaczone adnotacją @Test są wykonywane równolegle. |
| instancje | Testy w tej samej instancji są wykonywane równolegle, natomiast dwie metody dwóch różnych instancji są wykonywane w różnych wątkach. |
thread-count Atrybut decyduje, ile wątków jest przydzielanych do danego wykonania. Połącz go z TestNG oraz zainstalować TestNG in Eclipse przed uruchomieniem. W przypadku skalowania wykraczającego poza pojedynczą maszynę, przekieruj ten sam pakiet przez Selenium Siatka 4 do rozproszonego wykonywania równoległego.
Pełny przykład: trzy przypadki testowe są uruchamiane równolegle i wypełniane danymi logowania https://demo.guru99.com/.
Kompletny projekt wygląda następująco:
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>
Kolejność i zależność przypadków testowych
Możesz ustawić kolejność i zależność walizka testowa wykonanie. Załóżmy, że masz dwa przypadki testowe, testGuru99TC1 oraz testGuru99TC2, i Ty chcesz testGuru99TC2 biec przed testGuru99TC1. Użyj dependsOnMethods atrybut (lub dependsOnGroups (do łańcuchowania na poziomie grupy) w celu ustalenia tej kolejności. W przypadku szerszego framework automatyzacji projekt, porównanie JUnit vs TestNGi przejrzyj znajdźElement odniesienie, jeśli Twoje testy zależne współdzielą lokalizatory.
<?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 środowisko wykonawcze, hostowane w testng.org, ocenia te deklaracje przed uruchomieniem wątków, więc metody zależne zawsze rozpoczynają się po zakończeniu ich wymagań wstępnych.





