TestNG: 여러 테스트 스위트를 실행하는 방법 Selenium

TestNG 프로젝트 내에서 테스트 메서드, 테스트 클래스 및 테스트 케이스를 병렬로 실행할 수 있습니다. 병렬 실행을 수행하면 테스트가 다른 스레드에서 동시에 시작되고 실행되므로 '실행 시간'을 줄일 수 있습니다.

여기에서는 다음을 사용하여 여러 클래스(일명 다른 제품군)를 실행하는 방법을 살펴보겠습니다. TestNG.

1단계) 만들기 TestNG테스트 실행을 위한 .xml 파일

그렇게 하려면 아래 단계를 따르십시오.

  1. Eclipse에서 새 프로젝트 만들기
  2. 프로젝트에 두 개의 패키지를 만듭니다(이름을 com.suite1 및 com.suite2로 지정).
  3. 각 패키지에 클래스를 생성하고(이름을 Flipkart.java 및 Snapdeal.java로 지정) 각 클래스에 아래 코드를 복사합니다.
  4. 프로젝트에 새 파일을 만들고 이름을 testng.xml로 지정합니다. (Eclipse용 테스트 플러그인을 설치했는지 확인하세요. 지침은 여기에서 확인 가능) LINK). 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();
	}
}

테스트Ng.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테스트 실행을 위한 .xml 파일

2단계) 병렬 실행 TestNG

위와 같이 xml 파일을 생성한 후 다음 단계에서는 병렬 테스트를 실행해보겠습니다. 아래는 코드입니다.

병렬 실행 TestNG

1) 스레드 수: 숫자 스크립트를 기반으로 병렬 실행을 할 때 사용됩니다. 병렬 또는 순차적 순서로 실행됩니다.

2) 장황한: 콘솔에 실행 세부 정보를 기록하는 데 사용됩니다. 값은 1-10이어야 합니다. testng.xml 구성 파일에서 verbose 속성 값을 늘리면 콘솔 창의 로그 세부 정보가 더 자세하고 명확해집니다.

3) 이름: 스위트의 이름입니다. 여기서는 "Gmail Suite"입니다.

4) 병렬: 스크립트를 병렬로 실행하려면 값이 테스트/클래스/메서드/스위트일 수 있습니다. 기본값은 없음

testng.xml을 마우스 오른쪽 버튼으로 클릭하고 테스트로 실행을 선택하면 성공하면 모든 결과가 표시됩니다.

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

출력:

병렬 실행 TestNG

1) testng.xml에 주어진 suite의 이름

병렬 실행 TestNG

2) testng.xml에 주어진 테스트의 이름

병렬 실행 TestNG

3) testng.xml에 주어진 클래스의 이름

병렬 실행 TestNG

4) .java 파일에 @Test 주석이 달린 메소드 이름

병렬 실행 TestNG

마찬가지로, 스냅 딜에 대한 테스트 모음도 실행할 것입니다.

결론

위의 예에서 사용 방법을 살펴보았습니다. 테스트 중 병렬 테스트를 실행합니다. TestNG 단일 구성 파일(XML)에서 여러 테스트를 병렬로 실행할 수 있는 옵션을 제공합니다.