Параллельное выполнение в Selenium: обработка сеанса и amp; Зависимость TestNG

Содержание:

Anonim

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

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

Во время выполнения теста 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) {// Первая сессия WebDriverДрайвер WebDriver = новый FirefoxDriver ();// Перейти на сайт guru99driver.get ("http://demo.guru99.com/V4/");// Вторая сессия WebDriverДрайвер WebDriver2 = новый FirefoxDriver ();// Перейти на сайт guru99driver2.get ("http://demo.guru99.com/V4/");}}

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

Бывают ситуации, когда вы хотите запустить несколько тестов одновременно.

В таких случаях можно использовать атрибут «параллельность».

Атрибут parallel тега набора может принимать четыре значения:

тесты Все тестовые примеры внутри тега XML-файла тестирования будут выполняться параллельно.
классы Все тестовые примеры внутри класса Java будут выполняться параллельно.
методы Все методы с аннотацией @Test будут выполняться параллельно.
экземпляры Тестовые примеры в одном экземпляре будут выполняться параллельно, но два метода из двух разных экземпляров будут выполняться в разных потоках.

Атрибут thread-count позволяет указать, сколько потоков следует выделить для этого выполнения.

Полный пример: в этом примере три тестовых примера будут выполняться параллельно и заполнять данные для входа на http://demo.guru99.com.

Полный проект будет выглядеть так:

TestGuru99MultipleSession.java

import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;открытый класс TestGuru99MultipleSession {@Тестpublic void executSessionOne () {// Первая сессия WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();// Перейти на сайт guru99driver.get ("http://demo.guru99.com/V4/");// находим текстовое поле имени пользователя и заполняем егоdriver.findElement (By.name ("uid")). sendKeys ("Драйвер 1");}@Тестpublic void executeSessionTwo () {// Вторая сессия WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();// Перейти на сайт guru99driver.get ("http://demo.guru99.com/V4/");// находим текстовое поле имени пользователя и заполняем егоdriver.findElement (By.name ("uid")). sendKeys ("Драйвер 2");}@Тестpublic void executSessionThree () {// Третья сессия WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();// Перейти на сайт guru99driver.get ("http://demo.guru99.com/V4/");// находим текстовое поле имени пользователя и заполняем егоdriver.findElement (By.name ("uid")). sendKeys ("Драйвер 3");}}

TestNG.XML

<классы>

Порядок и зависимости тестовых примеров

Вы можете установить порядок и зависимость выполнения Test Case.

Предположим, у вас есть два тестовых примера, testGuru99TC1 и testGuru99TC2, и вы хотите выполнить тестовый пример testGuru99TC2 перед testGuru99TC1. В этом случае мы будем использовать атрибут «dependsOnMethods» для определения зависимости и порядка выполнения.

<классы>

Резюме

  • Новый идентификатор сеанса создается для нового экземпляра WebDriver.
  • Один сеанс будет привязан к одному конкретному браузеру.
  • Используя поток атрибутов и параллельность, вы запускаете свои скрипты параллельно.
  • Вы можете использовать зависимость атрибутов, чтобы установить порядок выполнения теста.