TestNG: Cómo ejecutar varios conjuntos de pruebas en Selenium

TestNG le permite ejecutar métodos de prueba, clases de prueba y casos de prueba en paralelo dentro de su proyecto. Al realizar una ejecución en paralelo, podemos reducir el "tiempo de ejecución", ya que las pruebas se inician y ejecutan simultáneamente en diferentes subprocesos.

Aquí veremos cómo ejecutar múltiples clases (también conocidas como diferentes suites) usando TestNG.

Paso 1) Crear un TestNGArchivo .xml para ejecutar la prueba.

Para hacerlo, siga los pasos a continuación.

  1. Crear un nuevo proyecto en eclipse
  2. Cree dos paquetes en los proyectos (nómbrelos com.suite1 y com.suite2)
  3. Cree una clase en cada paquete (nómbrelos Flipkart.java y Snapdeal.java) y copie el siguiente código en las clases respectivas
  4. Cree un nuevo archivo en su proyecto y nómbrelo testng.xml (asegúrese de haber instalado el complemento de prueba para eclipse, las instrucciones están disponibles) aquí). Testng.xml contiene toda la configuración (nombres de clase, nombres de prueba y nombres de suite).

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();
	}
}

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

La estructura final del proyecto se ve a continuación,

Creación de una TestNGArchivo .xml para ejecutar la prueba

Paso 2) Ejecución paralela en TestNG

Después de crear el archivo xml como se muestra arriba, en el siguiente paso ejecutaremos la prueba paralela. A continuación se muestra el código.

Ejecución paralela en TestNG

1) número de hilos: Esto se utiliza para la ejecución paralela, según el script numérico. Se ejecutará en orden paralelo o secuencial.

2) detallado: Se utiliza para registrar los detalles de ejecución en la consola. El valor debe ser de 1 a 10. Los detalles de registro en la ventana de la consola serán más detallados y claros a medida que aumente el valor del atributo verbose en el archivo de configuración testng.xml.

3) nombre: Nombre de la suite. En este caso es “Gmail Suite”.

4) Paralelo: Para ejecutar scripts en paralelo, el valor puede ser pruebas/clases/métodos/suites. El valor predeterminado es ninguna

Haga clic derecho en testng.xml y seleccione ejecutar como prueba, una vez que tenga éxito, verá todos los resultados.

Cuando ejecute el código anterior, obtendrá el siguiente resultado.

Salida:

Ejecución paralela en TestNG

1) nombre de la suite proporcionada en testng.xml

Ejecución paralela en TestNG

2) nombre de la prueba dado en testng.xml

Ejecución paralela en TestNG

3) nombre de la clase dada en testng.xml

Ejecución paralela en TestNG

4) nombres de métodos anotados con @Test en el archivo .java

Ejecución paralela en TestNG

Asimismo, también ejecutará un conjunto de pruebas para Snap Deal.

Conclusión

Aquí hemos visto en el ejemplo anterior, cómo usar Prueba para ejecutar la prueba paralela. TestNG ofrece la opción de ejecutar varias pruebas en paralelo en un único archivo de configuración (XML).