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.

  1. Crie um novo projeto no Eclipse
  2. Crie dois pacotes nos projetos (nomeie-os como com.suite1 e com.suite2)
  3. Crie uma classe em cada pacote (nomeie-os como Flipkart.java e Snapdeal.java) e copie o código abaixo nas respectivas classes
  4. 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,

Criando um TestNGArquivo .xml para execução de teste

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.

Execução Paralela em TestNG

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:

Execução Paralela em TestNG

1) nome do conjunto fornecido em testng.xml

Execução Paralela em TestNG

2) nome do teste fornecido em testng.xml

Execução Paralela em TestNG

3) nome da classe fornecida em testng.xml

Execução Paralela em TestNG

4) nomes de métodos anotados com @Test no arquivo .java

Execução Paralela em TestNG

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).