Паралельне виконання в Selenium: Керування сеансами та TestNG Залежність
Щоб зрозуміти, як запускати сценарії паралельно, давайте спочатку розберемося
Навіщо нам потрібна обробка сеансів?
Під час виконання тесту Selenium WebDriver повинен весь час взаємодіяти з браузером, щоб виконувати задані команди. Під час виконання також можливо, що до завершення поточного виконання хтось інший починає виконання іншого сценарію на тій же машині та в тому ж типі браузера.
У такій ситуації нам потрібен механізм, за допомогою якого наші два різні виконання не повинні накладатися одне на одного. Цього можна досягти за допомогою обробки сеансу в 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
Бувають ситуації, коли потрібно запустити кілька тестів одночасно.
У таких випадках можна використовувати атрибут «паралельний».
Атрибут parallel тегу suite може приймати чотири значення:
Тести | Усі тестові випадки всередині тег Тестування 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>
Підсумки
- Для нового екземпляра WebDriver створюється новий ідентифікатор сесії.
- Один сеанс буде прив’язаний до одного конкретного браузера.
- Використовуючи атрибут thread і parallel, ви запускаєте свої сценарії паралельно.
- Ви можете використовувати залежність атрибутів, щоб установити порядок тестування виконання