TestNG 청취자 Selenium
⚡ 스마트 요약
청취자 Selenium WebDriver는 TestNG 테스트 이벤트를 가로채서 로그, 보고서 및 실패 후 조치를 사용자 지정할 수 있는 인터페이스입니다. 이 문서에서는 ITestListener의 메서드를 설명하고 실행 가능한 예제를 살펴봅니다. Java 예를 들어 설명하고, 그 방법을 명확히 합니다. Selenium 4 버전은 더 이상 사용되지 않는 WebDriverEventListener를 대체했습니다.

Selenium WebDriver 스크립트는 종종 어설션 통과, 로케이터 실패 또는 단계 건너뛰기와 같은 테스트 이벤트에 반응해야 합니다. 리스너를 사용하면 이것이 가능합니다. 일반적으로, Selenium 프로젝트는 두 가지 청취자 그룹에 의존합니다.
- WebDriver 리스너
- TestNG 청취자
이 튜토리얼에서는 다음에 초점을 맞출 것입니다. TestNG WebDriver 수준 리스너가 어떻게 변경되었는지에 대한 참고 사항과 함께 리스너에 대한 설명입니다. Selenium 4.x.
청취자란 누구인가? TestNG?
리스너는 기본 동작을 수정하는 인터페이스입니다. TestNG이름에서 알 수 있듯이, 리스너는 특정 파일에 정의된 이벤트를 "수신"합니다. Selenium 스크립트를 실행하고 그에 따라 반응합니다. 관련 Listener 인터페이스를 구현하고 테스트 클래스 또는 테스트 스위트에 등록하여 사용합니다. Listener를 사용하면 사용자 정의가 가능합니다. TestNG 보고서를 작성하고, 스크린샷을 첨부하고, 구조화된 로그를 출력합니다.
청취자의 유형 TestNG
TestNG 이 패키지는 다양한 리스너 인터페이스를 제공하며, 각 인터페이스는 테스트 수명주기의 서로 다른 단계를 대상으로 합니다.
아래는 일반적으로 사용되는 것들입니다. TestNG 청취자:
- IAnnotationTransformer
- IAnnotationTransformer2
- 구성 가능
- IConfigurationListener
- IExecutionListener
- IHookable
- IInvokedMethodListener
- IInvokedMethodListener2
- IMethod인터셉터
- 아이 리포터
- I SuiteListener
- ITestListener
이러한 인터페이스는 다음과 같은 용도로 사용됩니다. Selenium 로그를 생성하거나 사용자 지정하려면 TestNG 보고서. 이 튜토리얼에서는 보고서를 구현해 보겠습니다. ITestListener.
ITestListener 다음 메서드를 노출합니다.
- 시작 – 테스트가 시작될 때 호출됩니다.
- onTestSuccess – 테스트가 통과되면 호출됩니다.
- 테스트 실패 시 – 테스트가 실패했을 때 호출됩니다.
- 테스트 건너뛰기 – 테스트가 건너뛰어졌을 때 호출됩니다.
- 테스트 실패했지만 성공률 내에 있는 경우 - 테스트가 실패했지만 성공률 범위 내에 있을 때 호출됩니다.
- 완료 – 클래스 내의 모든 테스트가 실행된 후에 호출됩니다.
테스트 시나리오
이 테스트 시나리오에서는 로그인 프로세스를 자동화하고 구현하겠습니다. ITestListener 그것에 대하여.
- 실행 Firefox 그리고 사이트를 열어보세요 https://demo.guru99.com/V4/
- 애플리케이션에 로그인하세요.
생성 단계 TestNG 경청자
위의 테스트 시나리오에 대해 리스너를 단계별로 구현해 보겠습니다.
단계 1) 클래스를 생성하세요 리스너테스트 그 구현 ITestListener빨간색 밑줄 위에 마우스 커서를 올려놓으면 Eclipse 아래와 같이 두 가지 빠른 해결책을 제안합니다.
"구현되지 않은 메서드 추가"를 클릭하세요. 본문이 없는 여러 개의 스텁 메서드가 다음과 같이 코드에 추가됩니다.
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
공개 수업 리스너테스트 구현하다 ITestListener {
@우세하다
공공 무효 onFinish(ITestContext arg0) {
// TODO 자동 생성된 메서드 스텁
}
@우세하다
공공 무효 onStart(ITestContext arg0) {
// TODO 자동 생성된 메서드 스텁
}
@우세하다
공공 무효 테스트 실패했지만 성공률 내에 있는 경우(ITestResult arg0) {
// TODO 자동 생성된 메서드 스텁
}
@우세하다
공공 무효 테스트 실패 시(ITestResult arg0) {
// TODO 자동 생성된 메서드 스텁
}
@우세하다
공공 무효 테스트 건너뛴(ITestResult arg0) {
// TODO 자동 생성된 메서드 스텁
}
@우세하다
공공 무효 onTestStart(ITestResult arg0) {
// TODO 자동 생성된 메서드 스텁
}
@우세하다
공공 무효 테스트 성공(ITestResult arg0) {
// TODO 자동 생성된 메서드 스텁
}
}
이제 수정해 보겠습니다. 리스너테스트 클래스입니다. 특히, 다음과 같은 메서드를 작성할 것입니다. 테스트 실패 시, 테스트 건너뛰기, 테스트 시작예산 및 테스트 성공.
변경 사항은 간단합니다. 각 메서드가 테스트 이름을 출력하여 콘솔에 통과, 실패 및 건너뛰기 상태가 명확하게 표시되도록 합니다.
수정 후 코드는 다음과 같습니다.
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
공개 수업 리스너테스트 구현하다 ITestListener {
@우세하다
공공 무효 onFinish(ITestContext 결과) {
}
@우세하다
공공 무효 onStart(ITestContext 결과) {
}
@우세하다
공공 무효 테스트 실패했지만 성공률 내에 있는 경우(ITestResult 결과) {
}
// 테스트 케이스가 실패하면 이 메서드가 호출됩니다.
@우세하다
공공 무효 테스트 실패 시(ITestResult 결과) {
System.out.println(“실패한 테스트 케이스의 이름은 다음과 같습니다:” + Result.getName());
}
// 테스트 케이스가 건너뛰어지면 이 메서드가 호출됩니다.
@우세하다
공공 무효 테스트 건너뛴(ITestResult 결과) {
System.out.println("건너뛴 테스트 케이스의 이름은 다음과 같습니다: " + Result.getName());
}
// 테스트 케이스가 시작될 때 이 메서드가 호출됩니다.
@우세하다
공공 무효 onTestStart(ITestResult 결과) {
System.out.println(Result.getName() + "테스트 케이스가 시작되었습니다");
}
// 테스트 케이스가 통과되면 이 메서드가 호출됩니다.
@우세하다
공공 무효 테스트 성공(ITestResult 결과) {
System.out.println(“통과한 테스트 케이스의 이름은 다음과 같습니다:” + Result.getName());
}
}
단계 2) 다른 클래스를 생성하세요. 테스트 케이스 로그인 자동화를 위해서입니다. Selenium 이 클래스를 실행하여 데모 사이트에 로그인합니다.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.Firefox운전사;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
공개 수업 테스트 케이스 {
웹드라이버 운전사 = Firefox운전기사();
// 이 테스트는 통과하도록 설계되었으며, 성공 리스너를 검증합니다.
@테스트
공공 무효 로그인() {
드라이버.get(“https://demo.guru99.com/V4/”);
driver.findElement(By.name(“uid”)).sendKeys(“mngr34926”);
driver.findElement(By.name("암호")).sendKeys(“amUpenu”);
driver.findElement(By.name(“btnLogin”)).딸깍 하는 소리();
}
// 실패 리스너의 작동 여부를 확인하기 위해 테스트를 강제로 실패시켰습니다.
@테스트
공공 무효 TestToFail() {
System.out.println("이 테스트 방법은 실패합니다.");
Assert.assertTrue(그릇된);
}
}
단계 3) 다음으로, 이 리스너를 테스트 클래스에 연결합니다. 테스트 케이스클래스를 리스너 인터페이스에 연결하는 방법에는 두 가지가 있습니다.
첫 번째 방법은 @청취자 여러분 아래와 같이 주석을 달았습니다.
우리는 이 주석을 위에 추가합니다. 테스트 케이스 클래스입니다. 그러면 클래스는 다음과 같습니다.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.Firefox운전사;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
공개 수업 테스트 케이스 {
웹드라이버 운전사 = Firefox운전기사();
// 테스트 통과 여부 확인, 성공 리스너 검증.
@테스트
공공 무효 로그인() {
드라이버.get(“https://demo.guru99.com/V4/”);
driver.findElement(By.name(“uid”)).sendKeys(“mngr34926”);
driver.findElement(By.name("암호")).sendKeys(“amUpenu”);
driver.findElement(By.name(“btnLogin”)).딸깍 하는 소리();
}
// 실패 리스너의 작동 여부를 확인하기 위해 테스트를 강제로 실패시켰습니다.
@테스트
공공 무효 TestToFail() {
System.out.println("이 테스트 방법은 실패합니다.");
Assert.assertTrue(그릇된);
}
}
프로젝트 구조는 다음과 같습니다.
단계 4) 실행 테스트 케이스 클래스. 내부 메서드 리스너테스트 어노테이션이 지정된 메서드의 동작에 따라 자동으로 호출됩니다. @테스트.
단계 5) 콘솔에 표시된 출력을 확인하십시오.
의 출력 테스트 케이스 다음과 같습니다 :
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml
로그인 테스트 케이스 시작됨
통과한 테스트 케이스의 이름은 '로그인'입니다.
TestToFail 테스트 케이스가 시작되었습니다.
이 테스트 방법은 실패합니다.
실패한 테스트 케이스의 이름은 TestToFail입니다.
통과: 로그인
실패: TestToFail
java.lang.AssertionError: 예상되는 값은 [true]이지만 실제 값은 [false]입니다.
여러 클래스에 리스너 사용하기
프로젝트에 테스트 클래스가 많은 경우, 추가하는 방법은 다음과 같습니다. @청취자 여러분 각 항목에 주석을 다는 것은 번거롭고 오류 발생 가능성이 높아집니다.
그렇다면, 다음을 생성하세요. 테스트ng.xml 파일을 생성하고 거기에 리스너를 한 번 등록하세요.
이 리스너는 클래스 수와 관계없이 전체 테스트 스위트에 적용됩니다. XML 파일을 실행하면 스위트에 선언된 모든 클래스에 대해 리스너가 실행되며, 동일한 태그 내에서 원하는 만큼 리스너 클래스를 연결할 수 있습니다.
WebDriverListener에서 Selenium 4 vs 더 이상 사용되지 않는 EventFiringWebDriver
DaVinci에는 TestNG 리스너는 테스트 라이프사이클 이벤트에 반응하고, WebDriver 리스너는 클릭, 탐색 또는 findElement 호출과 같은 브라우저 드라이버 작업에 반응합니다. Selenium 3. 일반적인 접근 방식은 다음과 같았습니다. 웹드라이버이벤트리스너 인터페이스가 연결되어 있습니다. 이벤트발화 웹드라이버둘 다 더 이상 사용되지 않습니다. Selenium 4.x.
현대적인 대체품은 다음과 같습니다. 웹드라이버리스너 인터페이스와 결합됨 이벤트발화장식기:
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.events.EventFiringDecorator;
import org.openqa.selenium.support.events.WebDriverListener;
공개 수업 로깅리스너 구현하다 웹드라이버리스너 {
@우세하다
공공 무효 beforeGet(웹드라이버 드라이버, URL 문자열) {
System.out.println(“다음으로 이동하기” + URL);
}
}
웹드라이버 원시 = ChromeDriver();
웹드라이버 운전사 = 이벤트발화장식기<>( LoggingListener()).decorate(raw);
이 데코레이터는 모든 WebDriver, WebElement 또는 Alert를 감쌀 수 있으므로 기존의 이벤트 발생 래퍼보다 유연성이 뛰어납니다. 사용하세요. 웹드라이버리스너 브라우저 측 관찰 가능성을 위해 TestNG ITestListener 스위트별 보고용입니다.
AI 기반 리스너: 더욱 스마트해진 로그 및 오류 분류
현대 Selenium 팀들은 CI 신호를 더욱 실용적으로 활용하기 위해 AI 서비스를 리스너에 점점 더 많이 통합하고 있습니다. 테스트 실패 시AI 기반 리스너는 DOM 스냅샷과 스크린샷을 캡처하여 모델에 전송하고, 모델은 근본 원인 클러스터를 반환한 다음 태그를 다시 추가할 수 있습니다. TestNG 보고서 또는 ReportPortal과 같은 도구를 사용하세요.
일반적인 AI 기반 패턴은 다음과 같습니다.
- 불안정한 테스트 감지: 청취자는 통과/실패 타임라인을 모델에 전달하고, 모델은 실패를 일시적인 오류, 환경적 요인 또는 실제 회귀 오류로 분류합니다.
- 스마트 스크린샷: 컴퓨터 비전 모델은 UI 스크린샷을 자르고, 주석을 달고, 차이점을 비교하여 검토자가 전체 페이지를 보는 대신 변경된 영역만 볼 수 있도록 합니다.
- 자가 복구형 위치 추적기: A 웹드라이버리스너 후크 요소 찾기 전 기본 위치 추적기가 오류를 발생시킬 경우 AI 도우미에게 대체 위치 추적기를 제안해 달라고 요청합니다. NoSuchElementException.
- 자연어 요약: An 아이 리포터 구현 과정에서 생성된 결과는 LLM(로컬 라이프사이클 관리자)에 입력되어 한 단락으로 된 요약 보고서를 생성합니다.
리스너 레이어는 테스트 로직에서 벗어나 있고 전체 테스트 스위트에 균일하게 적용되므로 이러한 훅을 주입하기에 가장 깔끔한 위치입니다.
제품 개요
로그를 생성하거나 사용자 정의하려면 리스너가 필요합니다. TestNG ~에보고하다 Selenium 웹드라이버.
- TestNG 다양한 청취자 인터페이스를 제공합니다. 관심 있는 이벤트에 맞는 인터페이스를 선택하세요.
- 리스너는 다음과 같은 용도로 사용되는 인터페이스입니다. Selenium 테스트 수명 주기 이벤트에 반응하는 WebDriver 스크립트입니다.
- 튜토리얼은 다음과 같이 설명했습니다. ITestListener 합격과 불합격 시험이 있습니다.
- 리스너를 연결하려면 다음을 사용하세요. @청취자 여러분 또는 한 번 등록하세요 테스트ng.xml 스위트룸 전체에 해당됩니다.
- Selenium 4.x 버전이 대체합니다. 이벤트발화 웹드라이버 과 웹드라이버리스너 + 이벤트발화장식기 WebDriver 수준 이벤트용입니다.






