TestNG: So führen Sie mehrere Testsuiten aus Selenium

TestNG ermöglicht Ihnen, Testmethoden, Testklassen und Testfälle parallel in Ihrem Projekt auszuführen. Durch die parallele Ausführung können wir die Ausführungszeit verkürzen, da Tests gleichzeitig in verschiedenen Threads gestartet und ausgeführt werden.

Hier erfahren Sie, wie Sie mehrere Klassen (auch verschiedene Suiten genannt) ausführen TestNG.

Schritt 1) ​​Erstellen eines TestNG.xml-Datei zum Ausführen des Tests

Befolgen Sie dazu die folgenden Schritte.

  1. Erstellen Sie ein neues Projekt in Eclipse
  2. Erstellen Sie zwei Pakete in den Projekten (benennen Sie sie als com.suite1 und com.suite2).
  3. Erstellen Sie in jedem Paket eine Klasse (benennen Sie sie als Flipkart.java und Snapdeal.java) und kopieren Sie den folgenden Code in die jeweiligen Klassen
  4. Erstellen Sie eine neue Datei in Ihrem Projekt und nennen Sie sie testng.xml (Stellen Sie sicher, dass Sie das Test-Plugin für Eclipse installiert haben, Anweisungen verfügbar HIER). Testng.xml enthält die gesamte Konfiguration (Klassennamen, Testnamen und Suitnamen).

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>

Die endgültige Projektstruktur sieht wie folgt aus:

Erstellen einer TestNG.xml-Datei zum Ausführen des Tests

Schritt 2) Parallele Ausführung in TestNG

Nachdem wir wie oben gezeigt eine XML-Datei erstellt haben, führen wir im nächsten Schritt den Paralleltest aus. Unten ist der Code.

Parallele Ausführung in TestNG

1) Threadanzahl: Dies wird für die parallele Ausführung basierend auf dem Zahlenskript verwendet. Die Ausführung erfolgt in paralleler oder sequentieller Reihenfolge.

2) ausführlich: Wird verwendet, um die Ausführungsdetails in der Konsole zu protokollieren. Der Wert sollte zwischen 1 und 10 liegen. Die Protokolldetails im Konsolenfenster werden detaillierter und klarer, wenn Sie den Wert des Attributs „verbose“ in der Konfigurationsdatei testng.xml erhöhen.

3) Name: Name der Suite. Hier ist es „Gmail Suite“

4) Parallel: Um Skripte parallel auszuführen, kann der Wert „tests/classes/methods/suites“ sein. Der Standardwert ist keine

Klicken Sie mit der rechten Maustaste auf die Datei testng.xml und wählen Sie „Als Test ausführen“. Sobald dies erfolgreich war, werden alle Ergebnisse angezeigt.

Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe.

Ausgang:

Parallele Ausführung in TestNG

1) Name der Suite in testng.xml

Parallele Ausführung in TestNG

2) Name des Tests in testng.xml

Parallele Ausführung in TestNG

3) Name der Klasse in testng.xml

Parallele Ausführung in TestNG

4) Methodennamen mit @Test-Annotationen in der .java-Datei

Parallele Ausführung in TestNG

Ebenso wird eine Testsuite für Snap Deals ausgeführt.

Fazit

Hier haben wir im obigen Beispiel gesehen, wie man es benutzt Testng um einen parallelen Test auszuführen. TestNG Bietet die Möglichkeit, mehrere Tests parallel in einer einzigen Konfigurationsdatei (XML) auszuführen.