Para entender como executar scripts em paralelo, vamos primeiro entender
Por que precisamos de manipulação de sessão?
Durante a execução do teste, o Selenium WebDriver precisa interagir com o navegador o tempo todo para executar determinados comandos. No momento da execução, também é possível que, antes que a execução atual seja 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 nossas duas execuções diferentes não se sobreponham. Isso pode ser feito usando o Manuseio de Sessão no Selenium.
Como obter o gerenciamento de sessão no Selenium WebDriver?
Se você verificar o código-fonte do Selenium WebDriver, encontrará uma variável chamada 'sessionId'. Sempre que criamos uma nova instância de um objeto WebDriver, um novo 'sessionId' será gerado e anexado a esse driver específico do Firefox / Chrome / IE ().
Portanto, tudo o que fizermos depois disso será executado apenas naquela sessão do navegador Firefox em particular.
Como esta é uma funcionalidade embutida, não há necessidade explícita de atribuir o id de sessão
Exemplo de código: aqui, duas sessões diferentes serão geradas para dois WebDriver diferentes.
import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class SessionHandling {public static void main (String… strings) {// Primeira sessão do WebDriverDriver WebDriver = novo FirefoxDriver ();// Goto guru99 sitedriver.get ("http://demo.guru99.com/V4/");// Segunda sessão do WebDriverDriver WebDriver2 = novo FirefoxDriver ();// Goto guru99 sitedriver2.get ("http://demo.guru99.com/V4/");}}
Como executar testes paralelos com selênio
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 da tag |
Aulas | Todos os casos de teste dentro de uma classe Java serão executados 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 que você especifique quantos threads devem ser alocados para esta execução.
Exemplo completo: neste exemplo, três casos de teste serão executados paralelamente e preencherão os dados de login em http://demo.guru99.com
O projeto completo será semelhante a:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;public class TestGuru99MultipleSession {@Testepublic void executSessionOne () {// Primeira sessão do WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = novo ChromeDriver ();// Goto guru99 sitedriver.get ("http://demo.guru99.com/V4/");// encontre a caixa de texto do nome do usuário e preencha-adriver.findElement (By.name ("uid")). sendKeys ("Driver 1");}@Testepublic void executeSessionTwo () {// Segunda sessão do WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = novo ChromeDriver ();// Goto guru99 sitedriver.get ("http://demo.guru99.com/V4/");// encontre a caixa de texto do nome do usuário e preencha-adriver.findElement (By.name ("uid")). sendKeys ("Driver 2");}@Testepublic void executSessionThree () {// Terceira sessão do WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = novo ChromeDriver ();// Goto guru99 sitedriver.get ("http://demo.guru99.com/V4/");// encontre a caixa de texto do nome do usuário e preencha-adriver.findElement (By.name ("uid")). sendKeys ("Driver 3");}}
TestNG.XML
xml version = "1.0" encoding = "UTF-8"?>
Ordem e dependência do caso de teste
Você pode definir a ordem e a dependência da execução do Caso de Teste.
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 a dependência e a ordem de execução.
xml version = "1.0" encoding = "UTF-8"?>
Resumo
- Um novo sessionID é criado para uma nova instância do WebDriver.
- Uma sessão será vinculada a um navegador específico.
- Usando thread de atributo e paralelo, você executa seus scripts em paralelo.
- Você pode usar a dependência de atributo para definir a ordem de execução do teste