单元测试系列之如何生成测试报告

发表于:2024-3-08 09:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:大师傅姑爷    来源:稀土掘金

  生成测试报告
  本框架也提供了生成单元测试报告的功能,使用方法如下:
  首先需要使用@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上。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号