Aby zrozumieć, jak równolegle uruchamiać skrypty, najpierw zrozummy
Dlaczego potrzebujemy obsługi sesji?
Podczas wykonywania testu Selenium WebDriver musi przez cały czas współdziałać z przeglądarką, aby wykonać podane polecenia. W czasie wykonywania możliwe jest również, że przed zakończeniem bieżącego wykonywania ktoś inny rozpocznie wykonywanie innego skryptu, na tej samej maszynie iw tej samej przeglądarce.
W takiej sytuacji potrzebujemy mechanizmu, 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 WebDriver?
Jeśli sprawdzisz kod źródłowy Selenium WebDriver, znajdziesz zmienną o nazwie „sessionId”. Za każdym razem, gdy tworzymy nową instancję obiektu WebDriver, nowy „sessionId” zostanie wygenerowany i dołączony do tego konkretnego sterownika Firefox / Chrome / IE ().
Więc wszystko, co zrobimy później, zostanie wykonane tylko w tej konkretnej sesji przeglądarki Firefox.
Ponieważ jest to funkcja wbudowana, nie ma wyraźnej potrzeby przypisywania identyfikatora sesji
Przykład kodu: Tutaj zostaną wygenerowane dwie różne sesje dla dwóch różnych WebDriver.
import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class SessionHandling {public static void main (String… strings) {// Pierwsza sesja WebDriverSterownik WebDriver = nowy FirefoxDriver ();// Przejdź do witryny guru99driver.get („http://demo.guru99.com/V4/”);// Druga sesja WebDriverWebDriver driver2 = nowy FirefoxDriver ();// Przejdź do witryny guru99driver2.get („http://demo.guru99.com/V4/”);}}
Jak przeprowadzić testy równoległe z Selenium
Są sytuacje, w których chcesz uruchomić wiele testów w tym samym czasie.
W takich przypadkach można użyć atrybutu „równoległość”
Atrybut równoległy znacznika pakietu może przyjmować cztery wartości:
testy | Wszystkie przypadki testowe w tagu |
zajęcia | Wszystkie przypadki testowe w klasie Java będą działać 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 innym wątku. |
Atrybut liczba wątków pozwala określić, ile wątków ma być przydzielonych do tego wykonania.
Pełny przykład: W tym przykładzie trzy przypadki testowe będą działać równolegle i wypełniać dane logowania na stronie 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 {@Testpublic void executSessionOne () {// Pierwsza sesja WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Sterownik WebDriver = nowy ChromeDriver ();// Przejdź do witryny guru99driver.get („http://demo.guru99.com/V4/”);// znajdź pole tekstowe nazwy użytkownika i wypełnij jedriver.findElement (By.name ("uid")). sendKeys ("Driver 1");}@Testpublic void executeSessionTwo () {// Druga sesja WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Sterownik WebDriver = nowy ChromeDriver ();// Przejdź do witryny guru99driver.get („http://demo.guru99.com/V4/”);// znajdź pole tekstowe nazwy użytkownika i wypełnij jedriver.findElement (By.name ("uid")). sendKeys ("Driver 2");}@Testpublic void executSessionThree () {// Trzecia sesja WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Sterownik WebDriver = nowy ChromeDriver ();// Przejdź do witryny guru99driver.get („http://demo.guru99.com/V4/”);// znajdź pole tekstowe nazwy użytkownika i wypełnij jedriver.findElement (By.name ("uid")). sendKeys ("Driver 3");}}
TestNG.XML
xml version = "1.0" encoding = "UTF-8"?>
Kolejność i zależność przypadków testowych
Możesz ustawić kolejność i zależność wykonywania Przypadku Testowego.
Załóżmy, że masz dwa przypadki testowe, „testGuru99TC1” i „testGuru99TC2”, i chcesz wykonać przypadek testowy „testGuru99TC2” przed „testGuru99TC1”. W takim przypadku użyjemy atrybutu „dependsOnMethods”, aby określić zależność i kolejność wykonywania.
xml version = "1.0" encoding = "UTF-8"?>
Podsumowanie
- Nowy identyfikator sesji jest tworzony dla nowej instancji WebDriver.
- Jedna sesja zostanie powiązana z jedną konkretną przeglądarką.
- Używając wątku atrybutów i równoległego, uruchamiasz skrypty równolegle.
- Możesz użyć zależności atrybutów, aby ustawić kolejność wykonywania testów