Паралелно изпълнение в Selenium

За да разберете как да изпълнявате скриптове паралелно, нека първо разберем

Защо се нуждаем от обработка на сесии?

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

Обработка на сесии

В такава ситуация се нуждаем от механизъм, чрез който нашите две различни изпълнения не трябва да се припокриват едно с друго. Това може да се постигне с помощта на Session Handling in 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

Паралелният атрибут на етикета на пакета може да приема четири стойности:

тестове Всички тестови случаи вътре етикет на Тестване 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>

Oбобщение

  • Създава се нов идентификатор на сесия за нов екземпляр на WebDriver.
  • Една сесия ще се свърже с един конкретен браузър.
  • Използвайки атрибут thread и parallel, изпълнявате скриптовете си паралелно.
  • Можете да използвате зависимостта на атрибута, за да зададете реда за тестване на изпълнението