单元测试系列之七测试报告
本框架也提供了生成单元测试报告的功能,使用方法如下:
首先需要使用
@Rule
添加CustomReportRule
:@Rule public CustomReportRule eu = new CustomReportRule(CustomReportManager.getInstance().getReport());复制代码
然后在
@BeforeClass
的方法中初始化自定义报告,初始化时需要传入2个参数,第一个参数是String
类型,表示报告文件保存路径,第二个参数是boolean
类型,表示是否替换旧的报告文件:@BeforeClass public static void beforeClass() { CustomReportManager.getInstance().init("report/report.html", true); }复制代码
注意:传入报告文件路径时需要考虑
android test
和java test
的区别。最后在
@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(); } }复制代码
这样,你就可以自动运行所有的测试代码,并生成测试报告:
用浏览器打开report.html文件,如下所示:
至此,这个封装的框架就基本介绍完了,后面看看有需要补充的就再完善下文章,后面也会把代码托管到github上。
作者:大师傅姑爷
链接:https://juejin.cn/post/7019606149922045959