Paralelní provedení v Selenium: Zpracování relací & TestNG Závislost
Abychom pochopili, jak paralelně spouštět skripty, nejprve si porozumějme
Proč potřebujeme Zpracování relací?
Během provádění testu, Selenium WebDriver musí neustále komunikovat s prohlížečem, aby mohl provádět dané příkazy. V době provádění je také možné, že před dokončením aktuálního provádění někdo jiný spustí provádění jiného skriptu na stejném počítači a ve stejném typu prohlížeče.
V takové situaci potřebujeme mechanismus, pomocí kterého by se naše dvě různé exekuce navzájem nepřekrývaly. Toho lze dosáhnout pomocí Session Handling in Selenium.
Jak dosáhnout Zpracování relace v Selenium WebDriver?
Pokud zkontrolujete zdrojový kód Selenium WebDriver, najdete proměnnou s názvem „sessionId“. Kdykoli vytvoříme novou instanci objektu WebDriver, vygeneruje se nové 'sessionId' a připojí se s tímto konkrétním Firefox/Chrome/IE Driver ().
Takže cokoli, co uděláme po tomto, se provede pouze v tomto konkrétním Firefox relaci prohlížeče.
Protože se jedná o vestavěnou funkci, není třeba explicitně přiřazovat ID relace
Příklad kódu: Zde budou vygenerovány dvě různé relace pro dva různé 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("https://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("https://demo.guru99.com/V4/"); } }
Jak spouštět paralelní testy s Selenium
Existují situace, kdy chcete spustit více testů současně.
V takových případech lze použít atribut „paralelní“.
Paralelní atribut značky sady může přijímat čtyři hodnoty:
Testy | Všechny testovací případy uvnitř tag of Testování xml poběží paralelně. |
třídy | Všechny testovací případy uvnitř a Java třída bude probíhat paralelně |
metody | Všechny metody s anotací @Test se budou provádět paralelně. |
instance | Testovací případy ve stejné instanci se budou provádět paralelně, ale dvě metody dvou různých instancí poběží v jiném vláknu. |
Atribut thread-count vám umožňuje určit, kolik vláken by mělo být přiděleno pro toto spuštění.
Úplný příklad: V tomto příkladu poběží paralelně tři testovací případy a vyplní přihlašovací údaje https://demo.guru99.com/
Kompletní projekt bude vypadat takto:
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("https://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("https://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("https://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>
Pořadí a závislost testovacího případu
Můžete nastavit pořadí a závislost Testovací případ provedení.
Předpokládejme, že máte dva testovací případy „testGuru99TC1“ a „testGuru99TC2“ a chcete provést testovací případ „testGuru99TC2“ před „testGuru99TC1“. V takovém případě použijeme atribut 'dependsOnMethods' k vytvoření závislosti a pořadí provádění.
<?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>
Shrnutí
- Pro novou instanci WebDriver se vytvoří nové ID relace.
- Jedna relace se spojí s jedním konkrétním prohlížečem.
- Pomocí vláken atributů a paralelně spouštíte své skripty paralelně.
- Závislost atributů můžete použít k nastavení příkazu k testování provedení