TestNG는 무엇입니까?
TestNG는 NG가 "차세대"를 나타내는 자동화 테스트 프레임 워크입니다. TestNG는 주석 (@)을 사용하는 JUnit 에서 영감을 얻었습니다 .
- TestNG를 사용하면 적절한 보고서를 생성 할 수 있으며 통과, 실패 및 건너 뛴 테스트 사례 수를 쉽게 알 수 있습니다.
- 실패한 테스트 케이스는 별도로 실행할 수 있습니다. 예를 들어.
- 테스트 케이스가 다섯 개인 경우 각 테스트 케이스에 대해 하나의 메소드가 작성됩니다 (testNG를 사용하지 않고 main 메소드를 사용하여 프로그램을 작성한다고 가정). 이 프로그램을 처음 실행하면 세 가지 메서드가 성공적으로 실행되고 네 번째 메서드는 실패합니다. 그런 다음 네 번째 메서드에있는 오류를 수정합니다. 이제는 네 번째 메서드 만 실행하려고합니다. 왜냐하면 처음 세 메서드가 성공적으로 실행되기 때문입니다. TestNG를 사용하지 않으면 불가능합니다.
- TestNG는 테스트 출력 폴더에 testing-failed.xml 파일과 같은 옵션을 제공합니다. 실패한 테스트 케이스 만 실행하려면이 XML 파일을 실행해야합니다. 실패한 테스트 케이스 만 실행합니다.
위의 개념 외에도 TestNG의 장점 인 TestNG에 대한 자세한 내용과 @test 주석을 사용하여 테스트 메소드를 작성하는 방법, 이러한 클래스를 테스트 스위트 파일로 변환하는 방법, Eclipse 및 명령 행에서 실행하는 방법에 대해 배우게됩니다. .
이 자습서에서는
- TestNG는 무엇입니까?
- Selenium과 함께 TestNG를 사용하는 이유는 무엇입니까?
- JUnit을 통한 TestNG의 장점
- 어노테이션을 사용한 첫 번째 테스트 사례
- 새 TestNG 테스트 파일 만들기
- TestNG에서 작성된 보고서 확인
- TestNG에 사용 된 주석
- 다중 테스트 케이스
- 매개 변수
Selenium과 함께 TestNG를 사용하는 이유는 무엇입니까?
기본 Selenium 테스트는 테스트 결과에 적합한 형식을 생성하지 않습니다. TestNG를 사용하여 테스트 결과를 생성 할 수 있습니다.
대부분의 Selenium 사용자 는 이점 때문에 Junit 이상을 사용합니다 . TestNG에는 많은 기능이 있지만 셀레늄에서 사용할 수있는 가장 중요한 기능에 초점을 맞출 것입니다. 다음은 TestNG의 주요 기능입니다.
- 테스트 케이스 실행 횟수, 전달 된 테스트 케이스 수, 실패한 테스트 케이스 수 및 건너 뛴 테스트 케이스 수를 포함하여 적절한 형식으로 보고서를 생성하십시오.
- 여러 테스트 사례는 testng.xml 파일로 변환하여 더 쉽게 그룹화 할 수 있습니다. 테스트 케이스를 먼저 실행해야하는 우선 순위를 지정할 수 있습니다.
- 동일한 테스트 케이스는 '호출 횟수'라는 키워드를 사용하여 루프없이 여러 번 실행할 수 있습니다.
- testng을 사용하면 여러 브라우저에서 여러 개의 테스트 케이스를 실행할 수 있습니다 (예 : 크로스 브라우저 테스트).
- 테스트 프레임 워크는 Maven, Jenkins 등과 같은 툴과 쉽게 통합 될 수 있습니다.
- 테스트에 사용 된 주석은 매우 이해하기 쉽습니다. 예 : @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver에는 보고서 생성을위한 기본 메커니즘이 없습니다. TestNG는 아래에 표시된 것과 같은 읽을 수있는 형식으로 보고서를 생성 할 수 있습니다.
- TestNG는 테스트 코드를 단순화합니다. 우리의 테스트에는 정적 메인 메소드가 더 이상 필요하지 않습니다. 액션 시퀀스는 정적 인 메소드를 필요로하지 않는 이해하기 쉬운 주석으로 규제됩니다.
- 잡히지 않은 예외는 테스트를 조기에 종료하지 않고 TestNG에 의해 자동으로 처리됩니다. 이러한 예외는 보고서에서 실패한 단계로보고됩니다.
JUnit을 통한 TestNG의 장점
JUnit에 비해 TestNG의 세 가지 주요 이점이 있습니다.
- 특수 효과를 이해하기 쉽습니다.
- 테스트 사례를보다 쉽게 그룹화 할 수 있습니다.
- 병렬 테스트 가능
TestNG의 주석은 그 아래 메서드를 실행하는 방법을 제어 할 수있는 코드 줄입니다 . 항상 앞에 @ 기호가 붙습니다. 아주 일찍 그리고 빠른 예가 아래와 같습니다.
Annotations는 나중에 "TestNG에서 사용되는 Annotations"섹션에서 논의 될 것이므로 위의 예제를 아직 이해하지 못했다면 완벽하게 괜찮습니다. TestNG의 주석은 JUnit보다 코딩하고 이해하기가 더 쉽다는 사실을 기억하는 것이 중요합니다.
테스트를 병렬로 실행하는 기능은 TestNG에서 사용할 수 있지만 JUnit에서는 사용할 수 없으므로 Selenium Grid를 사용하는 테스터가 더 선호하는 프레임 워크입니다.
어노테이션을 사용한 첫 번째 테스트 사례
테스트 케이스를 만들기 전에 먼저 Eclipse에서 새 TestNG 프로젝트를 설정하고 "FirstTestNGProject"라는 이름을 지정해야합니다.
새로운 TestNG Project 설정하기
1 단계 : 파일> 새로 작성> Java 프로젝트를 클릭하십시오 .(Click File > New > Java Project)
2 단계 : "FirstTestNGProject"를 프로젝트 이름으로 입력하고 다음을 클릭하십시오.
3 단계 : 이제 TestNG 라이브러리를 프로젝트로 가져 오기 시작합니다. '라이브러리'탭을 클릭 한 다음 '라이브러리 추가 ...'를 클릭하십시오.
4 단계 : 라이브러리 추가 대화 상자에서 "TestNG"를 선택하고 다음을 클릭하십시오.
5 단계 : 마침을 클릭하십시오.
TestNG가 라이브러리 목록에 포함되어 있는지 확인해야합니다.
6 단계 : 이제 Selenium API가 포함 된 JAR 파일을 추가합니다. 이 파일들은 이전 장에서 Selenium과 Eclipse를 설치할 때 http://docs.seleniumhq.org/download/ 에서 다운로드 한 Java 클라이언트 드라이버에 있습니다.
그런 다음 Selenium JAR 파일을 배치 한 위치로 이동하십시오.
외부 JAR을 추가 한 후, 화면은 다음과 같아야합니다.
7 단계 : 마침을 클릭하고 Eclipse의 Package Explorer 창에서 FirstTestNGProject가 표시되는지 확인합니다.
새 TestNG 테스트 파일 만들기
이제 프로젝트를 완료 했으므로 새 TestNG 파일을 만들자.
1 단계 : "src"패키지 폴더를 마우스 오른쪽 버튼으로 클릭 한 다음 새로 만들기> 기타 ...를 선택하십시오.
2 단계 : TestNG 폴더를 클릭하고 "TestNG 클래스"옵션을 선택하십시오. 다음을 클릭하십시오.
3 단계 : 적절한 입력 상자에 아래 표시된 값을 입력하고 마침을 클릭하십시오. Java 파일의 이름을 "FirstTestNGFile"로 지정했습니다.
Eclipse는 아래에 표시된 TestNG 파일의 템플리트를 자동으로 작성해야합니다.
첫 번째 테스트 사례 코딩
머큐리 투어의 홈페이지가 정확한지 확인하는 첫 번째 테스트 사례 를 작성해 보겠습니다 . 아래와 같이 코드를 입력하십시오.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "http://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.firefox.marionette", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.close();
}
}
다음 사항에 유의하십시오.
- TestNG는 main () 메소드를 필요로하지 않는다.
- 메서드는 정적 일 필요는 없습니다.
- @Test 주석을 사용했습니다. @Test는 그 밑에있는 메소드가 테스트 케이스라는 것을 알려주기 위해 사용됩니다 . 이 경우 verifyHomepageTitle () 메서드를 테스트 케이스로 설정 했으므로 위에 '@Test'주석을 추가했습니다.
- TestNG에서 주석을 사용하기 때문에 우리는 org.testng.annotations. * 패키지를 가져와야했습니다.
- Assert 클래스를 사용했습니다. Assert 클래스는 TestNG에서 확인 작업을 수행하는 데 사용됩니다 . 이를 사용하려면 org.testng.Assert 패키지를 가져와야합니다.
하나의 TestNG 파일에 여러 개의 테스트 케이스가있을 수 있습니다 (따라서 @Test 주석이 여러 개있을 수 있습니다). 자세한 내용은 "TestNG에 사용 된 주석"섹션에서 나중에 다루게 될 것입니다.
테스트 실행하기
테스트를 실행하려면 일반적으로하는 것처럼 Eclipse에서 파일을 실행하기 만하면됩니다. Eclipse는 Console 창과 TestNG 결과 창에서 두 개의 출력을 제공합니다.
TestNG에서 작성된 보고서 확인
Eclipse의 Console 창은 테스트 사례 결과에 대한 텍스트 기반 보고서를 제공하고 TestNG 결과 창은 그래픽 결과를 제공합니다.
HTML 보고서 생성
TestNG는 HTML 형식으로 보고서를 생성 할 수 있습니다.
1 단계 : 이전 섹션에서 작성한 FirstTestNGFile을 실행 한 후 프로젝트 탐색기 윈도우에서 프로젝트 이름 (FirstTestNGProject)을 마우스 오른쪽 단추로 클릭 한 다음 "새로 고침"옵션을 클릭하십시오.
2 단계 : "테스트 출력"폴더가 만들어졌습니다. 그것을 확장하고 index.html 파일을 찾으십시오. 이 HTML 파일은 최신 테스트 실행 결과에 대한 보고서입니다.
3 단계 : index.html 파일을 두 번 클릭하여 Eclipse의 내장 웹 브라우저에서 엽니 다. 일반적인 웹 브라우저에서와 마찬가지로 F5를 눌러 테스트를 다시 한 후에 언제든지이 페이지를 새로 고칠 수 있습니다.
TestNG에 사용 된 주석
이전 섹션에서는 @Test 주석을 소개했습니다. 이제 우리는보다 진보 된 주석과 그 사용법을 연구 할 것입니다.
다중 테스트 케이스
하나의 TestNG 파일에서 @Test 주석을 여러 개 사용할 수 있습니다. 기본적으로 @Test로 주석 처리 된 메소드는 사전 순으로 실행됩니다. 아래 코드를 참조하십시오. 메소드 c_test, a_test 및 b_test는 코드에서 사전 순으로 정렬되지 않지만 그대로 실행됩니다.
이 코드를 실행하고 생성 된 index.html 페이지에서 "Chronological view"를 클릭하십시오.
매개 변수
메소드를 다른 순서로 실행하려면 "priority"매개 변수를 사용하십시오. 매개 변수는 주석 기능을 수정하는 키워드입니다 .
- 매개 변수를 사용하려면 값을 지정해야합니다. 너는 그들 옆에 "="을 놓고 그 다음에 값을 붙인다.
- 매개 변수는 아래에 표시된 코드 스 니펫과 같이 주석 바로 다음에 배치 된 괄호 안에 들어 있습니다.
TestNG는 가장 작은 우선 순위 값을 갖는 @Test 주석을 실행합니다. 우선 순위 값이 연속 될 필요는 없습니다.
TestNG HTML 보고서는 메소드가 우선 순위의 오름차순 값에 따라 실행되었는지 확인합니다.
여러 매개 변수
"우선 순위"외에 @Test에는 "true"또는 "false"로만 설정할 수있는 "alwaysRun"이라는 또 다른 매개 변수가 있습니다. 단일 주석에서 둘 이상의 매개 변수를 사용하려면 아래 표시된 것과 같은 쉼표로 구분 하십시오.
@Test(priority = 0, alwaysRun = true)
@BeforeTest 및 @AfterTest
@BeforeTest | 이 주석 아래의 메소드 는 TestNG 파일의 첫 번째 테스트 케이스보다 먼저 실행 됩니다 . |
@AfterTest | 이 주석 아래의 메소드 는 TestNG 파일의 모든 테스트 케이스 가 실행 된 후에 실행 됩니다. |
아래의 코드를 고려하십시오.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "http://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.firefox.marionette", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser(){
driver.close();
}
}
위의 표와 코드에서 제시 한 논리를 적용하면 메소드가 실행되는 순서가 다음과 같이 예측 될 수 있습니다.
- 1 st - launchBrowser ()
- 2 nd - verifyHomepageTitle ()
- 3 rd - terminateBrowser ()
주석 블록의 배치는 실행될 시간 순서에 영향을 미치지 않고 상호 교환 될 수 있습니다 . 예를 들어 주석 블록을 재정렬하여 코드가 아래와 유사하게 보이도록하십시오.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "http://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@AfterTest //뒤죽박죽(Jumbled)
public void terminateBrowser(){
driver.close();
}
@BeforeTest //뒤죽박죽(Jumbled)
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.firefox.marionette", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test //뒤죽박죽(Jumbled)
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
위의 코드를 실행하여
@BeforeMethod 및 @AfterMethod
@BeforeMethod | 이 주석의 메소드는 각 테스트 케이스의 각 메소드보다 먼저 실행됩니다 . |
@AfterMethod | 이 주석 아래의 메소드는 각 테스트 케이스의 각 메소드 후에 실행됩니다 . |
Mercury Tours에서 아래의 두 링크의 대상 페이지 제목을 확인한다고 가정합니다.
우리 테스트의 흐름은 다음과 같습니다.
- 홈페이지로 이동하여 제목을 확인하십시오.
- 등록을 클릭하고 대상 페이지의 제목을 확인하십시오.
- 홈페이지로 돌아가서 제목이 올바른지 확인하십시오.
- SUPPORT를 클릭하고 대상 페이지의 제목을 확인하십시오.
- 홈페이지로 돌아가서 제목이 올바른지 확인하십시오.
아래의 코드는 @BeforeMethod와 @AfterMethod를 사용하여 위에서 언급 한 시나리오를 효율적으로 실행하는 방법을 보여줍니다.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
@Test
public class firsttestngfile {
public String baseUrl = "http://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.firefox.marionette", driverPath);
driver= new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register(){
driver.findElement(By.linkText("REGISTER")).click() ;
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click() ;
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage ( ) {
driver.findElement(By.linkText("Home")).click() ;
}
@AfterTest
public void terminateBrowser(){
driver.close();
}
}
이 테스트를 실행 한 후에는 TestNG가 다음 순서로보고해야합니다.
간단히 말해 @BeforeMethod는 각 테스트 케이스 전에 실행해야하는 메소드를 포함해야하며 @AfterMethod는 각 테스트 케이스 후에 실행해야하는 메소드를 포함해야합니다 .
TestNG 주석 요약
@BeforeSuite : 주석 된 메소드는이 제품군의 모든 테스트가 실행되기 전에 실행됩니다.
@AfterSuite : 주석 된 메소드는이 제품군의 모든 테스트가 실행 된 후에 실행됩니다.
@BeforeTest : 태그 안에있는 클래스에 속하는 테스트 메소드가 실행되기 전에 주석 된 메소드가 실행됩니다.
@AfterTest : 태그 안의 클래스에 속한 모든 테스트 메소드가 실행 된 후에 주석 메소드가 실행됩니다.
@BeforeGroups :이 구성 방법을 실행하기 전에 그룹 목록입니다. 이 메서드는 이러한 그룹 중 하나에 속한 첫 번째 테스트 메서드가 호출되기 직전에 실행됩니다.
@AfterGroups :이 구성 방법을 실행할 그룹 목록입니다. 이 메소드는 이러한 그룹 중 하나에 속한 마지막 테스트 메소드가 호출 된 직후에 실행되도록 보장됩니다.
@BeforeClass : 주석 된 메소드는 현재 클래스의 첫 번째 테스트 메소드가 호출되기 전에 실행됩니다.
@AfterClass : 주석 된 메소드는 현재 클래스의 모든 테스트 메소드가 실행 된 후에 실행됩니다.
@BeforeMethod : 어노테이션 된 메소드는 각 테스트 메소드 전에 실행됩니다.
@AfterMethod : 주석 된 메소드는 각 테스트 메소드 후에 실행됩니다.
@Test : 어노테이션 된 메소드는 테스트 케이스의 일부이다.
결론
- TestNG는 Selenium 테스트를 더 쉽게 이해할 수 있고 이해하기 쉬운 보고서를 생성 할 수있는 테스트 프레임 워크입니다.
- JUnit에 비해 TestNG의 주요 이점은 다음과 같습니다.
- 주석은 사용하기 쉽고 이해하기 쉽습니다.
- 테스트 사례는보다 쉽게 그룹화 할 수 있습니다.
- TestNG를 사용하면 병렬 테스트를 만들 수 있습니다.
- Eclipse의 Console 창은 텍스트 기반 결과를 생성하지만 TestNG 창은 테스트 결과와 함께 다음과 같은 의미있는 세부 정보를 그래픽으로 출력하기 때문에 더 유용합니다.
- 각 메소드의 런타임.
- 메소드가 실행 된 순서
- TestNG는 HTML 기반 보고서를 생성 할 수 있습니다.
- 주석은 일반적인 Java 메소드와 마찬가지로 매개 변수를 사용할 수 있습니다.
'자동화테스트 > Selenium' 카테고리의 다른 글
Selenium WebDriver의 Alert(경고창) & Popup Window(팝업창) Handling(다루기) (1) | 2018.11.30 |
---|---|
명령 프롬프트에서 TestNG 프로젝트 및 실패한 테스트 케이스를 실행하는 방법 (0) | 2018.11.28 |
Selenium WebDriver 용 Eclipse에 TestNG를 설치하는 방법 (0) | 2018.11.26 |
Selenium WebDriver의 XPath (1) | 2018.11.25 |
Selenium Webdriver를 사용하여 파일을 업로드 및 다운로드하는 방법 (0) | 2018.11.24 |