TestNG 中的监听器是什么意思?
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");
}
}

