Execução Paralela em Selenium

Para entender como executar scripts em paralelo, vamos primeiro entender

Por que precisamos do tratamento de sessão?

Durante a execução do teste, o Selenium O WebDriver precisa interagir com o navegador o tempo todo para executar determinados comandos. No momento da execução, também é possível que, antes de a execução atual ser concluída, outra pessoa inicie a execução de outro script, na mesma máquina e no mesmo tipo de navegador.

Tratamento de Sessão

Em tal situação, precisamos de um mecanismo pelo qual as nossas duas execuções diferentes não se sobreponham. Isso pode ser conseguido usando o tratamento de sessão em Selenium.

Como conseguir o tratamento de sessão em Selenium WebDriver?

Se você verificar o código-fonte do Selenium WebDriver, você encontrará uma variável chamada 'sessionId'. Sempre que criarmos uma nova instância de um objeto WebDriver, um novo 'sessionId' será gerado e anexado a esse objeto específico. Firefox/Chrome/Driver IE ().

Obtenha tratamento de sessão em Selenium webdriver

Então, qualquer coisa que fizermos depois disso será executada apenas naquele determinado Firefox sessão do navegador.

Obtenha tratamento de sessão em Selenium webdriver

Como esta é uma funcionalidade integrada, não há necessidade explícita de atribuir o ID da sessão

Exemplo de código: Aqui serão geradas duas sessões diferentes para dois WebDriver diferentes.

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/");
}
}

Como executar testes paralelos com Selenium

Existem situações em que você deseja executar vários testes ao mesmo tempo.

Nesses casos, pode-se usar o atributo “paralelo”

Execute testes paralelos com Selenium

O atributo paralelo da tag suite pode aceitar quatro valores:

testes Todos os casos de teste dentro etiqueta de Ensaios xml será executado em paralelo.
aulas Todos os casos de teste dentro de um Java a classe será executada paralelamente
métodos Todos os métodos com anotação @Test serão executados em paralelo.
instâncias Os casos de teste na mesma instância serão executados em paralelo, mas dois métodos de duas instâncias diferentes serão executados em threads diferentes.

O atributo thread-count permite especificar quantos threads devem ser alocados para esta execução.

Exemplo completo: neste exemplo, três casos de teste serão executados em paralelo e preencherão os dados de login https://demo.guru99.com/

O projeto completo ficará assim:

Execute testes paralelos 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>

Ordem e dependência dos casos de teste

Você pode definir a ordem e a dependência de Caso de teste execução.

Suponha que você tenha dois casos de teste, 'testGuru99TC1' e 'testGuru99TC2' e deseja executar o caso de teste 'testGuru99TC2' antes de 'testGuru99TC1'. Nesse caso usaremos o atributo 'dependsOnMethods' para fazer dependência e ordem de execução.

<?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>

Resumo

  • Um novo sessionID é criado para uma nova instância do WebDriver.
  • Uma sessão será vinculada a um navegador específico.
  • Usando o atributo thread e paralelo, você executa seus scripts em paralelo.
  • Você pode usar a dependência de atributos para definir a ordem de execução do teste