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 la ejecución paralela, podemos reducir el "tiempo de ejecución" a medida que las pruebas se inician y ejecutan simultáneamente.neoUsly en diferentes hilos.

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. Crea 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 asígnele el nombre testng.xml (Asegúrese de haber instalado el complemento de prueba para eclipse, instrucciones disponibles esta página). Testng.xml contiene toda la configuración (nombres de clase, nombres de prueba y nombres de trajes).

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

TestNg.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 la ejecución details en la consola. El valor debe ser 1-10. El registro details en la ventana de la consola se volverá más detallado y claro a medida que aumente el valor del atributo detallado en el testngArchivo de configuración .xml.

3) nombre: Nombre de la suite. Aquí está "Gmail Suite"

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

Haz clic derecho en la testng.xml y seleccione ejecutar como prueba, una vez exitoso verá todos los resultados

Cuando ejecute el código anterior, obtendrá lo siguientewing salida.

Salida:

Ejecución paralela en TestNG

1) nombre de la suite indicado en testng.xml

Ejecución paralela en TestNG

2) nombre de la prueba dada 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

Me gustawise, también ejecutará el conjunto de pruebas para el acuerdo rápido.

Conclusión

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