의 그룹 TestNG

⚡ 스마트 요약

의 그룹 TestNG 논리적 레이블로 테스트 메서드를 태그한 다음 XML 스위트를 통해 포함하거나 제외할 수 있습니다. 이 접근 방식을 사용하면 코드를 다시 작성하지 않고도 스모크 테스트, 회귀 테스트 및 종속성 기반 테스트를 간소화할 수 있습니다. Java 암호.

  • 🏷️ 주석 구문: @Test(groups = {"smoke","regression"}) 메서드에 하나 이상의 논리적 그룹 이름을 태그로 지정할 수 있습니다.
  • 📜 XML 제어: The <groups><run><include> <exclude> testng.xml 파일 내의 태그는 태그가 지정된 메서드 중 실제로 실행되는 메서드를 결정합니다.
  • 🔗 종속성 : The dependsOnGroups 속성에 따라 순서가 정해지므로 필수 조건 그룹은 종속 조건 테스트가 시작되기 전에 항상 완료됩니다.
  • 🤖 AI 선택: AI 기반 테스트 영향 분석 도구는 코드 변경 사항을 관련 그룹에 매핑하여 각 커밋 시 영향을 받는 테스트 스위트만 실행되도록 합니다.
  • 🧪 TestNG 7.x: 최신 릴리스에서는 그룹이 병렬 실행, 리스너 및 Maven Surefire 파이프라인과 완벽하게 호환됩니다.

의 그룹 TestNG

TestNG 이는 단위 테스트, 기능 테스트, 엔드투엔드 테스트, UI 테스트 및 통합 테스트를 포괄하는 테스트 프레임워크입니다. Java 프로젝트.

XML 스위트를 생성하고 Maven을 통해 실행하면 단일 패키지 또는 여러 패키지(패키지는 정의된 디렉터리 구조에 따라 관련 클래스를 캡슐화함)를 실행할 수 있습니다.

TestNG 예시가 있는 그룹

그룹을 사용하는 방법은 다음과 같습니다. TestNG 언제:

  • 기능 영역별로 테스트 메서드를 여러 클래스에 분산시키는 것은 바람직하지 않습니다.
  • 코드베이스에 없는 것처럼 선택한 테스트 케이스를 실행하지 않고 건너뛰고 싶습니다.
  • 두 가지 목표를 모두 달성하기 위해 메서드를 논리적인 그룹으로 분류합니다. TestNG 그런 다음 XML 스위트에 선언된 "포함" 및 "제외" 필터를 준수합니다.

아래 코드 조각은 테스트 메서드에 사용되는 그룹 태깅 구문을 보여줍니다.

@테스트 (그룹 = { "유대감 형성", “강한 유대감” })

여기서는 두 개의 그룹 이름이 사용됩니다. bonding strong_ties이것들은 프로젝트에 맞게 이름을 변경할 수 있는 논리적 레이블입니다.

The <groups> `<tag>`는 XML 스위트 내에서 그룹 필터의 시작을 나타냅니다.

그런 다음 태그된 클래스 중에서 원하는 그룹을 선택하도록 XML을 사용자 지정합니다. 아래 예는 그룹 선언 구문을 보여줍니다.

<그룹>
<운영>
< name="유대감 형성" />
</운영>
</그룹>

하나의 클래스에 10개의 테스트 메서드가 있다고 가정해 보겠습니다.

이러한 방법들 중에서:

  • 6가지 방법이 있습니다. bonding 그룹, 그리고
  • 4가지 방법이 있습니다. strong_ties 그룹입니다.

다음으로 Maven을 설정합니다. Java 경로를 사용하고 Eclipse XML 파일을 통해 그룹 사용법을 시연하는 IDE JavaMaven 기반 프로젝트입니다.

다음에 대한 XML 생성 TestNG 태그 포함

  • Maven 프레임워크의 XML(확장 가능한 마크업 언어) 파일은 하나 이상의 테스트에 대한 구성을 저장하며, 이 구성은 `<test>` 태그 내부에 선언됩니다. 꼬리표.
  • 각 테스트 항목은 로 감싸져 있습니다. 태그이며 하나 이상을 담을 수 있습니다. TestNG 수업.
  • A Java 한 명 이상의 학생이 있는 수업 @테스트 해당 메서드에 대한 어노테이션은 다음과 같이 처리됩니다. TestNG 클래스입니다.

여러 태그가 순서대로 나타나서 작동하는 testng.xml 파일을 구성합니다. , , 그리고 .

  • The 태그에는 스위트 레벨 이름이 포함되어 있습니다. TestNG 실행 요약 보고서.
  • The <test name=”Guru 99 연기 테스트 데모”> 태그에는 논리적 테스트 이름이 저장됩니다. 보고서는 이 태그를 사용하여 통과, 실패 및 건너뛰기 횟수와 총 실행 시간 및 그룹 메타데이터를 계산합니다.
  • The 태그는 테스트 클래스를 가리킵니다. com.group.guru99 패키지이고 TC_Class1 클래스 이름입니다.

<!DOCTYPE 스위트 시스템 “http://testng.org/testng-1.0.dtd”>
<스위트 name="모음곡">
<test name="Guru 99 연기 테스트 데모>
<그룹>
<운영>
< name=“강한 유대감” />
</운영>
</그룹>
<수업>
<수업 name=“com.group.guru99.TC_Class1” />
</수업>
</test>
</스위트>

이 XML 구성은 다음 섹션의 비디오 튜토리얼에서 참조됩니다.

테스트 XML의 "제외" 또는 "포함"

그룹화 메커니즘이 작은 필터에 비해 과하다고 느껴진다면, testng.xml 스위트를 사용하면 개별 테스트 메서드를 이름으로 제외하거나 포함할 수도 있습니다.

제외 태그제외 태그의 구문제외 name=“${TEST_CASE_NAME}” />
포함 태그include 태그의 구문 name=“${TEST_CASE_NAME}” />

참고 : 한 번의 실행에서 여러 테스트 케이스를 포함하거나 제외할 수 있으며, 그룹 필터에도 동일한 구문이 적용됩니다.

dependsOnGroups를 사용하여 순차적 실행

단순한 포용을 넘어, TestNG 한 그룹이 다른 그룹에 의존할 수 있도록 합니다. dependsOnGroups 속성입니다. 실행기는 부모 그룹의 모든 메서드가 종속 메서드가 시작되기 전에 완료되도록 보장하여 사전 조건의 신뢰성을 유지합니다.

  • 먼저 로그인하신 후 거래를 진행하세요. 태그 로그인 방법 group = "auth"그리고 태그 전송 테스트 dependsOnGroups = {"auth"}전송 테스트는 로그인에 성공한 후에만 실행됩니다.
  • 실패 시 건너뛰기: 상위 그룹의 메서드가 실패하면 TestNG 종속 메서드를 완전히 실패 처리하는 대신 건너뛴 것으로 표시하여 보고서의 정확성을 유지합니다.
  • alwaysRun과 함께 사용하세요: 정리 방법은 다음과 같이 설정해야 합니다. alwaysRun = true 따라서 상위 그룹에 오류가 발생하더라도 제거 작업은 계속 실행됩니다.

이 패턴은 API 설정이 UI 검증이 시작되기 전에 완료되어야 하는 엔드투엔드 테스트 스위트에서 흔히 볼 수 있습니다.

달리기 TestNG 코드 그룹화, 포함, 제외(비디오 데모)

아래는 단계별 안내입니다. Java 코드와 XML 제품군은 이를 구동합니다. 그룹화, 제외 및 포함 행동.

테스트 시나리오 : 를 실행 Guru99 데모 뱅킹 사이트에서 로그인 페이지의 몇 가지 요소를 확인하고, 자격 증명을 입력한 후 로그인하여 대시보드에서 몇 가지 항목을 다시 확인하십시오.

달리기 TestNG 그룹화, 포함, 제외 Code

참고 : 각 단계는 자체 메서드에 존재하지만, 실행 시 순서는 XML 스위트의 항목에 따라 달라집니다.

  • 방법 1 : 브라우저를 초기화하고 실행하세요. URL (tc01LaunchURL()).
  • 방법 2 : 로그인 페이지 제목을 확인하세요(tc02VerifyLaunchPage()).
  • 방법 3 : 로그인 양식에 사용자 이름과 비밀번호를 입력하세요.tc03EnterCredentials()).
  • 방법 4 : 사용자 대시보드에서 관리자 ID가 있는지 확인하십시오.tc04VerifyLoggedInPage()).
  • 방법 5 : 사용자 대시보드에서 추가 링크를 확인하세요(tc05VerifyHyperlinks()).

Code 다음 시나리오의 경우:

꾸러미 com.group.guru99;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.Firefox운전사;
import org.testng.Assert;
import org.testng.annotations.Test;

공개 수업 TC_Class1 {
공개 정적 최종 웹드라이버 웹드라이버 = Firefox운전기사();

launchPageHeading = “//h3[text()='Guru99 은행]”;
최후의 userName_element = “//입력[@name='uid']”, password_element = “//입력[@name='비밀번호']”,
signIn_element = “//입력[@name='btnLogin']”;
최후의 userName_value = “mngr28642”, 비밀번호 값 = “ydAnate”;
최후의 managerID = “//td[contains(text(),'관리자 ID')]”;
최후의 신규고객 = “//a[@href='addcustomerpage.php']”, 자금이체 = “//a[@href='FundTransInput.php']”;

/** 이 테스트 케이스는 웹 드라이버를 초기화합니다. */
@테스트(그룹 = { "유대감 형성", “강한 유대감” })
공공 무효 tc01LaunchURL() {
웹드라이버.manage().window().maximize();
웹드라이버.관리().타임아웃().암시적으로대기(20, 시간 단위.초);
웹드라이버.get(“https://www.demo.guru99.com/V4/”);
}

/** 로그인 페이지에 제목이 있는지 확인합니다. */
@테스트(그룹 = { "유대감 형성" })
공공 무효 tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
홈페이지 제목이 표시되지 않습니다);
System.out.println("홈페이지 제목이 표시됩니다");
}

/** 사용자 이름과 비밀번호를 입력한 후 로그인 버튼을 클릭합니다. */
@테스트(그룹 = { "유대감 형성", “강한 유대감” })
공공 무효 tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** 대시보드에서 관리자 ID를 확인합니다. */
@테스트(그룹 = { “강한 유대감” })
공공 무효 tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
"관리자 ID 레이블이 표시되지 않습니다.");
System.out.println("관리자 ID 레이블이 표시됩니다.");
}

/** 대시보드에서 신규 고객 링크와 자금 이체 링크를 확인합니다. */
@테스트(그룹 = { "유대감 형성" })
공공 무효 tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
"신규 고객 하이퍼링크가 표시되지 않습니다.");
System.out.println("신규 고객 하이퍼링크가 표시됩니다");

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
"자금 이체 하이퍼링크가 표시되지 않습니다.");
System.out.println("자금 이체 하이퍼링크가 표시됩니다");
}
}

참고: 데모용 은행 계좌 정보는 약 20일 동안 유효하므로, 해당 기간이 만료된 후에는 로컬 실행 시 '자격 증명 오류'가 표시될 수 있습니다.

코드 설명:

각 행동당 하나씩, 총 다섯 가지 테스트 방법이 있으며, 각 방법은 다음과 같은 의미를 갖습니다. groups 속성의 @Test 주석.

두 개의 논리적 그룹 레이블은 다음과 같습니다. strong_ties bonding.

  • 첫 번째와 세 번째 방법은 둘 다 포함합니다. bonding strong_ties따라서 두 그룹 중 하나라도 테스트 스위트에 포함되면 해당 그룹이 실행됩니다. 이는 공유 테스트에서 흔히 볼 수 있는 패턴입니다. 테스트 사례 단계.
  • 두 번째 방법은 다음과 같이만 태그됩니다. bonding그래서 특정 조건이 충족될 때만 실행됩니다. bonding 그룹이 포함됩니다.
  • 네 번째 방법은 태그만 지정되어 있습니다. strong_ties따라서 해당 그룹이 포함된 경우에만 실행됩니다.
  • 다섯 번째 방법은 태그만 지정되어 있습니다. bonding그래서 특정 조건이 충족될 때만 실행됩니다. bonding 그룹이 포함됩니다.

다음은 네 가지 실행 시나리오입니다.

시나리오 1 : 그룹에 관계없이 모든 테스트 메서드를 실행합니다. 제거 <groups> 실행 중인 XML에서 블록을 제거합니다.

시나리오 2 : 선택한 그룹과 관련된 메서드만 실행합니다. strong_ties or bonding아래 영상을 참고해 주세요.

  • 영상의 첫 부분에서는 <groups> 해당 블록이 주석 처리되어 있으므로 모든 테스트 메서드가 실행됩니다.
  • 두 번째 부분에서는 그룹 필터가 복원되고 일치하는 메서드만 실행됩니다.

시나리오 3 : 선택한 테스트 케이스를 건너뛰려면 제외 필터를 적용하세요. 자세한 내용은 영상을 참조하십시오.

  • 데모에는 다음이 제외됩니다. tc02 실행 중인 XML에서 이름으로 확인하고 결과 보고서를 보면 제외된 메서드가 실행되지 않는 것을 알 수 있습니다.

시나리오 4 : 포함 필터를 적용하여 다음 항목만 실행합니다. tc01LaunchURL, tc03EnterCredentials예산 및 tc05VerifyHyperlinks영상을 참고해 주세요.

이번 실행에서는 포함 필터에 나열된 메서드만 구성된 대로 정확히 실행됩니다.

아래 링크에서 샘플 프로젝트를 다운로드하세요.

위의 다운로드 Code

맺음말

의 그룹 TestNG 대규모 조직에 구조를 부여합니다 Selenium 또한 일회성 클래스 분할을 선언적 XML 필터로 대체하여 유닛 스위트를 구성합니다.

메서드에 태그를 지정하세요 @Test(groups = {...})을 사용한 다음 <include>, <exclude>예산 및 dependsOnGroups 동일한 Maven 프로젝트에서 스모크 테스트, 회귀 테스트 및 엔드 투 엔드 실행을 실행하려면 TestNG 7.x.

자주 묻는 질문

그룹은 테스트 메서드에 연결된 논리적 레이블입니다. groups 속성 @TestXML 스위트는 포함 및 제외 필터를 사용하여 그룹을 선택하므로 런타임에 태그된 메서드를 실행할지 결정할 수 있습니다.

내부 <groups><run> 밸리 <include name="..."> 태그는 실행을 위한 화이트리스트 그룹을 지정합니다. <exclude name="..."> 그것들을 차단합니다. TestNG 제외는 포함 후에 적용되므로, 제외된 그룹은 포함 목록에 있더라도 항상 건너뛰어집니다.

The dependsOnGroups 속성 @Test 세력 TestNG 종속 메서드가 시작되기 전에 나열된 그룹의 모든 메서드를 실행합니다. 선행 메서드 중 하나라도 실패하면, TestNG 종속 메서드가 실패한 것이 아니라 건너뛴 것으로 표시합니다.

예. groups 속성은 배열을 허용하므로 @Test(groups = {"smoke", "regression"}) 두 그룹 모두에 하나의 방법을 배치합니다. TestNG 두 그룹 중 하나라도 테스트 스위트에 포함될 때마다 해당 메서드가 실행되므로 공유 단계가 DRY(Don't Repeat Yourself) 원칙을 준수하게 됩니다.

TestNG 7.x 버전이 유지 관리되는 라인이며, 그 아래에 릴리스가 있습니다. org.testng:testng Maven은 그룹, 병렬 실행 및 리스너를 최신 버전과 완벽하게 호환되도록 유지합니다. Selenium 4 및 JDK 17 프로젝트.

AI 테스트 영향 분석 도구는 코드 차이점을 분석한 다음 변경된 클래스를 해당 클래스를 포함하는 그룹에 매핑합니다. 이 파이프라인은 각 풀 리퀘스트에서 태그가 지정된 그룹만 실행하여 피드백 시간을 단축하는 동시에 효율성을 유지합니다.ping 위험한 경로들이 시험 중입니다.

예. AI 클러스터링 알고리즘은 과거 실패 로그를 읽고 불안정한 테스트를 표시한 다음 안정적인 하위 집합을 제안하며, 이 하위 집합에는 '안정적'이라는 태그가 지정됩니다. regression엔지니어들이 그 목록을 승인하면, TestNG 해당 그룹은 매일 밤 운영되므로, 보안을 유지하면서도 스위트룸의 보안을 강화할 수 있습니다.

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