Paralelní provedení v Selenium
⚡ Chytré shrnutí
Relace, paralelní běh a závislost v Selenium kombinovat jedinečné ID relace pro každou instanci WebDriveru s TestNG ovládací prvky sady, které umožňují spouštět nezávislé nebo seřazené skripty v mnoha oknech prohlížeče najednou a rychleji dokončit regresní cyklus.
Abyste pochopili, jak spouštět skripty paralelně, musíte nejprve vědět, jak... Selenium izoluje každý prohlížeč prostřednictvím relací.
Proč potřebujeme Zpracování relací?
Během provádění testu, Selenium WebDriver musí v každém kroku interagovat s prohlížečem, aby mohl provádět zadané příkazy. Během testování může jiný uživatel spustit druhý skript na stejném počítači a ve stejném typu prohlížeče.
V takové situaci potřebujeme mechanismus, aby se obě provedení nepřekrývala. Selenium řeší to pomocí zpracování relací.
Jak dosáhnout Zpracování relace v Selenium WebDriver?
Pokud prohlédnete Selenium Ve zdrojovém kódu WebDriveru najdete proměnnou s názvem sessionIdPokaždé, když vytvoříte novou instanci WebDriveru, vytvoří se nová sessionId je generován a k němu připojen Firefox, Chrome nebo ovladač pro IE.
Každý následující příkaz se spustí pouze v rámci dané relace prohlížeče.
Protože je to integrováno do WebDriveru, není nutné ručně přiřazovat SessionId.
Code Příklad: Pro dvě instance WebDriveru se generují dvě různé relace.
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(); // Go to guru99 demo site driver.get("https://demo.guru99.com/V4/"); // Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); // Go to guru99 demo site driver2.get("https://demo.guru99.com/V4/"); } }
Jak spouštět paralelní testy s Selenium
Existují situace, kdy chcete spustit více testů najednou, například kontroly napříč prohlížeči nebo velké kuřácké apartmány.
V takových případech je parallel atribut na TestNG Značka suite dělá práci.
Atribut parallel tagu suite přijímá čtyři hodnoty:
| Hodnota atributu | Význam |
|---|---|
| Testy | Vše testovací případy uvnitř štítek Testování XML soubor spouštěný paralelně. |
| třídy | Všechny testovací případy uvnitř Java třída probíhá paralelně. |
| metody | Všechny metody anotované pomocí @Test se provádějí paralelně. |
| instance | Testy ve stejné instanci běží paralelně, zatímco dvě metody dvou různých instancí běží v různých vláknech. |
Jedno thread-count Atribut určuje, kolik vláken je alokováno pro dané spuštění. Spárujte ho s atributem TestNG rámec a instalovat TestNG in Eclipse před spuštěním. Pro škálování nad rámec jednoho počítače směrujte stejnou sadu přes Selenium Mřížka 4 pro distribuované paralelní provádění.
Kompletní příklad: tři testovací případy běží paralelně a vyplňují přihlašovací údaje na https://demo.guru99.com/.
Kompletní projekt vypadá takto:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executeSessionOne() { // First session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); // Find the 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(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executeSessionThree() { // Third session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); 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"/> </classes> </test> </suite>
Pořadí a závislost testovacího případu
Můžete nastavit pořadí a závislost modelový případ provedení. Předpokládejme, že máte dva testovací případy, testGuru99TC1 a testGuru99TC2a ty chceš testGuru99TC2 běžet před testGuru99TC1. Použijte dependsOnMethods atribut (nebo dependsOnGroups pro řetězení na úrovni skupiny) k opravě tohoto pořadí. Pro širší automatizační rámec návrh, porovnání JUnit vs TestNGa zkontrolujte najítPrvek reference, pokud vaše závislé testy sdílejí lokátory.
<?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 name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/> <include name="testGuru99TC2"/> </class> </classes> </test> </suite>
Jedno TestNG běhové prostředí, hostované na adrese testng.org, vyhodnocuje tyto deklarace před spuštěním vláken, takže závislé metody vždy začínají až po skončení jejich předpokladů.






