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

Чтобы понять, как запускать скрипты параллельно, сначала нужно узнать, как это делается. Selenium изолирует каждый браузер посредством сессий.
Зачем нам нужна обработка сеансов?
Во время выполнения теста Selenium WebDriver должен взаимодействовать с браузером на каждом этапе для выполнения заданных команд. Пока выполняется этот тест, другой пользователь может запустить второй скрипт на том же компьютере и в том же типе браузера.
В такой ситуации нам необходим механизм, предотвращающий наложение двух выполнений. Selenium Эта проблема решается посредством обработки сессий.
Как добиться обработки сеанса в Selenium Вебдрайвер?
Если вы проверите 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 tag` выполняет свою работу.
Атрибут 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Эта функция оценивает эти объявления перед запуском потоков, поэтому зависимые методы всегда запускаются после завершения выполнения необходимых для них условий.





