Паралелно изпълнение в Selenium
За да разберете как да изпълнявате скриптове паралелно, нека първо разберем
Защо се нуждаем от обработка на сесии?
По време на изпълнението на теста, Selenium WebDriver трябва да взаимодейства с браузъра през цялото време, за да изпълни дадени команди. По време на изпълнението също е възможно, преди текущото изпълнение да завърши, някой друг да започне изпълнението на друг скрипт на същата машина и в същия тип браузър.
В такава ситуация се нуждаем от механизъм, чрез който нашите две различни изпълнения не трябва да се припокриват едно с друго. Това може да се постигне с помощта на Session Handling in Selenium.
Как да постигнете обработка на сесии в Selenium WebDriver?
Ако проверите изходния код на Selenium WebDriver, ще намерите променлива, наречена „sessionId“. Всеки път, когато създаваме нов екземпляр на обект WebDriver, ще се генерира нов „sessionId“ и ще бъде прикачен към този конкретен Firefox/Chrome/IE драйвер ().
Така че всичко, което правим след това, ще се изпълни само в тази част Firefox сесия на браузъра.
Тъй като това е вградена функционалност, няма изрична необходимост от присвояване на идентификатора на сесията
Пример за код: Тук ще бъдат генерирани две различни сесии за два различни 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/"); } }
Как да стартирате паралелни тестове с Selenium
Има ситуации, в които искате да изпълните няколко теста едновременно.
В такива случаи може да се използва атрибут „паралелен“.
Паралелният атрибут на етикета на пакета може да приема четири стойности:
тестове | Всички тестови случаи вътре етикет на Тестване xml файл ще работи паралелно. |
класове | Всички тестови случаи в a Java клас ще тече паралелно |
методи | Всички методи с анотация @Test ще се изпълняват паралелно. |
случаи | Тестовите случаи в един и същ екземпляр ще се изпълняват паралелно, но два метода от два различни екземпляра ще се изпълняват в различна нишка. |
Атрибутът thread-count ви позволява да посочите колко нишки трябва да бъдат разпределени за това изпълнение.
Пълен пример: В този пример три тестови случая ще се изпълняват паралелно и ще попълват данни за вход https://demo.guru99.com/
Пълният проект ще изглежда така:
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>
Ред на тестови случаи и зависимост
Можете да зададете ред и зависимост от Тестов случай екзекуция.
Да предположим, че имате два тестови случая, 'testGuru99TC1' и 'testGuru99TC2' и искате да изпълните тестов случай 'testGuru99TC2' преди 'testGuru99TC1'. В този случай ще използваме атрибута 'dependsOnMethods', за да направим зависимост и ред на изпълнение.
<?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>
Oбобщение
- Създава се нов идентификатор на сесия за нов екземпляр на WebDriver.
- Една сесия ще се свърже с един конкретен браузър.
- Използвайки атрибут thread и parallel, изпълнявате скриптовете си паралелно.
- Можете да използвате зависимостта на атрибута, за да зададете реда за тестване на изпълнението