Паралельне виконання в селені: обробка сеансу & Залежність випробуваного НГ

Зміст:

Anonim

Щоб зрозуміти, як паралельно запускати сценарії, давайте спочатку розберемося

Навіщо нам потрібна обробка сеансів?

Під час виконання тесту 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/");}}

Як запускати паралельні тести з селеном

Бувають ситуації, коли потрібно виконати кілька тестів одночасно.

У таких випадках можна використовувати паралельний атрибут

Паралельний атрибут тегу набору може приймати чотири значення:

тести Усі тестові випадки всередині тегу файлу тестування xml будуть працювати паралельно.
класи Усі тестові випадки всередині класу 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

<класи>

Порядок та залежність тестових кейсів

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

Припустимо, у вас є два тестові кейси, 'testGuru99TC1' і 'testGuru99TC2', і ви хочете виконати тестовий кейс 'testGuru99TC2' перед 'testGuru99TC1'. У цьому випадку ми будемо використовувати атрибут 'dependOnMethods' для створення залежності та порядку виконання.

<класи><включити значення = "testGuru99TC1" dependOnMethods = "testGuru99TC2" /><включити значення = "testGuru99TC2" />

Резюме

  • Створюється новий ідентифікатор сесії для нового екземпляра WebDriver.
  • Один сеанс буде пов’язаний з одним певним браузером.
  • Використовуючи потік атрибутів і паралель, ви запускаєте свої сценарії паралельно.
  • Ви можете використовувати залежність атрибутів, щоб встановити порядок тестового виконання