Wykonywanie równoległe w Selenium: Obsługa sesji i TestNG Zależność
Aby zrozumieć, jak równolegle uruchamiać skrypty, najpierw zrozumiemy
Dlaczego potrzebujemy obsługi sesji?
Podczas wykonywania testu, Selenium Aby wykonać podane polecenia, WebDriver musi cały czas współdziałać z przeglądarką. W momencie wykonywania możliwe jest również, że przed zakończeniem bieżącego wykonywania ktoś inny rozpocznie wykonywanie innego skryptu na tym samym komputerze i w przeglądarce tego samego typu.
W takiej sytuacji potrzebny jest mechanizm, dzięki któremu nasze dwie różne egzekucje nie powinny się na siebie nakładać. Można to osiągnąć za pomocą obsługi sesji w Selenium.
Jak osiągnąć obsługę sesji w Selenium Sterownik sieciowy?
Jeśli sprawdzisz kod źródłowy Selenium WebDriver, znajdziesz zmienną o nazwie „sessionId”. Za każdym razem, gdy tworzymy nową instancję obiektu WebDriver, zostanie wygenerowany nowy „sessionId” i dołączony do tego konkretnego FirefoxSterownik /Chrome/IE ().
Zatem wszystko, co zrobimy później, zostanie wykonane tylko w tym konkretnym przypadku Firefox sesja przeglądarki.
Ponieważ jest to funkcja wbudowana, nie ma wyraźnej potrzeby przypisywania identyfikatora sesji
Przykład kodu: W tym przypadku zostaną wygenerowane dwie różne sesje dla dwóch różnych sterowników WebDriver.
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(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("http://demo.guru99.com/V4/"); } }
Jak uruchamiać testy równoległe za pomocą Selenium
Są sytuacje, w których chcesz uruchomić wiele testów jednocześnie.
W takich przypadkach można zastosować atrybut „równoległy”.
Atrybut równoległy znacznika pakietu może przyjmować cztery wartości:
Testy | Wszystkie przypadki testowe w środku znacznik Testowanie xml będzie działać równolegle. |
Klasy | Wszystkie przypadki testowe wewnątrz pliku a Java zajęcia będą przebiegać równolegle |
metody | Wszystkie metody z adnotacją @Test będą wykonywane równolegle. |
instancje | Przypadki testowe w tej samej instancji będą wykonywane równolegle, ale dwie metody dwóch różnych instancji będą działać w różnych wątkach. |
Atrybut thread-count pozwala określić, ile wątków powinno zostać przydzielonych do tego wykonania.
Kompletny przykład: w tym przykładzie trzy przypadki testowe będą uruchamiane równolegle i uzupełniają dane logowania http://demo.guru99.com/
Kompletny projekt będzie wyglądał następująco:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find 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(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find user name text box and fill it 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"> </class> </classes> </test> </suite>
Kolejność i zależność przypadków testowych
Możesz ustawić kolejność i zależność Przypadek testowy wykonanie.
Załóżmy, że masz dwa przypadki testowe „testGuru99TC1” i „testGuru99TC2” i chcesz wykonać przypadek testowy „testGuru99TC2” przed „testGuru99TC1”. W takim przypadku użyjemy atrybutu „dependentsOnMethods”, aby ustalić zależność i kolejność wykonywania.
<?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 value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
Podsumowanie
- Dla nowej instancji WebDriver tworzony jest nowy identyfikator sesji.
- Jedna sesja będzie powiązana z jedną konkretną przeglądarką.
- Używając wątku atrybutów i równolegle, uruchamiasz skrypty równolegle.
- Możesz użyć zależności atrybutów, aby ustawić kolejność testowania wykonania