TestNG: Kuinka suorittaa useita testisviittejä Selenium

TestNG mahdollistaa testimenetelmien, testiluokkien ja testitapausten suorittamisen rinnakkain projektissasi. Suorittamalla rinnakkaissuorituksen voimme lyhentää "suoritusaikaa", kun testit aloitetaan ja suoritetaan samanaikaisesti eri säikeissä.

Täällä näemme kuinka ajaa useita luokkia (alias eri sviittejä) käyttämällä TestNG.

Vaihe 1) Luominen a TestNG.xml-tiedosto testin suorittamista varten

Voit tehdä sen noudattamalla alla olevia ohjeita.

  1. Luo uusi projekti eclipsessa
  2. Luo projekteihin kaksi pakettia (nimeä ne com.suite1 ja com.suite2)
  3. Luo jokaiseen pakettiin luokka (nimeä ne Flipkart.java ja Snapdeal.java) ja kopioi alla oleva koodi vastaaviin luokkiin
  4. Luo uusi tiedosto projektiisi ja anna sille nimi testng.xml (Varmista, että olet asentanut eclipsen testauslaajennuksen, ohjeet saatavilla tätä). Testng.xml sisältää kaikki asetukset (luokkanimet, testinimet ja pukunimet.

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>

Lopullinen projektin rakenne näyttää alla olevalta,

Luominen TestNG.xml-tiedosto testin suorittamista varten

Vaihe 2) Rinnakkaissuoritus sisään TestNG

Kun olet luonut xml-tiedoston yllä kuvatulla tavalla, seuraavassa vaiheessa suoritamme rinnakkaistestin. Alla on koodi.

Rinnakkaissuoritus sisään TestNG

1) lankojen määrä: Tätä käytetään rinnakkaiseen suoritukseen numerokomentosarjan perusteella. Se suoritetaan rinnakkaisessa tai peräkkäisessä järjestyksessä.

2) monisanainen: Sitä käytetään suoritustietojen kirjaamiseen konsoliin. Arvon tulee olla 1-10. Konsoli-ikkunan lokitiedot muuttuvat yksityiskohtaisemmiksi ja selkeämmiksi, kun lisäät testng.xml-määritystiedoston monisanaisen attribuutin arvoa.

3) nimi: Sviitin nimi. Tässä se on "Gmail Suite"

4) Rinnakkais: Jos haluat ajaa komentosarjoja rinnakkain, arvo voi olla testit/luokat/metodit/sarjat. Oletusarvo on ei mitään

Napsauta hiiren kakkospainikkeella testng.xml-tiedostoa ja valitse Suorita testauksena. Kun testi onnistuu, näet kaikki tulokset

Kun suoritat yllä olevan koodin, saat seuraavan tulosteen.

lähtö:

Rinnakkaissuoritus sisään TestNG

1) testng.xml:ssä annettu sarjan nimi

Rinnakkaissuoritus sisään TestNG

2) testin nimi testng.xml:ssä

Rinnakkaissuoritus sisään TestNG

3) testng.xml:ssä annettu luokan nimi

Rinnakkaissuoritus sisään TestNG

4) menetelmän nimet, joihin on merkitty @Test .java-tiedostossa

Rinnakkaissuoritus sisään TestNG

Samoin se suorittaa testipaketin myös pikasopimukselle.

Yhteenveto

Tässä olemme nähneet yllä olevassa esimerkissä, kuinka käyttää Testng suorittaa rinnakkaistestin. TestNG antaa mahdollisuuden suorittaa useita testejä rinnakkain yhdessä konfiguraatiotiedostossa (XML).