Paralelní provedení v Selenium
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í





