2020-03-10
1 通过实现ITestListener的方法添加Reporter log
1.1 MyTestListener设置
1.2 输出结果
2 TestNG与ExtentReporter集成
2.1 项目结构
2.2 MyExtentReportListener设置
2.3 单多Suite、Test组合测试
2.3.1 单Suite单Test
2.3.2 单Suite多Test
2.3.3 多Suite
源代码:interface-test-framework.zip
1 通过实现ITestListener的方法添加Reporter log
TestNG的Listener列表
TestNG提供了一组预定义的Listener Java接口,这些接口全部继承自TestNG的 ITestNGListener接口。用户创建这些接口的实现类,并把它们加入到 TestNG 中,TestNG便会在测试运行的不同时刻调用这些类中的接口方法:
- IExecutionListener 监听TestNG运行的启动和停止。
- IAnnotationTransformer 注解转换器,用于TestNG测试类中的注解。
- ISuiteListener 测试套件监听器,监听测试套件的启动和停止。
- ITestListener 测试方法执行监听。
- IConfigurationListener 监听配置方法相关的接口。
- IMethodInterceptor 拦截器,调整测试方法的执行顺序。
- IInvokedMethodListener 测试方法拦截监听,用于获取被TestNG调用的在Method的Before 和After方法监听器。该方法只会被配置和测试方法调用。
- IHookable 若测试类实现了该接口,当@Test方法被发现时,它的run()方法将会被调用来替代@Test方法。这个测试方法通常在IHookCallBack的callback之上调用,比较适用于需要JASS授权的测试类。
- IReporter 实现该接口可以生成一份测试报告。
本文将着重介绍最常用到的两个Listener ITestListener与Ireporter接口。
1.1 MyTestListener设置
通过实现ITestListener的方法,添加Reporter.log
MyTestListener.java
import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; import org.testng.Reporter; public class MyTestListener implements ITestListener { //用例执行结束后,用例执行成功时调用 public void onTestSuccess(ITestResult tr) { logTestEnd(tr, "Success"); } //用例执行结束后,用例执行失败时调用 public void onTestFailure(ITestResult tr) { logTestEnd(tr, "Failed"); } //用例执行结束后,用例执行skip时调用 public void onTestSkipped(ITestResult tr) { logTestEnd(tr, "Skipped"); } //每次方法失败但是已经使用successPercentage进行注释时调用,并且此失败仍保留在请求的成功百分比之内。 public void onTestFailedButWithinSuccessPercentage(ITestResult tr) { logTestEnd(tr, "FailedButWithinSuccessPercentage"); } //每次调用测试@Test之前调用 public void onTestStart(ITestResult result) { logTestStart(result); } //在测试类被实例化之后调用,并在调用任何配置方法之前调用。 public void onStart(ITestContext context) { return; } //在所有测试运行之后调用,并且所有的配置方法都被调用 public void onFinish(ITestContext context) { return; } // 在用例执行结束时,打印用例的执行结果信息 protected void logTestEnd(ITestResult tr, String result) { Reporter.log(String.format("-------------Result: %s-------------", result), true); } // 在用例开始时,打印用例的一些信息,比如@Test对应的方法名,用例的描述等等 protected void logTestStart(ITestResult tr) { Reporter.log(String.format("-------------Run: %s.%s---------------", tr.getTestClass().getName(), tr.getMethod().getMethodName()), true); Reporter.log(String.format("用例描述: %s, 优先级: %s", tr.getMethod().getDescription(), tr.getMethod().getPriority()),true); return; } }