Exécutez plusieurs cas de test avec TestNG Suite à Selenium

TestNG vous permet d'exécuter des méthodes de test, des classes de test et des cas de test en parallèle dans votre projet. En effectuant une exécution parallèle, nous pouvons réduire le « temps d'exécution » car les tests sont démarrés et exécutés simultanément dans différents threads.

Ici, nous verrons comment exécuter plusieurs classes (c'est-à-dire différentes suites) en utilisant TestNG.

Étape 1) Création d'un TestNGFichier .xml pour exécuter le test

Pour ce faire, suivez les étapes ci-dessous.

  1. Créer un nouveau projet dans Eclipse
  2. Créez deux packages dans les projets (nommez-les com.suite1 et com.suite2)
  3. Créez une classe dans chaque package (nommez-les Flipkart.java et Snapdeal.java) et copiez le code ci-dessous dans les classes respectives
  4. Créez un nouveau fichier dans votre projet et nommez-le testng.xml (assurez-vous d'avoir installé le plugin de test pour Eclipse, instructions disponibles en cliquant ici). Testng.xml contient toute la configuration (noms de classe, noms de tests et noms de combinaisons.

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 structure finale du projet ressemble à ci-dessous,

Création d'un TestNGFichier .xml pour l'exécution du test

Étape 2) Exécution parallèle dans TestNG

Après avoir créé le fichier XML comme indiqué ci-dessus, à l'étape suivante, nous exécuterons le test parallèle. Ci-dessous le code.

Exécution parallèle dans TestNG

1) nombre de fils: Ceci est utilisé pour l'exécution parallèle, basée sur le script numérique. Il s'exécutera dans un ordre parallèle ou séquentiel.

2) verbeux: Il est utilisé pour enregistrer les détails d'exécution dans la console. La valeur doit être comprise entre 1 et 10. Les détails du journal dans la fenêtre de la console deviendront plus détaillés et plus clairs à mesure que vous augmenterez la valeur de l'attribut détaillé dans le fichier de configuration testng.xml.

3) nom: Nom de la suite. Ici c'est "Gmail Suite"

4) Parallèle: Pour exécuter des scripts en parallèle, la valeur peut être tests/classes/méthodes/suites. La valeur par défaut est aucun

Faites un clic droit sur testng.xml et sélectionnez exécuter en tant que test, une fois réussi, vous verrez tous les résultats

Lorsque vous exécutez le code ci-dessus, vous obtiendrez le résultat suivant.

Sortie :

Exécution parallèle dans TestNG

1) nom de la suite donné dans testng.xml

Exécution parallèle dans TestNG

2) nom du test donné dans testng.xml

Exécution parallèle dans TestNG

3) nom de la classe donné dans testng.xml

Exécution parallèle dans TestNG

4) noms de méthodes annotés avec @Test dans le fichier .java

Exécution parallèle dans TestNG

De même, il exécutera également la suite de tests pour les accords instantanés.

Conclusion

Ici, nous avons vu dans l'exemple ci-dessus, comment utiliser Tester pour exécuter un test parallèle. TestNG donne la possibilité d'exécuter plusieurs tests en parallèle dans un seul fichier de configuration (XML).