TestNG 中的监听器是什么意思?

testngframeworkjava programming 更新于 2026/1/29 23:08:17

TestNG 监听器能够监听特定事件。它本质上是一个可以改变系统性质的接口。TestNG 监听器用于日志记录和创建报告。

Selenium 中有两个监听器。它们列在下面 −

  • TestNG 监听器。

  • WebDriver 监听器。

可以使用监听器配置 TestNG,从而更改 TestNG 的默认行为。TestNG 监听器被称为 iTestListener(TestNG 的一个接口)。一个 Java 类可以实现 iTestListeners 接口,并同时重写其方法。这些方法中的每一个都会触发一个事件。

TestNG 监听器的功能如下所示。

  • iSuiteListener − 它包含 onStart() 和 onFinish() 方法。当一个 Java 类实现此监听器时,TestNG 会分别在 TestNG 套件的开始和结束时调用 onStart() 和 onFinish() 方法。因此,在触发测试套件执行之前,TestNG 会选择先决条件 onStart() 测试方法执行。同样,在测试套件执行之后,TestNG 会选择后置条件 onFinish() 测试方法。

  • iTestListener − 它的功能与 iSuiteListener 类似。唯一的区别是 iTestListener 可以在测试之前和之后使用,而 Suite 则不行。它有七个方法。

  • onStart −测试开始时会调用此测试方法。

  • onFinish − 所有测试执行完成后会调用此测试方法。

  • onTestSuccess − 每次测试成功时都会调用此测试方法。

  • onTestFailure − 每次测试失败时都会调用此测试方法。

  • onTestSkipped − 每次测试被绕过时都会调用此测试方法。

  • onTestFailedButWithinSuccessPercentage − 每次使用 successPercentage 注解的测试方法未成功,但在请求的成功百分比范围内时,都会调用此测试方法。

  • iInvokedMethodListener −其功能与 iTestListener 和 iSuiteListener 类似。唯一的区别在于,iInvokedMethodListener 可以在每个测试方法之前和之后调用。它有两个方法。

  • afterInvocation − 在每个测试方法之后调用。

  • beforeInvocation − 在每个测试方法之前调用。

示例

With iTestListener.

package tutorialspoint;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
//ITestListener 接口,实现 Testng 监听器
public class Listener implements ITestListener {
   @Override
   public void onTestStart(ITestResult result) {
      // TODO 自动生成的方法存根
   }
   @Override
   public void onTestSuccess(ITestResult result) {
      // TODO 自动生成的方法存根
   }
   @Override
   public void onTestFailure(ITestResult result) {
      // TODO 自动生成的方法存根
      // 代码截图
      System.out.println
      ("失败的测试用例名称" + result.getName());
   }
   @Override
   public void onTestSkipped(ITestResult result) {
      // TODO 自动生成的方法存根
   }
   @Override
   public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
      // TODO 自动生成的方法存根
   }
   @Override
   public void onStart(ITestContext context) {
      // TODO 自动生成的方法存根
   }
   @Override
   public void onFinish(ITestContext context) {
      // TODO 自动生成的方法存根
   }
}

在 Listener Java 类中,onTestFailure() 将借助 result.getName() 方法打印失败的测试方法的名称。

我们可以通过两种方式将此 Listener 类添加到 Java 类文件中。

  • 在 testng xml 文件中使用 Listener 标签。

  • 在测试用例类中实现 Listener。

示例

在 testng xml 文件中使用 Listener 标签。


<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Tutorialspoint Test">
   <listeners>
      <listener class-name="tutorialspoint.Listener"/>
   </listeners>
   <test name = "Test Cycle 1">
      <classes>
         <class name = "TestQA" />
      </classes>
   </test>
</suite>

在 <listeners> 标签内,我们指定了 Listener 类的路径。

示例

通过为测试类实现 TestNG 监听器。

package TestTutorials;
import org.testng.annotations.Test;
// 此代码将实现 TestNG 监听器
@Listeners(tutorialspoint.Listener.class)
public class TestCase {
   @Test
   public void Login() {
      System.out.println("Login is successful");
   }
}

相关文章