TestNG 튜토리얼

⚡ 스마트 요약

TestNG 차세대입니다 Java 다음과 연동되는 테스트 프레임워크 Selenium 구조화된 자동화, 풍부한 보고 기능 및 병렬 실행을 위한 것입니다. 이 튜토리얼에서는 핵심 어노테이션과 프로젝트 설정에 대해 다룹니다. Eclipse첫 번째 테스트 케이스 작성, HTML 보고서 작성 및 고급 매개변수 사용법을 다룹니다.

  • 🧱 핵심 프레임워크: TestNG 확장하다 JUnit 주석이 달린 아이디어, 그룹ping그리고 병렬 테스트 실행 Selenium 스위트.
  • 🏷️ 주석이 흐름을 좌우합니다: @Test, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest 시퀀스 설정, 테스트 및 해제.
  • 🗂️ Eclipse 설정 : 을 구축 TestNG 프로젝트에 추가하세요 TestNG 도서관과 Selenium JAR 파일을 생성한 다음 마법사를 통해 테스트 클래스를 생성합니다.
  • 📊 보고 : TestNG 테스트 출력 폴더에 텍스트, 그래픽 및 HTML 보고서를 생성하며, 여기에는 시간순 보기도 포함됩니다.
  • ⚙️ 매개 변수 : 우선순위, alwaysRun 및 dataProvider를 사용하여 실행 순서를 제어하고 테스트에 데이터를 제공합니다.
  • 🤖 AI 부스트: AI 코딩 도우미가 속도를 높여줍니다 TestNG 클래스 생성, 로케이터 업데이트 및 데이터 제공자 스캐폴딩.

TestNG 튜토리얼

TestNG?

TestNG 는 자동화 테스트 프레임워크이며, 여기서 "NG"는 "차세대(Next Generation)"를 의미합니다. TestNG 영감을받은 JUnit 사용 Java 어노테이션(@)을 사용하여 테스트 흐름을 제어합니다. 이는 다음과 같은 문제를 해결합니다. JUnit이전의 한계를 극복하고 다음과 같이 설계되었습니다. 종단 간 테스트 쉬워집니다.

와 TestNG 정확한 보고서를 생성하여 통과, 실패 또는 건너뛴 테스트 수를 즉시 확인할 수 있습니다. 또한 실패한 테스트만 다시 실행할 수도 있습니다.

예 :

  • 각각 독립적인 메서드에 작성된 다섯 개의 테스트 케이스가 있다고 가정해 봅시다. TestNG세 개는 통과하고 네 번째는 실패합니다. 네 번째 실패를 수정한 후에는 처음 세 개는 이미 통과했으므로 해당 실패만 다시 실행하고 싶습니다. 일반적인 main() 메서드 코드로는 이러한 작업을 수행하기 어렵습니다.
  • TestNG 를 제공합니다 testng-failed.xml 에 파일을 test-output 폴더. 해당 XML을 실행하면 실패한 경우만 다시 실행됩니다.

그뿐만 아니라, 여러분은 다음과 같은 장점을 배우게 될 것입니다. TestNG`@Test` 어노테이션을 사용하여 테스트 메서드를 작성하는 방법과 클래스를 실행 가능한 테스트 스위트로 변환하는 방법을 설명합니다. Eclipse 또는 명령줄을 사용할 수도 있습니다.

왜 사용 하는가? TestNG 과 Selenium?

기본적으로, Selenium 테스트 결과가 보기 좋게 정리되지 않습니다. TestNG 테스트 실행기가 연결되면 팀과 공유할 수 있는 구조화된 보고서가 생성됩니다.

다리 Selenium 사용자들이 선호하는 TestNG 위에 JUnit 더 폭넓은 기능 세트 덕분입니다. 주요 기능은 다음과 같습니다. Selenium 위치 :

  • 실행된 테스트 케이스 수, 통과된 테스트 케이스 수, 실패한 테스트 케이스 수, 건너뛴 테스트 케이스 수를 포함하는 보고서입니다.
  • 이지 그룹ping 테스트 케이스를 통해 testng.xml 실행 우선순위가 지정된 파일입니다.
  • 반복문을 사용하지 않고 테스트를 여러 번 반복합니다. invocationCount.
  • 여러 브라우저에서 여러 테스트를 실행합니다 — 크로스 테스트브라우저 테스트 지원합니다.
  • Maven과의 원활한 통합, Jenkins그리고 기타 CI 도구들.
  • Readable 어노테이션 — 예를 들어, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
  • Selenium WebDriver에는 기본 보고 기능이 없습니다. TestNG 아래와 같은 깔끔한 HTML 보고서로 그 공백을 채웁니다.

TestNG HTML 보고서 샘플 Selenium 테스트

  • TestNG 테스트 코드를 간소화합니다. 더 이상 정적 main 메서드가 필요하지 않으며, 어노테이션이 어떤 메서드가 언제 실행될지 결정합니다.

일반 Java main 메서드를 포함하는 테스트 클래스 구조

TestNG 어노테이션을 사용한 테스트 클래스 구조

  • 처리되지 않은 예외는 적절하게 처리됩니다. TestNG이러한 단계는 전체 실행을 종료하지 않고 실패한 단계로 보고됩니다.

의 장점 TestNG 위에 JUnit

TestNG 세 가지 주요 장점을 제공합니다. JUnit:

  • 주석을 사용하면 이해하고 사용하기가 더 쉽습니다.
  • 테스트 케이스를 그룹화하고 우선순위를 지정하는 데 드는 노력을 줄일 수 있습니다.
  • 병렬 테스트 실행은 기본적으로 지원됩니다.

주석이란 무엇인가요? TestNG?

주석 TestNG 메서드 위에 배치되는 코드 줄로, 메서드의 실행 방식을 제어합니다. 항상 @ 기호로 시작합니다. 간단한 예는 아래에 나와 있습니다.

예시 TestNG 위의 주석 Java 방법

주석에 대한 자세한 내용은 해당 섹션에서 다룹니다. "사용된 주석" TestNG" 이 튜토리얼 후반부에 나올 내용이니 위의 예시는 단지 기대치를 설정하기 위한 것입니다. TestNG 어노테이션은 코드 작성과 읽기가 더 쉽습니다. JUnit 동등한 것들이며, 테스트를 실행할 때 필수적입니다. Selenium 그리드 병렬 실행이 중요한 경우.

테스트 케이스 작성 방법 TestNG

쓰기 TestNG 테스트 케이스는 세 단계로 구성됩니다.

  1. 비즈니스 로직을 작성하고 배치하세요. TestNG 각 메서드 위에 주석이 있습니다.
  2. 클래스 이름, 그룹 이름, 패키지 이름과 같은 메타데이터를 추가하세요.
  3. 실행 TestNG IDE 또는 명령줄에서 클래스를 실행하세요.

테스트 케이스 생성하기 TestNG 주석

이제 우리는 이를 사용하여 첫 번째 테스트 케이스를 만들겠습니다. TestNG 주석 Selenium테스트를 작성하기 전에 새 환경을 설정하세요. TestNG ~에있는 프로젝트 Eclipse 그것을 불러라. 이름TestNG하이라이트.

새로운 설정하기 TestNG 하이라이트

단계 1) 파일 > 새로 만들기 > Java 하이라이트.

Eclipse 새로운 메뉴를 만들려면 Java 프로젝트

단계 2) 엔터 버튼 이름TestNG하이라이트 프로젝트 이름으로 클릭하고 다음.

새 소식 Java 프로젝트 마법사 (이름은 First)TestNG하이라이트

단계 3) 가져 오기 TestNG 라이브러리. 클릭하세요 도서관 탭을 누른 다음 라이브러리 추가….

라이브러리 탭에서 라이브러리 추가 옵션을 선택할 수 있습니다. Eclipse

단계 4) . 라이브러리 추가 대화 상자, 선택 TestNG 클릭 다음.

선택 TestNG 라이브러리 추가 대화 상자에서

단계 5) 마감재 .

라이브러리 추가 마법사 완료

TestNG 이제 라이브러리 목록에 표시될 것입니다.

TestNG 라이브러리 목록에서 볼 수 있습니다.

단계 6) 다음 내용이 포함된 JAR 파일을 추가하세요. Selenium API. 이것들은 다음에서 나옵니다. Java 클라이언트 드라이버는 다음에서 다운로드되었습니다. selenium.dev/downloads.

외부 JAR 추가 대화 상자에서 Eclipse

해당 폴더로 이동하세요 Selenium JAR 파일이 저장됩니다.

선택 Selenium 빌드 경로용 JAR 파일

외부 JAR 파일을 추가한 후 화면은 다음과 같이 표시되어야 합니다.

Selenium 라이브러리 목록에 JAR 파일이 추가되었습니다.

단계 7) 마감재 . 새로운 이름TestNG하이라이트 패키지 탐색기에 나타납니다.

이름TestNG패키지 탐색기에서 프로젝트가 표시됩니다

새로 만드는 방법 TestNG 테스트 파일

프로젝트 준비가 완료되면 새 프로젝트를 생성하세요. TestNG 파일.

단계 1) 마우스 오른쪽 버튼으로 src 폴더를 선택하고 신규 > 기타….

src 폴더에서 가져온 새로운 기타 메뉴 Eclipse

단계 2) 확장 TestNG 폴더, 선택 TestNG 수업그리고 클릭 다음.

TestNG 새 마법사의 클래스 옵션

단계 3) 아래에 표시된 값을 입력하고 클릭하세요. 마감재 . 그만큼 Java 파일 이름이 이름TestNG입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에.

TestNG 첫 번째 클래스 마법사TestNG파일 값

단계 4) Eclipse 생성 TestNG 아래에 템플릿이 나와 있습니다.

생성 TestNG 클래스 템플릿 Eclipse 편집자

코딩 첫걸음 TestNG 테스트 케이스

첫 번째를 만드세요 테스트 사례 그것은 다음 제목을 확인합니다. Mercury 투어 홈페이지.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @Test
    public void verifyHomepageTitle() {
        System.out.println("launching firefox browser");
        // Selenium 4 ships Selenium Manager, so the driver path is no longer required.
        driver = new FirefoxDriver();
        driver.get(baseUrl);
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
        driver.quit();
    }
}

주의할 점:

  • TestNG 필요하지 않습니다 main() 방법.
  • 메서드는 정적일 필요가 없습니다.
  • The @테스트 주석 표시 verifyHomepageTitle() 테스트 케이스로 사용합니다.
  • 주석은 다음 위치에 있습니다. org.testng.annotations.* 패키지.
  • The 주장하다 수업에서 org.testng.Assert 검증을 진행합니다.

하나의 코드에 여러 개의 @Test 어노테이션을 사용할 수 있습니다. TestNG 파일에서 다룹니다. "사용된 주석" TestNG" 안내

테스트 실행

파일을 마우스 오른쪽 버튼으로 클릭하고 실행하세요. TestNG 테스트. Eclipse 콘솔 창에 텍스트 결과와 그래픽 결과, 이렇게 두 가지 출력을 생성합니다. TestNG 결과 창.

TestNG 테스트 결과가 표시되는 결과 창

Eclipse 콘솔 창 TestNG 텍스트 출력

작성자가 작성한 보고서 확인 TestNG

콘솔 창은 텍스트 기반 요약을 제공하는 반면 TestNG 결과 창에는 그래프로 된 보기가 표시됩니다.

텍스트 vs 그래픽 TestNG 결과 비교

HTML 보고서 생성

TestNG 완전한 HTML 보고서도 생성할 수 있습니다.

단계 1) 실행 후 이름TestNG입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에프로젝트를 마우스 오른쪽 버튼으로 클릭하고 선택하세요. 새로 고침.

새로 고침 옵션 TestNG ~에있는 프로젝트 Eclipse

단계 2) A 테스트 출력 폴더가 나타납니다. 폴더를 펼치고 찾으세요. index.html — 가장 최근 실행에 대한 HTML 보고서입니다.

index.html이 강조 표시된 테스트 출력 폴더

