单元测试系列之七测试报告

737 阅读1分钟

单元测试系列之一开篇

单元测试系列之二如何运行单元测试

单元测试系列之三Junit

单元测试系列之四Mockito

单元测试系列之五Powermock

单元测试系列之六Espresso

单元测试系列之七测试报告

生成测试报告

本框架也提供了生成单元测试报告的功能,使用方法如下:

  1. 首先需要使用@Rule添加CustomReportRule

    @Rule
    public CustomReportRule eu = new CustomReportRule(CustomReportManager.getInstance().getReport());
    
  2. 然后在@BeforeClass的方法中初始化自定义报告,初始化时需要传入2个参数,第一个参数是String类型,表示报告文件保存路径,第二个参数是boolean类型,表示是否替换旧的报告文件:

    @BeforeClass
    public static void beforeClass() {
       CustomReportManager.getInstance().init("report/report.html"true);
    }
    

    注意:传入报告文件路径时需要考虑android testjava test的区别。

  3. 最后在@AfterClass的方法中结束自定义报告的资源:

    @AfterClass
    public static void afterClass() {
       CustomReportManager.getInstance().close();
    }
    

上面提到了有关类如下:

CustomReportManager.class

public class CustomReportManager {
    private static ExtentReports extent;

    private static volatile CustomReportManager mInstance;

    public static CustomReportManager getInstance() {
        if (mInstance == null) {
            synchronized (CustomReportManager.class) {
                mInstance = new CustomReportManager();
            }
        }
        return mInstance;
    }

    private CustomReportManager() {
    }

    public ExtentReports getReport(){
        return extent;
    }

    public void init(String reportPath) {
        extent = new ExtentReports(reportPath, true, NetworkMode.OFFLINE);
    }

    public void addSystemInfo(Map<String, String> data){
        extent.addSystemInfo(data);
    }


    public void close() {
        extent.close();
    }

}

CustomReportRule.class

public class CustomReportRule extends TestWatcher {

    private ExtentReports extent;

    public CustomReportRule(ExtentReports extent) {
        this.extent = extent;
    }

    @Override
    protected void succeeded(Description description) {
        ExtentTest test = extent.startTest(description.getDisplayName(), "-");

        // step log
        test.log(LogStatus.PASS, "-");
        flushReports(extent, test);
    }

    @Override
    protected void failed(Throwable e, Description description) {
        ExtentTest test = extent.startTest(description.getDisplayName(), "Test failed");

        // step log
        test.log(LogStatus.FAIL, e);
        flushReports(extent, test);
    }

    private void flushReports(ExtentReports extent, ExtentTest test){
        // ending test
        extent.endTest(test);
        // writing everything to document
        extent.flush();
    }
}

这样,你就可以自动运行所有的测试代码,并生成测试报告:

截屏2021-10-11 下午3.13.09.png

用浏览器打开report.html文件,如下所示:

截屏2021-10-11 下午3.13.09.png

至此,这个封装的框架就基本介绍完了,后面看看有需要补充的就再完善下文章,后面也会把代码托管到github上。