TestNG: Como executar vários conjuntos de testes em Selenium
TestNG permite que você execute métodos de teste, classes de teste e casos de teste em paralelo dentro do seu projeto. Ao executar a execução paralela, podemos reduzir o 'tempo de execução', pois os testes são iniciados e executados simultaneamente em diferentes threads.
Aqui veremos como executar múltiplas classes (também conhecidas como suítes diferentes) usando TestNG.
Etapa 1) Criando um TestNGArquivo .xml para execução de teste
Para fazer isso, siga as etapas abaixo.
- Crie um novo projeto no Eclipse
- Crie dois pacotes nos projetos (nomeie-os como com.suite1 e com.suite2)
- Crie uma classe em cada pacote (nomeie-os como Flipkart.java e Snapdeal.java) e copie o código abaixo nas respectivas classes
- Crie um novo arquivo em seu projeto e nomeie-o como testng.xml (certifique-se de ter instalado o plugin de teste para Eclipse, instruções disponíveis aqui). Testng.xml contém todas as configurações (nomes de classes, nomes de testes e nomes de ternos.
Flipkart.java
package com.suite1; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Flipkart{ WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; // This method is to navigate flipkart URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.flipkart.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.partialLinkText("Login")).click(); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-email")) .sendKeys(username); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-pwd")) .sendKeys(password); driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3"); driver.findElement( By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold")) .click(); // select the first item in the search results String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement( By.cssSelector(".btn-express-checkout.btn-big.current")) .click(); driver.findElement(By.cssSelector(".remove.fk-inline-block")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { Actions s = new Actions(driver); WebElement user = driver.findElement(By.partialLinkText(username)); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
SnapDeal.java
package com.suite2; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class SnapDeal { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; String pinCode = ""; // This method is to navigate snapdeal URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.snapdeal.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.xpath("//button[text()='Login']")).click(); driver.switchTo().frame("loginIframe"); driver.findElement(By.cssSelector("div[onClick='getLoginForm()']")) .click(); driver.findElement(By.id("j_username")).sendKeys(username); driver.findElement(By.id("j_password_login")).sendKeys(password); driver.findElement(By.id("signin_submit")).click(); driver.switchTo().defaultContent(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword")) .sendKeys("iphone 6s"); driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click(); // select the first item in the search results String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click(); driver.findElement(By.id("pincode-check")).sendKeys(pinCode); driver.findElement(By.id("buy-button-id")).click(); driver.findElement(By.cssSelector("i[title='Delete Item']")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { driver.findElement(By.linkText("START SHOPPING NOW")).click(); Actions s = new Actions(driver); WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user")); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
TesteNg.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="1" verbose="1" name="Gmail Suite" annotations="JDK" parallel="tests"> <test name="flipkart"> <classes> <class name="com.suite1.Flipkart"/> </classes> </test> <test name="Myntra"> <classes> <class name="com.suite2.SnapDeal"/> </classes> </test> </suite>
A estrutura final do projeto é semelhante a abaixo,
Etapa 2) Execução paralela em TestNG
Após criar o arquivo xml conforme mostrado acima, na próxima etapa executaremos o teste paralelo. Abaixo está o código.
1) contagem de fios: Isso é usado para execução paralela, com base no script numérico. Ele será executado em ordem paralela ou sequencial.
2) detalhado: é usado para registrar os detalhes da execução no console. O valor deve ser 1-10. Os detalhes do log na janela do console ficarão mais detalhados e claros à medida que você aumenta o valor do atributo detalhado no arquivo de configuração testng.xml.
3) nome: Nome da suíte. Aqui está o “Gmail Suite”
4) Paralelo: Para executar scripts paralelos, o valor pode ser testes/classes/métodos/suites. O valor padrão é Nenhum
Clique com o botão direito em testng.xml e selecione executar como teste. Assim que for bem-sucedido, você verá todos os resultados
Ao executar o código acima, você obterá a seguinte saída.
Saída:
1) nome do conjunto fornecido em testng.xml
2) nome do teste fornecido em testng.xml
3) nome da classe fornecida em testng.xml
4) nomes de métodos anotados com @Test no arquivo .java
Da mesma forma, ele também executará um conjunto de testes para negócios instantâneos.
Conclusão
Aqui vimos no exemplo acima, como usar Teste para executar teste paralelo. TestNG oferece a opção de executar vários testes em paralelo em um único arquivo de configuração (XML).