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.
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 ().
Então, qualquer coisa que fizermos depois disso será executada apenas naquele determinado Firefox sessão do navegador.
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”
O atributo paralelo da tag suite pode aceitar quatro valores:
| testes | Todos os casos de teste dentro etiqueta de Testes 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:
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





