Учебники

26) Сессии, параллель и зависимость

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

Зачем нам нужна обработка сессий?

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

Параллельное выполнение и обработка сессий в Selenium

В такой ситуации нам нужен механизм, с помощью которого наши два разных исполнения не должны пересекаться друг с другом. Это может быть достигнуто с помощью Session Handling в 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("http://demo.guru99.com/V4/");
    
    //Second session of WebDriver
    WebDriver driver2 = new FirefoxDriver();
    //Goto guru99 site
    driver2.get("http://demo.guru99.com/V4/");
}
}

Как запустить параллельные тесты с Selenium

Есть ситуации, когда вы хотите запустить несколько тестов одновременно.

В таких случаях можно использовать «параллельный» атрибут

Параллельное выполнение и обработка сессий в Selenium

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

тесты Все тестовые случаи внутри тега <test> файла Testing xml будут выполняться параллельно.
классы Все тестовые случаи внутри класса Java будут выполняться параллельно
методы Все методы с аннотацией @Test будут выполняться параллельно.
экземпляры Тестовые случаи в одном и том же экземпляре будут выполняться параллельно, но два метода двух разных экземпляров будут выполняться в разных потоках.

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

      

Полный пример: в этом примере три контрольных примера будут выполняться параллельно и заполнять данные для входа на сайте  http://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("http://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("http://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("http://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>

Порядок тестов и зависимость

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

Предположим, у вас есть два тестовых примера, testGuru99TC1 и testGuru99TC2, и вы хотите выполнить тестовый testGuru99TC2 перед testGuru99TC1. В этом случае мы будем использовать атрибут depenonMethods для создания зависимости и порядка выполнения.

<?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, вы запускаете свои сценарии параллельно.
  • Вы можете использовать атрибутную зависимость, чтобы установить порядок тестирования выполнения