TestNG: Hoe u meerdere testsuites kunt uitvoeren Selenium

TestNG stelt u in staat om testmethoden, testklassen en testcases parallel in uw project uit te voeren. Door parallelle uitvoering uit te voeren, kunnen we de 'uitvoeringstijd' verkorten, aangezien tests gelijktijdig in verschillende threads worden gestart en uitgevoerd.

Hier zullen we zien hoe we meerdere klassen (ook wel verschillende suites) kunnen gebruiken TestNG.

Stap 1) Een TestNG.xml-bestand voor het uitvoeren van de test

Om dat te doen, volgt u de onderstaande stappen.

  1. Een nieuw project maken in Eclipse
  2. Maak twee pakketten in de projecten (noem ze com.suite1 en com.suite2)
  3. Maak een klasse in elk pakket (noem deze als Flipkart.java en Snapdeal.java) en kopieer de onderstaande code in de respectievelijke klassen
  4. Maak een nieuw bestand in uw project en noem het testng.xml (zorg ervoor dat u de testplug-in voor Eclipse hebt geïnstalleerd, instructies zijn beschikbaar hier). Testng.xml bevat alle configuratie (klassenamen, testnamen en 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>

De uiteindelijke projectstructuur ziet er als volgt uit,

Een maken TestNG.xml-bestand voor het uitvoeren van de test

Stap 2) Parallelle uitvoering in TestNG

Nadat we een XML-bestand hebben gemaakt zoals hierboven weergegeven, zullen we in de volgende stap de parallelle test uitvoeren. Hieronder staat de code.

Parallelle uitvoering in TestNG

1) draadaantal: Dit wordt gebruikt voor parallelle uitvoering, gebaseerd op het nummerscript. Het wordt in parallelle of opeenvolgende volgorde uitgevoerd.

2) uitgebreid: Dit wordt gebruikt om de uitvoeringsdetails in de console te loggen. De waarde moet 1-10 zijn. De logdetails in het consolevenster worden gedetailleerder en duidelijker naarmate u de waarde van het verbose-attribuut in het configuratiebestand testng.xml verhoogt.

3) naam: Naam van de suite. Hier is het “Gmail Suite”

4) Parallel: Om scripts parallel uit te voeren, kan de waarde tests/classes/methods/suites zijn. Standaardwaarde is geen

Klik met de rechtermuisknop op testng.xml en selecteer uitvoeren als test. Zodra dit is gelukt, ziet u alle resultaten.

Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer.

Output:

Parallelle uitvoering in TestNG

1) naam van de suite gegeven in testng.xml

Parallelle uitvoering in TestNG

2) naam van de test gegeven in testng.xml

Parallelle uitvoering in TestNG

3) naam van de klasse gegeven in testng.xml

Parallelle uitvoering in TestNG

4) methodenamen geannoteerd met @Test in .java-bestand

Parallelle uitvoering in TestNG

Het zal ook een testsuite voor SnapDeal uitvoeren.

Conclusie

Hier hebben we in het bovenstaande voorbeeld gezien hoe te gebruiken Testen parallelle test uit te voeren. TestNG geeft de mogelijkheid om meerdere tests parallel uit te voeren in één enkel configuratiebestand (XML).

Dagelijkse Guru99 Nieuwsbrief

Begin uw dag met het laatste en belangrijkste AI-nieuws, direct bezorgd.