Паралелно изпълнение в Selenium
⚡ Умно обобщение
Сесии, паралелно изпълнение и зависимост в Selenium комбинирайте уникален sessionId за всеки екземпляр на WebDriver с TestNG контроли от пакета, позволяващи на много прозорци на браузъра да изпълняват независими или подредени скриптове едновременно и да завършат цикъла на регресия по-бързо.

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





