Параллельное выполнение в Selenium
Чтобы понять, как запускать сценарии параллельно, давайте сначала разберемся
Зачем нам нужна обработка сеансов?
Во время выполнения теста Selenium WebDriver должен постоянно взаимодействовать с браузером для выполнения заданных команд. Во время выполнения также возможно, что до завершения текущего выполнения кто-то другой начнет выполнение другого сценария на том же компьютере и в браузере того же типа.
В такой ситуации нам нужен механизм, с помощью которого два наших разных выполнения не должны перекрываться друг с другом. Этого можно добиться с помощью обработки сеанса в Selenium.
Как добиться обработки сеанса в Selenium Вебдрайвер?
Если вы проверите исходный код Selenium WebDriver вы найдете переменную с именем «sessionId». Всякий раз, когда мы создаем новый экземпляр объекта WebDriver, будет создан новый идентификатор сеанса, прикрепленный к этому конкретному объекту. 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 ){
//First session of WebDriver
WebDriver driver = new FirefoxDriver();
//Goto guru99 site
driver.get("https://demo.guru99.com/V4/");
//Second session of WebDriver
WebDriver driver2 = new FirefoxDriver();
//Goto guru99 site
driver2.get("https://demo.guru99.com/V4/");
}
}
Как запускать параллельные тесты с помощью Selenium
Бывают ситуации, когда вам нужно запустить несколько тестов одновременно.
В таких случаях можно использовать атрибут «параллельность».
Атрибут параллельного тега suite может принимать четыре значения:
| тестов | Все тестовые случаи внутри тег Тестирование xml будет работать параллельно. |
| классов | Все тестовые случаи внутри Java класс будет работать параллельно |
| методы | Все методы с аннотацией @Test будут выполняться параллельно. |
| случаев | Тестовые случаи в одном экземпляре будут выполняться параллельно, но два метода двух разных экземпляров будут выполняться в разных потоках. |
Атрибут thread-count позволяет указать, сколько потоков должно быть выделено для этого выполнения.
Полный пример. В этом примере три тестовых случая будут выполняться параллельно и заполнять данные для входа в систему. https://demo.guru99.com/
Полный проект будет выглядеть так:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class TestGuru99MultipleSession {
@Test
public void executSessionOne(){
//First session of WebDriver
System.setProperty("webdriver.chrome.driver","chromedriver.exe");
WebDriver driver = new ChromeDriver();
//Goto guru99 site
driver.get("https://demo.guru99.com/V4/");
//find 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();
//Goto guru99 site
driver.get("https://demo.guru99.com/V4/");
//find user name text box and fill it
driver.findElement(By.name("uid")).sendKeys("Driver 2");
}
@Test
public void executSessionThree(){
//Third session of WebDriver
System.setProperty("webdriver.chrome.driver","chromedriver.exe");
WebDriver driver = new ChromeDriver();
//Goto guru99 site
driver.get("https://demo.guru99.com/V4/");
//find user name text box and fill it
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"> </class> </classes> </test> </suite>
Порядок тестовых примеров и зависимости
Вы можете установить порядок и зависимость Тестовый кейс выполнение.
Предположим, у вас есть два тестовых примера: «testGuru99TC1» и «testGuru99TC2», и вы хотите выполнить тестовый пример «testGuru99TC2» перед «testGuru99TC1». В этом случае мы будем использовать атрибут 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 value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
Резюме
- Для нового экземпляра WebDriver создается новый идентификатор сеанса.
- Один сеанс будет привязан к одному конкретному браузеру.
- Используя поток атрибутов и параллельность, вы запускаете свои сценарии параллельно.
- Вы можете использовать зависимость атрибутов, чтобы установить порядок проверки выполнения.





