Uruchom wiele przypadków testowych za pomocą TestNG Apartament w Selenium

TestNG umożliwia równoległe uruchamianie metod testowych, klas testowych i przypadków testowych w projekcie. Wykonując równoległe wykonywanie, możemy skrócić „czas wykonywania”, ponieważ testy są uruchamiane i wykonywane jednocześnie w różnych wątkach.

Tutaj zobaczymy, jak uruchomić wiele klas (czyli różnych pakietów) za pomocą TestNG.

Krok 1) Tworzenie TestNGPlik .xml do wykonania testu

Aby to zrobić, wykonaj poniższe kroki.

  1. Utwórz nowy projekt w Eclipse
  2. Utwórz dwa pakiety w projektach (nazwij je com.suite1 i com.suite2)
  3. Utwórz klasę w każdym pakiecie (nazwij je Flipkart.java i Snapdeal.java) i skopiuj poniższy kod do odpowiednich klas
  4. Utwórz nowy plik w swoim projekcie i nazwij go testng.xml (Upewnij się, że zainstalowałeś wtyczkę testową dla Eclipse, instrukcje są dostępne w tym miejscu). Testng.xml zawiera całą konfigurację (nazwy klas, nazwy testów i nazwy garniturów.

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>

Ostateczna struktura projektu wygląda jak poniżej,

Tworząc TestNGPlik .xml do wykonania testu

Krok 2) Wykonanie równoległe w TestNG

Po utworzeniu pliku xml jak pokazano powyżej, w następnym kroku przeprowadzimy test równoległy. Poniżej znajduje się kod.

Wykonywanie równoległe w TestNG

1) liczba wątków: Służy do wykonywania równoległego w oparciu o skrypt liczbowy. Będzie wykonywany równolegle lub sekwencyjnie.

2) szczegółowe: Służy do rejestrowania szczegółów wykonania w konsoli. Wartość powinna wynosić od 1 do 10. Szczegóły rejestrowania w oknie konsoli staną się bardziej szczegółowe i jaśniejsze, gdy zwiększysz wartość atrybutu verbose w pliku konfiguracyjnym testng.xml.

3) imię: Nazwa pakietu. Tutaj jest to „Gmail Suite”

4) Równolegle: Aby uruchamiać skrypty równolegle, wartością mogą być testy/klasy/metody/pakiety. Wartość domyślna to Żaden

Kliknij prawym przyciskiem myszy plik testng.xml i wybierz opcję Uruchom jako test. Po pomyślnym wykonaniu operacji zobaczysz wszystkie wyniki.

Po wykonaniu powyższego kodu otrzymasz następujący wynik.

Wyjście:

Wykonywanie równoległe w TestNG

1) nazwa zestawu podana w testng.xml

Wykonywanie równoległe w TestNG

2) nazwa testu podana w testng.xml

Wykonywanie równoległe w TestNG

3) nazwa klasy podana w testng.xml

Wykonywanie równoległe w TestNG

4) nazwy metod z adnotacją @Test w pliku .java

Wykonywanie równoległe w TestNG

Podobnie, wykona również zestaw testów dla transakcji Snap.

Podsumowanie

Tutaj widzieliśmy w powyższym przykładzie, jak używać Testowanie aby wykonać test równoległy. TestNG daje możliwość wykonania wielu testów równolegle w jednym pliku konfiguracyjnym (XML).

Podsumuj ten post następująco: