TestNG: Cum să rulați mai multe suite de testare în Selenium

TestNG vă permite să rulați metode de testare, clase de testare și cazuri de testare în paralel în cadrul proiectului dvs. Efectuând execuție paralelă, putem reduce „timpul de execuție”, deoarece testele sunt pornite și executate simultan în fire diferite.

Aici vom vedea cum să rulăm mai multe clase (aka suite diferite) folosind TestNG.

Pasul 1) Crearea unui TestNGFișier .xml pentru executarea testului

Pentru a face acest lucru, urmați pașii de mai jos.

  1. Creați un nou proiect în eclipse
  2. Creați două pachete în proiecte (numiți-le ca com.suite1 și com.suite2)
  3. Creați o clasă în fiecare pachet (numiți-le ca Flipkart.java și Snapdeal.java) și copiați codul de mai jos în clasele respective
  4. Creați un fișier nou în proiect și denumiți-l ca testng.xml (asigurați-vă că ați instalat pluginul de testare pentru eclipse, instrucțiuni disponibile aici). Testng.xml conține toată configurația (nume de clasă, nume de test și nume de costume.

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>

Structura finală a proiectului arată ca mai jos,

Crearea unui TestNGFișier .xml pentru executarea testului

Pasul 2) Execuție paralelă în TestNG

După crearea fișierului xml așa cum se arată mai sus, în pasul următor, vom executa testul paralel. Mai jos este codul.

Execuție paralelă în TestNG

1) numărul de fire: Acesta este utilizat pentru execuția paralelă, pe baza scriptului numeric. Se va executa în ordine paralelă sau secvenţială.

2) verbos: Este folosit pentru a înregistra detaliile de execuție în consolă. Valoarea ar trebui să fie 1-10. Detaliile jurnalului din fereastra consolei vor deveni mai detaliate și mai clare pe măsură ce creșteți valoarea atributului verbose din fișierul de configurare testng.xml.

3) nume: Numele apartamentului. Aici este „Gmail Suite”

4) Paralel: Pentru a rula scripturi în paralel, valoarea poate fi teste/clase/metode/suite. Valoarea implicită este nici unul

Faceți clic dreapta pe testng.xml și selectați Executare ca testare, odată cu succes, veți vedea toate rezultatele

Când executați codul de mai sus, veți obține următoarea ieșire.

ieșire:

Execuție paralelă în TestNG

1) numele suitei dat în testng.xml

Execuție paralelă în TestNG

2) numele testului dat în testng.xml

Execuție paralelă în TestNG

3) numele clasei dat în testng.xml

Execuție paralelă în TestNG

4) nume de metode adnotate cu @Test în fișierul .java

Execuție paralelă în TestNG

De asemenea, va executa suita de testare și pentru acordul rapid.

Concluzie

Aici am văzut în exemplul de mai sus cum se utilizează Testng pentru a executa testul paralel. TestNG oferă o opțiune de a executa mai multe teste în paralel într-un singur fișier de configurare (XML).