Паралельне виконання в Selenium
⚡ Розумний підсумок
Сесії, паралельний запуск та залежність у Selenium поєднати унікальний ідентифікатор сесії для кожного екземпляра WebDriver з TestNG елементи керування пакетом, що дозволяє багатьом вікнам браузера одночасно запускати незалежні або впорядковані скрипти та швидше завершувати цикл регресії.

Щоб зрозуміти, як запускати скрипти паралельно, спочатку потрібно знати, як Selenium ізолює кожен браузер через сеанси.
Навіщо нам потрібна обробка сеансів?
Під час виконання тесту Selenium WebDriver має взаємодіяти з браузером на кожному кроці для виконання заданих команд. Поки цей тест виконується, інший користувач може запустити другий скрипт на тій самій машині та в тому ж типі браузера.
У такій ситуації нам потрібен механізм, щоб два виконання не перетиналися. Selenium вирішує це за допомогою обробки сеансів.
Як досягти обробки сеансу в Selenium WebDriver?
Якщо ви оглянете Selenium У вихідному коді WebDriver ви знайдете змінну під назвою sessionIdЩоразу, коли ви створюєте новий екземпляр WebDriver, створюється новий sessionId генерується та додається до цього Firefox, Chrome або драйвер IE.
Кожна наступна команда виконується лише в межах цього конкретного сеансу браузера.
Оскільки це вбудовано в WebDriver, немає потреби призначати sessionId вручну.
Code приклад: Для двох екземплярів 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(); // 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/"); } }
Як запускати паралельні тести за допомогою Selenium
Бувають ситуації, коли потрібно провести кілька тестів одночасно, наприклад кросбраузерні перевірки або великі курильні кімнати.
У таких випадках parallel атрибут на TestNG Тег suite виконує роботу.
Атрибут parallel тегу suite приймає чотири значення:
| Значення атрибута | Сенс |
|---|---|
| Тести | ВСІ тестові справи всередині тег Тестування XML-файл виконується паралельно. |
| класів | Усі тестові випадки всередині Java заняття проходять паралельно. |
| методика | Усі методи, анотовані за допомогою @Test, виконуються паралельно. |
| випадки | Тести в одному екземплярі виконуються паралельно, тоді як два методи двох різних екземплярів виконуються в різних потоках. |
Команда thread-count Атрибут визначає, скільки потоків виділяється для цього виконання. Поєднайте його з TestNG рамки та встановлювати TestNG in Eclipse перед запуском. Для масштабування за межі однієї машини, прокладіть той самий пакет через Selenium Сітка 4 для розподіленого паралельного виконання.
Завершений приклад: три тестові випадки виконуються паралельно та заповнюють дані для входу https://demo.guru99.com/.
Повний проект виглядає так:
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>
Порядок і залежність тестових випадків
Ви можете встановити порядок та залежність тестовий випадок виконання. Припустимо, у вас є два тестові випадки, testGuru99TC1 та testGuru99TC2, і ви хочете testGuru99TC2 бігти раніше testGuru99TC1. Використовувати dependsOnMethods атрибут (або dependsOnGroups для ланцюжка на рівні групи), щоб виправити цей порядок. Для ширшого фреймворк автоматизації дизайн, порівняння JUnit vs TestNGі перегляньте знайтиЕлемент посилання, якщо ваші залежні тести використовують спільні локатори.
<?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>
Команда TestNG середовище виконання, розміщене на testng.org, оцінює ці оголошення перед запуском потоків, тому залежні методи завжди запускаються після завершення виконання їхніх попередніх вимог.





