Паралельне виконання в Selenium: Керування сеансами та TestNG Залежність

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

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

Під час виконання тесту Selenium WebDriver повинен весь час взаємодіяти з браузером, щоб виконувати задані команди. Під час виконання також можливо, що до завершення поточного виконання хтось інший починає виконання іншого сценарію на тій же машині та в тому ж типі браузера.

Обробка сесії

У такій ситуації нам потрібен механізм, за допомогою якого наші два різні виконання не повинні накладатися одне на одного. Цього можна досягти за допомогою обробки сеансу в Selenium.

Як досягти обробки сеансу в Selenium WebDriver?

Якщо ви перевірите вихідний код Selenium WebDriver, ви знайдете змінну з назвою "sessionId". Кожного разу, коли ми створюємо новий екземпляр об’єкта WebDriver, буде створено новий «sessionId» і додано до цього конкретного Firefox/Драйвер Chrome/IE ().

Досягніть обробки сеансу Selenium веб-драйвер

Тому все, що ми робимо після цього, виконуватиметься лише в цьому конкретному випадку Firefox сеанс браузера.

Досягніть обробки сеансу Selenium веб-драйвер

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

Приклад коду: Тут буде згенеровано два різних сеанси для двох різних 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

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

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

Виконайте паралельні тести за допомогою Selenium

Атрибут parallel тегу suite може приймати чотири значення:

Тести Усі тестові випадки всередині тег Тестування xml працюватиме паралельно.
класів Усі тестові випадки всередині a Java заняття проходитимуть паралельно
методика Усі методи з анотацією @Test виконуватимуться паралельно.
випадки Тестові випадки в одному екземплярі виконуватимуться паралельно, але два методи двох різних екземплярів виконуватимуться в різних потоках.

Атрибут thread-count дозволяє вказати, скільки потоків має бути виділено для цього виконання.

Повний приклад: у цьому прикладі три тести виконуватимуться паралельно та вводитимуть дані для входу https://demo.guru99.com/

Повний проект матиме такий вигляд:

Виконайте паралельні тести за допомогою Selenium

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 створюється новий ідентифікатор сесії.
  • Один сеанс буде прив’язаний до одного конкретного браузера.
  • Використовуючи атрибут thread і parallel, ви запускаєте свої сценарії паралельно.
  • Ви можете використовувати залежність атрибутів, щоб установити порядок тестування виконання