Параллельное выполнение в Selenium

⚡ Умное резюме

Сессии, параллельное выполнение и зависимости в Selenium объединить уникальный идентификатор сессии для каждого экземпляра WebDriver с TestNG Этот набор инструментов позволяет запускать независимые или упорядоченные скрипты одновременно во многих окнах браузера и быстрее завершать цикл регрессионного анализа.

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

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

Чтобы понять, как запускать скрипты параллельно, сначала нужно узнать, как это делается. Selenium изолирует каждый браузер посредством сессий.

Зачем нам нужна обработка сеансов?

Во время выполнения теста Selenium WebDriver должен взаимодействовать с браузером на каждом этапе для выполнения заданных команд. Пока выполняется этот тест, другой пользователь может запустить второй скрипт на том же компьютере и в том же типе браузера.

Обработка сеанса

В такой ситуации нам необходим механизм, предотвращающий наложение двух выполнений. Selenium Эта проблема решается посредством обработки сессий.

Как добиться обработки сеанса в Selenium Вебдрайвер?

Если вы проверите 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 tag` выполняет свою работу.

Запускайте параллельные тесты с помощью 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 (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 name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/>
        <include name="testGuru99TC2"/>
      </class>
    </classes>
  </test>
</suite>

TestNG среда выполнения, размещенная по адресу testng.orgЭта функция оценивает эти объявления перед запуском потоков, поэтому зависимые методы всегда запускаются после завершения выполнения необходимых для них условий.

Часто задаваемые вопросы (FAQ)

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

Атрибут parallel в теге suite принимает тесты, классы, методы или экземпляры. TestNG Создает несколько потоков (количество которых задается параметром threadcount) и запускает выбранный модуль одновременно, сокращая общее время выполнения.

Используйте атрибут dependsOnMethods внутри тега include в файле testng.xml или @Test(dependsOnMethods = “name”) в коде. TestNG Сначала выполняется предварительный тест, а в случае неудачи пропускается зависимый тест.

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

Да. Искусственный интеллект анализирует графы вызовов и исторические журналы ошибок, чтобы предлагать связи dependsOnMethods, выявлять циклические зависимости и предлагать безопасные параллельные группы, сокращая ручное обслуживание файла testng.xml.

Подведем итог этой публикации следующим образом: