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;
    }
}
View Code

相关文章: