Паралельне виконання в Selenium

⚡ Розумний підсумок

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

  • 🧩 Ключовий принцип: Кожен новий екземпляр WebDriver генерує новий sessionId, тому два драйвери ніколи не використовують команди чи файли cookie на одній машині.
  • Реалізація: Встановіть parallel=”methods” (або тести, класи, екземпляри) плюс thread-count для TestNG Тег набору testng.xml для розподілу виконання.
  • 🧵 Паралелізм: Використовуйте один WebDriver для кожного методу @Test, щоб уникнути умов змагання у спільних вікнах браузера під час одночасних запусків.
  • 🔗 Залежність: Упорядкуйте тести за допомогою тегів dependsOnMethods всередині testng.xml або анотації @Test, коли один метод має передувати іншому.
  • 🤖 Використання ШІ: Сучасні помічники штучного інтелекту прогнозують оптимальну кількість потоків, групово-безпечні паралельні методи та виявляють ненадійні кандидати на основі історичних даних прогонів.

Як запустити паралельне виконання в Selenium

Щоб зрозуміти, як запускати скрипти паралельно, спочатку потрібно знати, як Selenium ізолює кожен браузер через сеанси.

Навіщо нам потрібна обробка сеансів?

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

Обробка сесії

У такій ситуації нам потрібен механізм, щоб два виконання не перетиналися. Selenium вирішує це за допомогою обробки сеансів.

Як досягти обробки сеансу в Selenium WebDriver?

Якщо ви оглянете Selenium У вихідному коді WebDriver ви знайдете змінну під назвою sessionIdЩоразу, коли ви створюєте новий екземпляр WebDriver, створюється новий sessionId генерується та додається до цього Firefox, Chrome або драйвер IE.

Досягніть обробки сеансу Selenium веб-драйвер

Кожна наступна команда виконується лише в межах цього конкретного сеансу браузера.

Досягніть обробки сеансу Selenium веб-драйвер

Оскільки це вбудовано в WebDriver, немає потреби призначати sessionId вручну.

Code приклад: Для двох екземплярів WebDriver генеруються два різні сеанси.

SessionHandling.java
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 виконує роботу.

Виконайте паралельні тести за допомогою Selenium

Атрибут parallel тегу suite приймає чотири значення:

Значення атрибутаСенс
ТестиВСІ тестові справи всередині тег Тестування XML-файл виконується паралельно.
класівУсі тестові випадки всередині Java заняття проходять паралельно.
методикаУсі методи, анотовані за допомогою @Test, виконуються паралельно.
випадкиТести в одному екземплярі виконуються паралельно, тоді як два методи двох різних екземплярів виконуються в різних потоках.

Команда thread-count Атрибут визначає, скільки потоків виділяється для цього виконання. Поєднайте його з TestNG рамки та встановлювати TestNG in Eclipse перед запуском. Для масштабування за межі однієї машини, прокладіть той самий пакет через Selenium Сітка 4 для розподіленого паралельного виконання.

Завершений приклад: три тестові випадки виконуються паралельно та заповнюють дані для входу https://demo.guru99.com/.

Повний проект виглядає так:

Виконайте паралельні тести за допомогою Selenium

ПеревіритиGuru99MultipleSession.java
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

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і перегляньте знайтиЕлемент посилання, якщо ваші залежні тести використовують спільні локатори.

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">
        <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/>
        <include name="testGuru99TC2"/>
      </class>
    </classes>
  </test>
</suite>

Команда TestNG середовище виконання, розміщене на testng.org, оцінює ці оголошення перед запуском потоків, тому залежні методи завжди запускаються після завершення виконання їхніх попередніх вимог.

Поширені запитання

Сеанс — це унікальний ідентифікатор сеансу (sessionId), який генерується щоразу, коли створюється новий екземпляр WebDriver. Кожна команда з цього драйвера спрямовується до відповідного сеансу браузера, ізолюючи один тест від іншого.

Атрибут parallel у тегу suite приймає тести, класи, методи або екземпляри. TestNG породжує кілька потоків (задається кількістю потоків) та запускає вибраний модуль одночасно, скорочуючи загальний час виконання.

Використовуйте атрибут dependsOnMethods всередині тегу include файлу testng.xml або @Test(dependsOnMethods = “name”) у коді. TestNG спочатку запускає передумову та пропускає залежний тест у разі невдачі.

Інструменти штучного інтелекту кластеризують тести, прогнозують оптимальну кількість потоків на основі минулих середовищ виконання та змінюють порядок наборів, щоб повільні тести починалися першими, скорочуючи загальний час роботи конвеєра збірки.

Так. Штучний інтелект аналізує графи викликів та журнали збоїв, щоб пропонувати посилання dependsOnMethods, позначати циклічні залежності та пропонувати безпечні паралельні групи, що зменшує ручне обслуговування testng.xml.

Підсумуйте цей пост за допомогою: