자동화테스트/Selenium2018. 11. 27. 08:00

TestNG는 무엇입니까?

TestNG는 NG가 "차세대"를 나타내는 자동화 테스트 프레임 워크입니다. TestNG는 주석 (@)을 사용하는 JUnit 에서 영감을 얻었습니다 .

  • TestNG를 사용하면 적절한 보고서를 생성 할 수 있으며 통과, 실패 및 건너 뛴 테스트 사례 수를 쉽게 알 수 있습니다.
  • 실패한 테스트 케이스는 별도로 실행할 수 있습니다. 예를 들어.
    • 테스트 케이스가 다섯 개인 경우 각 테스트 케이스에 대해 하나의 메소드가 작성됩니다 (testNG를 사용하지 않고 main 메소드를 사용하여 프로그램을 작성한다고 가정). 이 프로그램을 처음 실행하면 세 가지 메서드가 성공적으로 실행되고 네 번째 메서드는 실패합니다. 그런 다음 네 번째 메서드에있는 오류를 수정합니다. 이제는 네 번째 메서드 만 실행하려고합니다. 왜냐하면 처음 세 메서드가 성공적으로 실행되기 때문입니다. TestNG를 사용하지 않으면 불가능합니다.
  • TestNG는 테스트 출력 폴더에 testing-failed.xml 파일과 같은 옵션을 제공합니다. 실패한 테스트 케이스 만 실행하려면이 XML 파일을 실행해야합니다. 실패한 테스트 케이스 만 실행합니다.

위의 개념 외에도 TestNG의 장점 인 TestNG에 대한 자세한 내용과 @test 주석을 사용하여 테스트 메소드를 작성하는 방법, 이러한 클래스를 테스트 스위트 파일로 변환하는 방법, Eclipse 및 명령 행에서 실행하는 방법에 대해 배우게됩니다. .

이 자습서에서는

Selenium과 함께 TestNG를 사용하는 이유는 무엇입니까?

기본 Selenium 테스트는 테스트 결과에 적합한 형식을 생성하지 않습니다. TestNG를 사용하여 테스트 결과를 생성 할 수 있습니다.

대부분의 Selenium 사용자 는 이점 때문에 Junit 이상을 사용합니다 TestNG에는 많은 기능이 있지만 셀레늄에서 사용할 수있는 가장 중요한 기능에 초점을 맞출 것입니다. 다음은 TestNG의 주요 기능입니다.

  • 테스트 케이스 실행 횟수, 전달 된 테스트 케이스 수, 실패한 테스트 케이스 수 및 건너 뛴 테스트 케이스 수를 포함하여 적절한 형식으로 보고서를 생성하십시오.
  • 여러 테스트 사례는 testng.xml 파일로 변환하여 더 쉽게 그룹화 할 수 있습니다. 테스트 케이스를 먼저 실행해야하는 우선 순위를 지정할 수 있습니다.
  • 동일한 테스트 케이스는 '호출 횟수'라는 키워드를 사용하여 루프없이 여러 번 실행할 수 있습니다.
  • testng을 사용하면 여러 브라우저에서 여러 개의 테스트 케이스를 실행할 수 있습니다 (예 : 크로스 브라우저 테스트).
  • 테스트 프레임 워크는 Maven, Jenkins 등과 같은 툴과 쉽게 통합 될 수 있습니다.
  • 테스트에 사용 된 주석은 매우 이해하기 쉽습니다. 예 : @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver에는 보고서 생성을위한 기본 메커니즘이 없습니다. TestNG는 아래에 표시된 것과 같은 읽을 수있는 형식으로 보고서를 생성 할 수 있습니다.
  • TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

  • TestNG는 테스트 코드를 단순화합니다. 우리의 테스트에는 정적 메인 메소드가 더 이상 필요하지 않습니다. 액션 시퀀스는 정적 인 메소드를 필요로하지 않는 이해하기 쉬운 주석으로 규제됩니다.
  • TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

    TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

  • 잡히지 않은 예외는 테스트를 조기에 종료하지 않고 TestNG에 의해 자동으로 처리됩니다. 이러한 예외는 보고서에서 실패한 단계로보고됩니다.

JUnit을 통한 TestNG의 장점

JUnit에 비해 TestNG의 세 가지 주요 이점이 있습니다.

  • 특수 효과를 이해하기 쉽습니다.
  • 테스트 사례를보다 쉽게 ​​그룹화 할 수 있습니다.
  • 병렬 테스트 가능

TestNG의 주석은 그 아래 메서드를 실행하는 방법을 제어 할 수있는 코드 줄입니다 . 항상 앞에 @ 기호가 붙습니다. 아주 일찍 그리고 빠른 예가 아래와 같습니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

Annotations는 나중에 "TestNG에서 사용되는 Annotations"섹션에서 논의 될 것이므로 위의 예제를 아직 이해하지 못했다면 완벽하게 괜찮습니다. TestNG의 주석은 JUnit보다 코딩하고 이해하기가 더 쉽다는 사실을 기억하는 것이 중요합니다.

테스트를 병렬로 실행하는 기능은 TestNG에서 사용할 수 있지만 JUnit에서는 사용할 수 없으므로 Selenium Grid를 사용하는 테스터가 더 선호하는 프레임 워크입니다.

어노테이션을 사용한 첫 번째 테스트 사례

테스트 케이스를 만들기 전에 먼저 Eclipse에서 새 TestNG 프로젝트를 설정하고 "FirstTestNGProject"라는 이름을 지정해야합니다.

새로운 TestNG Project 설정하기

1 단계 : 파일> 새로 작성> Java 프로젝트를 클릭하십시오 .(Click File > New > Java Project)

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

2 단계 : "FirstTestNGProject"를 프로젝트 이름으로 입력하고 다음을 클릭하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

3 단계 : 이제 TestNG 라이브러리를 프로젝트로 가져 오기 시작합니다. '라이브러리'탭을 클릭 한 다음 '라이브러리 추가 ...'를 클릭하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

4 단계 : 라이브러리 추가 대화 상자에서 "TestNG"를 선택하고 다음을 클릭하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

5 단계 : 마침을 클릭하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

TestNG가 라이브러리 목록에 포함되어 있는지 확인해야합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

6 단계 : 이제 Selenium API가 포함 된 JAR 파일을 추가합니다. 이 파일들은 이전 장에서 Selenium과 Eclipse를 설치할 때 http://docs.seleniumhq.org/download/ 에서 다운로드 한 Java 클라이언트 드라이버에 있습니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

그런 다음 Selenium JAR 파일을 배치 한 위치로 이동하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

외부 JAR을 추가 한 후, 화면은 다음과 같아야합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

7 단계 : 마침을 클릭하고 Eclipse의 Package Explorer 창에서 FirstTestNGProject가 표시되는지 확인합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

새 TestNG 테스트 파일 만들기

이제 프로젝트를 완료 했으므로 새 TestNG 파일을 만들자.

1 단계 : "src"패키지 폴더를 마우스 오른쪽 버튼으로 클릭 한 다음 새로 만들기> 기타 ...를 선택하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

2 단계 : TestNG 폴더를 클릭하고 "TestNG 클래스"옵션을 선택하십시오. 다음을 클릭하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

3 단계 : 적절한 입력 상자에 아래 표시된 값을 입력하고 마침을 클릭하십시오. Java 파일의 이름을 "FirstTestNGFile"로 지정했습니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

Eclipse는 아래에 표시된 TestNG 파일의 템플리트를 자동으로 작성해야합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

첫 번째 테스트 사례 코딩

머큐리 투어의 홈페이지가 정확한지 확인하는 첫 번째 테스트 사례 를 작성해 보겠습니다 아래와 같이 코드를 입력하십시오.

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 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

TestNG에서 작성된 보고서 확인

Eclipse의 Console 창은 테스트 사례 결과에 대한 텍스트 기반 보고서를 제공하고 TestNG 결과 창은 그래픽 결과를 제공합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

HTML 보고서 생성

TestNG는 HTML 형식으로 보고서를 생성 할 수 있습니다.

1 단계 : 이전 섹션에서 작성한 FirstTestNGFile을 실행 한 후 프로젝트 탐색기 윈도우에서 프로젝트 이름 (FirstTestNGProject)을 마우스 오른쪽 단추로 클릭 한 다음 "새로 고침"옵션을 클릭하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

2 단계 : "테스트 출력"폴더가 만들어졌습니다. 그것을 확장하고 index.html 파일을 찾으십시오. 이 HTML 파일은 최신 테스트 실행 결과에 대한 보고서입니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

3 단계 : index.html 파일을 두 번 클릭하여 Eclipse의 내장 웹 브라우저에서 엽니 다. 일반적인 웹 브라우저에서와 마찬가지로 F5를 눌러 테스트를 다시 한 후에 언제든지이 페이지를 새로 고칠 수 있습니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

TestNG에 사용 된 주석

이전 섹션에서는 @Test 주석을 소개했습니다. 이제 우리는보다 진보 된 주석과 그 사용법을 연구 할 것입니다.

다중 테스트 케이스

하나의 TestNG 파일에서 @Test 주석을 여러 개 사용할 수 있습니다. 기본적으로 @Test로 주석 처리 된 메소드는 사전 순으로 실행됩니다. 아래 코드를 참조하십시오. 메소드 c_test, a_test 및 b_test는 코드에서 사전 순으로 정렬되지 않지만 그대로 실행됩니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

이 코드를 실행하고 생성 된 index.html 페이지에서 "Chronological view"를 클릭하십시오.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

매개 변수

메소드를 다른 순서로 실행하려면 "priority"매개 변수를 사용하십시오. 매개 변수는 주석 기능을 수정하는 키워드입니다 .

  • 매개 변수를 사용하려면 값을 지정해야합니다. 너는 그들 옆에 "="을 놓고 그 다음에 값을 붙인다.
  • 매개 변수는 아래에 표시된 코드 스 니펫과 같이 주석 바로 다음에 배치 된 괄호 안에 들어 있습니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

TestNG는 가장 작은 우선 순위 값을 갖는 @Test 주석을 실행합니다. 우선 순위 값이 연속 될 필요는 없습니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

TestNG HTML 보고서는 메소드가 우선 순위의 오름차순 값에 따라 실행되었는지 확인합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

여러 매개 변수

"우선 순위"외에 @Test에는 "true"또는 "false"로만 설정할 수있는 "alwaysRun"이라는 또 다른 매개 변수가 있습니다. 단일 주석에서 둘 이상의 매개 변수를 사용하려면 아래 표시된 것과 같은 쉼표로 구분 하십시오.

@Test(priority = 0, alwaysRun = true)

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

@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();
      }
}

위의 표와 코드에서 제시 한 논리를 적용하면 메소드가 실행되는 순서가 다음과 같이 예측 될 수 있습니다.

  • st - launchBrowser ()
  • nd - verifyHomepageTitle ()
  • 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);
     }
      
}

위의 코드를 실행하여

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

@BeforeMethod 및 @AfterMethod

@BeforeMethod

이 주석의 메소드는 각 테스트 케이스의 각 메소드보다 먼저 실행됩니다 .

@AfterMethod

이 주석 아래의 메소드는 각 테스트 케이스의 각 메소드 후에 실행됩니다 .

Mercury Tours에서 아래의 두 링크의 대상 페이지 제목을 확인한다고 가정합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

우리 테스트의 흐름은 다음과 같습니다.

  • 홈페이지로 이동하여 제목을 확인하십시오.
  • 등록을 클릭하고 대상 페이지의 제목을 확인하십시오.
  • 홈페이지로 돌아가서 제목이 올바른지 확인하십시오.
  • 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가 다음 순서로보고해야합니다.

TestNG 튜토리얼 : SELENIUM의 설치, 주석, 프레임 워크, 예제

간단히 말해 @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 메소드와 마찬가지로 매개 변수를 사용할 수 있습니다.


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