TestNG: Slik kjører du flere testsuiter i Selenium

TestNG lar deg kjøre testmetoder, testklasser og testcases parallelt inne i prosjektet ditt. Ved å utføre parallell kjøring kan vi redusere 'utførelsestiden' ettersom tester startes og utføres samtidig i forskjellige tråder.

Her vil vi se hvordan du kjører flere klasser (aka forskjellige suiter) ved hjelp av TestNG.

Trinn 1) Opprette en TestNG.xml-fil for utføring av test

Følg trinnene nedenfor for å gjøre det.

  1. Lag et nytt prosjekt i Eclipse
  2. Opprett to pakker i prosjektene (navn dem som com.suite1 og com.suite2)
  3. Opprett en klasse i hver pakke (navn dem som Flipkart.java og Snapdeal.java) og kopier koden nedenfor i respektive klasser
  4. Opprett en ny fil i prosjektet ditt og navngi den som testng.xml (Sørg for at du har installert testplugin for eclipse, instruksjoner tilgjengelig her.). Testng.xml inneholder all konfigurasjon (klassenavn, testnavn og suitnavn.

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>

Endelig prosjektstruktur ser ut som nedenfor,

Opprette en TestNG.xml-fil for utføring av test

Trinn 2) Parallell utførelse i TestNG

Etter å ha opprettet xml-fil som vist ovenfor, i neste trinn, vil vi utføre parallelltesten. Nedenfor er koden.

Parallell utførelse i TestNG

1) trådtelling: Dette brukes for parallell kjøring, basert på tallskriptet. Det vil utføres i parallell eller sekvensiell rekkefølge.

2) ordrik: Den brukes til å logge utførelsesdetaljene i konsollen. Verdien skal være 1-10. Loggdetaljene i konsollvinduet vil bli mer detaljerte og klarere etter hvert som du øker verdien av det detaljerte attributtet i konfigurasjonsfilen testng.xml.

3) navn: Navn på suiten. Her er det "Gmail Suite"

4) Parallell: For å kjøre skript parallelt, kan verdien være tester/klasser/metoder/suiter. Standardverdien er none

Høyreklikk på testng.xml og velg kjør som testing, når du er vellykket, vil du se alle resultatene

Når du utfører koden ovenfor, vil du få følgende utgang.

Utgang:

Parallell utførelse i TestNG

1) navnet på suiten gitt i testng.xml

Parallell utførelse i TestNG

2) navnet på testen gitt i testng.xml

Parallell utførelse i TestNG

3) navnet på klassen gitt i testng.xml

Parallell utførelse i TestNG

4) metodenavn merket med @Test i .java-fil

Parallell utførelse i TestNG

På samme måte vil den kjøre testsuite for snap-avtale også.

konklusjonen

Her har vi sett i eksempelet ovenfor, hvordan du bruker Testng å utføre parallell test. TestNG gir en mulighet til å utføre flere tester parallelt i en enkelt konfigurasjonsfil (XML).