자동화테스트/Selenium2018. 12. 27. 20:00



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

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

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

하기 위해서는 아래 단계를 따르십시오.

  1. 이클립스에서 새 프로젝트 만들기
  2. 프로젝트에 두 개의 패키지를 만듭니다 (com.suite1 및 com.suite2로 이름 지정).
  3. 각 패키지에 클래스를 만들고 (이름을 Flipkart.java 및 Snapdeal.java로 지정) 아래 코드를 각 클래스에 복사합니다.
  4. 프로젝트에 새 파일을 만들고 testing.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 : 다중 테스트 스위트 실행

TestNG의 병렬 실행

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

TestNG : 다중 테스트 스위트 실행

1) thread-count : 숫자 스크립트를 기반으로 병렬 실행에 사용됩니다. 병렬 또는 순차적 순서로 실행됩니다.

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

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

4) 병렬 : 스크립트를 병렬로 실행하기 위해 값은 테스트 / 클래스 / 메소드 / 스위트가 될 수 있습니다. 기본값은 none입니다.

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

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

출력:

TestNG : 다중 테스트 스위트 실행

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

TestNG : 다중 테스트 스위트 실행

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

TestNG : 다중 테스트 스위트 실행

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

TestNG : 다중 테스트 스위트 실행

.java 파일에서 @Test로 주석 처리 된 4 가지 메소드 이름

TestNG : 다중 테스트 스위트 실행

마찬가지로 스냅 거래를위한 테스트 스위트도 실행합니다.

결론:

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

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Posted by 프리스케이터