Учебники

27) Выполнить несколько тестов

TestNG позволяет вам параллельно запускать методы тестирования, классы тестирования и тестовые случаи внутри вашего проекта. Выполняя параллельное выполнение, мы можем сократить «время выполнения», поскольку тесты запускаются и выполняются одновременно в разных потоках.

Здесь мы увидим, как запускать несколько классов (также разные наборы), используя TestNG.

Шаг 1) Создание файла TestNG.xml для выполнения теста

Для этого выполните следующие шаги.

  1. Создать новый проект в Eclipse
  2. Создайте два пакета в проектах (назовите их как com.suite1 и com.suite2)
  3. Создайте класс в каждом пакете (назовите их как Flipkart.java и Snapdeal.java) и скопируйте приведенный ниже код в соответствующие классы.
  4. Создайте новый файл в своем проекте и назовите его testng.xml (убедитесь, что вы установили тестовый плагин для eclipse, инструкции доступны здесь ). Testng.xml содержит всю конфигурацию (имена классов, имена тестов и имена мастей).

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>

Окончательная структура проекта выглядит следующим образом:

TestNG: выполнить несколько наборов тестов

Шаг 2) Параллельное выполнение в TestNG

После создания XML-файла, как показано выше, на следующем шаге мы выполним параллельный тест. Ниже приведен код.

TestNG: выполнить несколько наборов тестов

1) количество потоков : используется для параллельного выполнения на основе числового сценария. Он будет выполняться в параллельном или последовательном порядке.

2) verbose : используется для записи подробностей выполнения в консоли. Значение должно быть 1-10. Детали журнала в окне консоли станут более подробными и понятными по мере увеличения значения подробного атрибута в файле конфигурации testng.xml.

3) имя : название сюиты. Вот это «Gmail Suite»

4) Параллельно : для параллельного запуска скриптов значением могут быть тесты / классы / методы / наборы. Значением по умолчанию является none

Щелкните правой кнопкой мыши файл testng.xml и выберите запустить как тестирование, после успешного завершения вы увидите все результаты

Когда вы выполните приведенный выше код, вы получите следующий вывод.

Вывод:

TestNG: выполнить несколько наборов тестов

1) название пакета, указанное в testng.xml

TestNG: выполнить несколько наборов тестов

2) название теста, указанное в testng.xml

TestNG: выполнить несколько наборов тестов

3) имя класса, указанное в testng.xml

TestNG: выполнить несколько наборов тестов

4) имена методов с комментариями @Test в файле .java

TestNG: выполнить несколько наборов тестов

Аналогично, он также выполнит тестовый набор для моментальной сделки.

Вывод:

Здесь мы видели в приведенном выше примере, как использовать Testng для выполнения параллельного теста. TestNG дает возможность выполнить несколько тестов параллельно в одном файле конфигурации (XML).