단계 3) Double-딸깍 하는 소리 index.html 안쪽을 열다 Eclipse브라우저입니다. 다음 실행 후 새로 고침하려면 F5 키를 누르십시오.

TestNG HTML 인덱스 보고서가 렌더링되었습니다. Eclipse

주석 사용 TestNG

이미 @Test 어노테이션을 보셨습니다. 이 섹션의 나머지 부분에서는 가장 유용한 고급 어노테이션에 대해 다룹니다.

여러 테스트 케이스

하나의 TestNG 파일에는 여러 개의 `@Test` 어노테이션이 포함될 수 있습니다. 기본적으로 `@Test` 어노테이션이 있는 메서드는 알파벳 순서대로 실행됩니다. 아래 코드에서 메서드는 다음과 같습니다. c_test, a_test예산 및 b_test 소스 순서와 관계없이 알파벳순으로 실행됩니다.

하나의 메서드에 여러 개의 @Test 메서드가 있습니다. TestNG 수업

코드를 실행하고 열어보세요 index.html. 딸깍 하는 소리 연대순 보기.

여러 가지의 시간순 관점 TestNG 방법

파라미터

기본 정렬 순서를 재정의하려면 다음을 사용하십시오. priority 매개 변수입니다. 매개변수는 어노테이션의 동작을 수정하는 키워드입니다.

  • 값을 할당합니다 =.
  • 아래와 같이 어노테이션 바로 뒤에 괄호를 배치하여 매개변수를 감싸십시오.

TestNG 매개변수 및 값 구문을 사용한 주석

TestNG @Test 어노테이션을 우선순위 값이 가장 낮은 것부터 가장 높은 것 순으로 실행합니다. 우선순위 번호는 연속적일 필요는 없습니다.

@Test 우선순위 매개변수를 포함한 전체 코드

HTML 보고서는 메서드가 우선순위 오름차순으로 실행되었음을 확인시켜 줍니다.

TestNG 우선순위가 높은 순서대로 실행된 메서드를 보여주는 보고서

다중 매개변수

게다가 priority, @Test는 다음을 수락합니다. alwaysRun 매개변수(참 또는 거짓). 하나의 어노테이션에서 두 개 이상의 매개변수를 사용하려면 쉼표로 구분하세요.

@Test(priority = 0, alwaysRun = true)

@Test 어노테이션 안에 여러 매개변수를 사용하는 예시

@BeforeTest 및 @AfterTest

@BeforeTest 이 어노테이션 아래에 있는 메서드가 실행됩니다. 첫 번째 테스트 케이스 이전에 TestNG 파일.
@애프터테스트 이 어노테이션 아래에 있는 메서드가 실행됩니다. 모든 테스트 케이스가 끝난 후 TestNG 파일 완료.

아래 코드를 고려해보세요.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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.quit();
    }
}

표와 코드를 통해 다음과 같은 순서가 될 것이라고 예측할 수 있습니다.

  • 1번째 — launchBrowser()
  • 2번째 — verifyHomepageTitle()
  • 3번째 — terminateBrowser()

소스 파일에서 어노테이션 블록의 위치는 실행 순서에 영향을 미치지 않습니다. 아래와 같이 메서드 순서를 바꿔보세요.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @AfterTest                              // Jumbled
    public void terminateBrowser() {
        driver.quit();
    }

    @BeforeTest                             // Jumbled
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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 뒤죽박죽된 주석에도 불구하고 결과는 순서를 확인시켜 줍니다.

@BeforeMethod 및 @AfterMethod

안녕하세요. 이 어노테이션 아래에 있는 메서드가 실행됩니다. 각 테스트 방법 전에.
안녕하세요. 이 어노테이션 아래에 있는 메서드가 실행됩니다. 각 테스트 방법 후에.

In Mercury 예를 들어 홈페이지에서 접근한 두 개의 대상 페이지의 제목을 확인하고 싶다고 가정해 보겠습니다.

세 개의 링크 Mercury 투어 홈페이지

