TestNG를 사용하면 테스트 메소드, 테스트 클래스 및 테스트 케이스를 프로젝트 내에서 병렬로 실행할 수 있습니다. 병렬 실행을 수행함으로써 테스트가 시작되고 다른 스레드에서 동시에 실행될 때 '실행 시간'을 줄일 수 있습니다.
여기서는 TestNG를 사용하여 여러 클래스 (일명 다른 스위트)를 실행하는 방법을 살펴 보겠습니다.
테스트 실행을위한 TestNG.xml 파일 만들기
하기 위해서는 아래 단계를 따르십시오.
- 이클립스에서 새 프로젝트 만들기
- 프로젝트에 두 개의 패키지를 만듭니다 (com.suite1 및 com.suite2로 이름 지정).
- 각 패키지에 클래스를 만들고 (이름을 Flipkart.java 및 Snapdeal.java로 지정) 아래 코드를 각 클래스에 복사합니다.
- 프로젝트에 새 파일을 만들고 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의 병렬 실행
위와 같이 xml 파일을 생성 한 후 다음 단계에서 병렬 테스트를 수행합니다. 아래는 코드입니다.
1) thread-count : 숫자 스크립트를 기반으로 병렬 실행에 사용됩니다. 병렬 또는 순차적 순서로 실행됩니다.
2) verbose : 실행 세부 정보를 콘솔에 기록하는 데 사용됩니다. 값은 1-10이어야합니다. testng.xml 구성 파일의 verbose 속성 값을 늘리면 콘솔 창에 로그 세부 정보가 더 자세하고 명확 해집니다.
3) name : 스위트의 이름. 여기가 "Gmail Suite"입니다.
4) 병렬 : 스크립트를 병렬로 실행하기 위해 값은 테스트 / 클래스 / 메소드 / 스위트가 될 수 있습니다. 기본값은 none입니다.
testing.xml을 마우스 오른쪽 단추로 클릭하고 테스트로 실행을 선택하면 성공하면 모든 결과가 표시됩니다.
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
출력:
testng.xml에 주어진 suite의 이름.
2 testng.xml에 주어진 테스트 이름
testng.xml에 주어진 클래스의 이름.
.java 파일에서 @Test로 주석 처리 된 4 가지 메소드 이름
마찬가지로 스냅 거래를위한 테스트 스위트도 실행합니다.
결론:
여기에서는 Testng 을 사용 하여 병렬 테스트를 실행 하는 방법을 살펴 보았습니다 . TestNG는 단일 구성 파일 (XML)에서 여러 테스트를 병렬로 실행할 수있는 옵션을 제공합니다.
'자동화테스트 > Selenium' 카테고리의 다른 글
Selenium WebDriver를 사용하여 툴팁 확인 (0) | 2018.12.29 |
---|---|
TestNG 그룹 소개 (0) | 2018.12.28 |
테스트 사례의 TestNG 우선 순위 (0) | 2018.12.26 |
IntelliJ IDEA & Selenium Webdriver 사용 방법 (0) | 2018.12.25 |
Python에서 Selenium을 사용하는 방법 : 완전한 튜토리얼 (1) | 2018.12.24 |