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.

Obsługa sesji

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 ().

Osiągnij obsługę sesji Selenium Sterownik sieciowy

Zatem wszystko, co zrobimy później, zostanie wykonane tylko w tym konkretnym przypadku Firefox sesja przeglądarki.

Osiągnij obsługę sesji Selenium Sterownik sieciowy

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”.

Uruchom testy równoległe za pomocą Selenium

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:

Uruchom testy równoległe za pomocą Selenium

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