시험 진행 순서는 다음과 같습니다.

  • 홈페이지를 열고 제목을 확인하세요.
  • REGISTER를 클릭하고 대상 페이지의 제목을 확인하세요.
  • 홈페이지로 돌아가서 제목을 확인하세요.
  • 지원을 클릭하고 대상 페이지의 제목을 확인하세요.
  • 홈페이지로 돌아가서 제목을 다시 확인하세요.

아래 코드는 @BeforeMethod와 @AfterMethod가 반복되는 단계를 처리하는 방식을 보여줍니다.

package firsttestngpackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;
    public String expected = null;
    public String actual = null;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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.quit();
    }
}

테스트를 실행한 후, TestNG 아래 순서를 보고합니다.

TestNG BeforeMethod와 AfterMethod를 사용한 보고 순서

요약하자면, 설정 단계를 안에 넣으세요. 안녕하세요. 그리고 내부 정리 또는 탐색 재설정 안녕하세요. 따라서 각 테스트 케이스는 알려진 상태에서 시작하고 알려진 상태에서 끝납니다.

요약 TestNG 주석

  • @BeforeSuite: 테스트 스위트 내의 모든 테스트보다 먼저 실행됩니다.
  • @AfterSuite: 테스트 스위트의 모든 테스트가 완료된 후에 실행됩니다.
  • @테스트 전: 클래스 내부에 있는 모든 테스트 메서드보다 먼저 실행됩니다. 꼬리표.
  • @AfterTest: 클래스 내부에 있는 모든 테스트 메서드가 실행된 후에 실행됩니다. 꼬리표.
  • @BeforeGroups: 나열된 그룹에 속하는 첫 번째 테스트 메서드 바로 직전에 실행됩니다.
  • @AfterGroups: 나열된 그룹에 속하는 마지막 테스트 메서드 직후에 실행됩니다.
  • @수업전: 현재 클래스의 첫 번째 테스트 메서드 이전에 실행됩니다.
  • @수업후: 현재 클래스의 모든 테스트 메서드가 실행된 후에 실행됩니다.
  • @BeforeMethod: 각 테스트 메서드 실행 전에 실행됩니다.
  • @AfterMethod: 각 테스트 메서드 실행 후에 실행됩니다.
  • @시험: 해당 메서드를 테스트 케이스로 표시합니다.

자주 묻는 질문

JUnit 5 현대화됨 JUnit Jupiter API 및 확장 모델을 사용합니다. TestNG 병렬 실행 및 스위트 수준 그룹에서 여전히 선두를 유지하고 있습니다.ping, dependsOn 및 DataProvider. 많은 Selenium 팀 선택 TestNG 엔드투엔드 솔루션 제품군의 경우 JUnit 단위 테스트의 경우 5개입니다.

parallel="methods" 또는 parallel="classes"와 스레드 수 속성을 추가하세요. testng.xml 파일 안의 태그입니다. TestNG 그런 다음 테스트 메서드를 스레드 전체에 분산시키므로 다음과 같은 경우에 이상적입니다. Selenium 그리드 또는 클라우드 환경에서 브라우저 간 실행이 가능합니다.

@DataProvider는 여러 데이터 세트를 하나의 @Test 메서드에 제공합니다. 프로바이더의 각 행은 하나의 실행을 나타냅니다. 이는 데이터 기반 테스트의 표준 패턴입니다. Selenium 폼, 검색 상자 또는 로그인 화면에 대한 테스트입니다.

예. AI 코딩 도우미가 생성합니다 TestNG 골격 구조를 만들고, @Test 메서드에 주석을 달고, 페이지 객체 클래스를 구축하고, 샘플 CSV 파일에서 DataProvider 배열을 생성하여 스캐폴딩 시간을 크게 단축합니다.

생성형 AI는 testng-results.xml 및 Surefire 로그를 수집하여 유사한 오류를 그룹화하고, 근본 원인을 제시하며, Jira 티켓을 생성합니다. 이를 통해 불안정한 테스트 분류 시간을 단축하고 QA 책임자가 CI 수정 사항의 우선순위를 정하는 데 도움을 줍니다.

이 게시물을 요약하면 다음과 같습니다.