在 TestNG 中,Listeners(监听器)是什么意思?
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 适用于测试前后,而不是套件前后。它有七个方法。
onStart - 当测试开始时调用此测试方法。
onFinish - 在所有测试完成执行后调用此测试方法。
onTestSuccess - 每当测试成功时调用此测试方法。
onTestFailure - 每当测试失败时调用此测试方法。
onTestSkipped - 每当测试被跳过时调用此测试方法。
onTestFailedButWithinSuccessPercentage - 每当使用 successPercentage 注解的测试方法不成功时调用此测试方法。但在请求的成功百分比内。
iInvokedMethodListener - 其功能与 iTestListener 和 iSuiteListener 类似。唯一的区别是 iInvokedMethodListener 适用于每个测试方法的前后。它有两个方法。
afterInvocation - 在每个测试方法之后调用。
beforeInvocation - 在每个测试方法之前调用。
示例
使用 iTestListener。
package tutorialspoint; import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; //ITestListener interface which implements Testng listeners public class Listener implements ITestListener { @Override public void onTestStart(ITestResult result) { // TODO Auto-generated method stub } @Override public void onTestSuccess(ITestResult result) { // TODO Auto-generated method stub } @Override public void onTestFailure(ITestResult result) { // TODO Auto-generated method stub //screenshot code System.out.println ("Failed test case name" + result.getName()); } @Override public void onTestSkipped(ITestResult result) { // TODO Auto-generated method stub } @Override public void onTestFailedButWithinSuccessPercentage(ITestResult result) { // TODO Auto-generated method stub } @Override public void onStart(ITestContext context) { // TODO Auto-generated method stub } @Override public void onFinish(ITestContext context) { // TODO Auto-generated method stub } }
在 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; // This code will implement TestNG listeners @Listeners(tutorialspoint.Listener.class) public class TestCase { @Test public void Login() { System.out.println("Login is successful"); } }