Щоб зрозуміти, як паралельно запускати сценарії, давайте спочатку розберемося
Навіщо нам потрібна обробка сеансів?
Під час виконання тесту Selenium WebDriver повинен постійно взаємодіяти з браузером для виконання заданих команд. Під час виконання також можливо, що до завершення поточного виконання хтось інший розпочне виконання іншого сценарію на тій самій машині та в тому ж типі браузера.
У такій ситуації нам потрібен механізм, за допомогою якого наші дві різні страти не повинні перекриватися між собою. Цього можна досягти за допомогою обробки сеансів у селені.
Як досягти обробки сеансів у Selenium WebDriver?
Якщо ви перевірите вихідний код Selenium WebDriver, ви знайдете змінну з назвою 'sessionId'. Кожного разу, коли ми створюємо новий екземпляр об'єкта WebDriver, буде генеровано новий 'sessionId' та приєднаний до цього конкретного драйвера Firefox / Chrome / IE ().
Отже, все, що ми робимо після цього, буде виконуватися лише в тому конкретному сеансі браузера Firefox.
Оскільки це вбудована функціональність, немає необхідності призначати ідентифікатор сеансу
Приклад коду: Тут буде створено два різні сеанси для двох різних WebDriver.
імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;публічний клас SessionHandling {public static void main (Рядок ... рядки) {// Перший сеанс WebDriverДрайвер WebDriver = новий FirefoxDriver ();// Перейти на сайт guru99driver.get ("http://demo.guru99.com/V4/");// Другий сеанс WebDriverДрайвер WebDriver2 = новий FirefoxDriver ();// Перейти на сайт guru99driver2.get ("http://demo.guru99.com/V4/");}}
Як запускати паралельні тести з селеном
Бувають ситуації, коли потрібно виконати кілька тестів одночасно.
У таких випадках можна використовувати паралельний атрибут
Паралельний атрибут тегу набору може приймати чотири значення:
тести | Усі тестові випадки всередині тегу |
класи | Усі тестові випадки всередині класу Java працюватимуть паралельно |
методи | Усі методи з анотацією @Test виконуватимуться паралельно. |
екземпляри | Тестові випадки в одному екземплярі будуть виконуватися паралельно, але два методи двох різних екземплярів будуть працювати в різному потоці. |
Атрибут count-count дозволяє вказати, скільки потоків слід виділити для цього виконання.
Повний приклад: У цьому прикладі три тестові випадки будуть виконуватися паралельно та заповнювати дані для входу на веб-сайті http://demo.guru99.com
Повний проект буде виглядати так:
TestGuru99MultipleSession.java
імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.chrome.ChromeDriver;імпорт 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 ("Driver 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 ("Driver 3");}}
ТестNG.XML
xml version = "1.0" encoding = "UTF-8"?><класи>
Порядок та залежність тестових кейсів
Ви можете встановити порядок та залежність виконання тестового випадку.
Припустимо, у вас є два тестові кейси, 'testGuru99TC1' і 'testGuru99TC2', і ви хочете виконати тестовий кейс 'testGuru99TC2' перед 'testGuru99TC1'. У цьому випадку ми будемо використовувати атрибут 'dependOnMethods' для створення залежності та порядку виконання.
xml version = "1.0" encoding = "UTF-8"?><класи> <включити значення = "testGuru99TC1" dependOnMethods = "testGuru99TC2" /><включити значення = "testGuru99TC2" />
Резюме
- Створюється новий ідентифікатор сесії для нового екземпляра WebDriver.
- Один сеанс буде пов’язаний з одним певним браузером.
- Використовуючи потік атрибутів і паралель, ви запускаєте свої сценарії паралельно.
- Ви можете використовувати залежність атрибутів, щоб встановити порядок тестового виконання