博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExtentReports 结合 TestNg 生成自动化 html 报告 (支持多 suite)
阅读量:7061 次
发布时间:2019-06-28

本文共 2556 字,大约阅读时间需要 8 分钟。

转载:https://testerhome.com/topics/8134

重要说明:报告监听器源码修复一些bug,不再此处更新代码,最新代码可以到github查看

前几天分享了,用的是ReportNg来生成报告, 同学推荐了下extentreport,这几天看了下了解下,做个分享,准备引入到框架中,废话不多说,开始。

说明

  1. 使用TestNg的Report监听器,不嵌入具体执行代码,仅需在配置文件中新增监听器即可。
  2. 报告文件生成路径为test-output/index.html。(可在代码中修改)
  3. 一个suite且一个test配置的情况下,会将执行的用例(method)作为一级节点生成报告。
  4. 一个suite且多个test配置的情况下,会将每个test配置作为一级节点,执行用例(method)为对应的子节点
  5. 多个suite的情况下,将suite作为一级节点,test配置为二级节点,执行用例(method)为对应的三级节点。(如果suite下只有一个test配置,则不会生成二级节点,直接把执行的用例(method)生成在第二节点中)
  6. 代码中使用Report.log("xxx")会将log展示在报告中对应的执行用例(method)中。
  7. 自动将suite以及test配置的名字作为执行用例(method)的标签。
  8. 如果用例(method)有参数,则会将调用参数的toString()方法作为用例(method)的名字在报告中显示。
  9. 已经对执行用例进行按时间排序。(但是多个suite按时间的排序不知道咋处理,求指教。)

代码

pom引用:

com.aventstack
extentreports
3.0.3

创建TestNg的Report监听器:

import com.aventstack.extentreports.ExtentReports;import com.aventstack.extentreports.ExtentTest; import com.aventstack.extentreports.Status; import com.aventstack.extentreports.model.TestAttribute; import com.aventstack.extentreports.reporter.ExtentHtmlReporter; import com.aventstack.extentreports.reporter.configuration.ChartLocation; import com.aventstack.extentreports.reporter.configuration.Theme; import org.testng.*; import org.testng.xml.XmlSuite; import java.io.File; import java.util.*; /** * Created by chenwx on 17/3/24. */ public class ExtentTestNGIReporterListener implements IReporter { //生成的路径以及文件名 private static final String OUTPUT_FOLDER = "test-output/"; private static final String FILE_NAME = "index.html"; private ExtentReports extent; @Override public void generateReport(List
xmlSuites, List
suites, String outputDirectory) { init(); boolean createSuiteNode = false; if(suites.size()>1){ createSuiteNode=true; } for (ISuite suite : suites) { Map
result = suite.getResults(); //如果suite里面没有任何用例,直接跳过,不在报告里生成 if(result.size()==0){ continue; } //统计suite下的成功、失败、跳过的总用例数 int suiteFailSize=0; int suitePassSize=0; int suiteSkipSize=0; ExtentTest suiteTest=null; //存在多个suite的情况下,在报告中将同一个一个suite的测试结果归为一类,创建一级节点。 if(createSuiteNode){ suiteTest = extent.createTest(suite.getName()).assignCategory(suite.getName()); } boolean createSuiteResultNode = false; if(result.size()>1){ createSuiteResultNode=true; } for (ISuiteResult r : result.values()) { ExtentTest resultNode; ITestContext context = r.getTestContext(); if(createSuiteResultNode){ //没有创建suite的情况下,将在SuiteResult的创建为一级节点,否则创建为suite的一个子节点。 if( null == suiteTest){ resultNode = extent.createTest(r.getTestContext().getName()); }else{ resultNode = suiteTest
你可能感兴趣的文章
JavaScript 开发的45个技巧
查看>>
atitit.跨平台gui 概览
查看>>
后台收集
查看>>
java并发集合知识点(二)
查看>>
Struts2与Spring整合
查看>>
自己定义struts2中action类型转换器
查看>>
centos7 ping: www.baidu.com: Name or service not known
查看>>
运动物体检测论文(2)
查看>>
究竟是什么?让程序员们怒了
查看>>
读书笔记:《黑客与画家》之设计者的品味
查看>>
新浪微博2.5.1 for Android 去广告
查看>>
直接修改class文件内容即使是文本会导致App异常,正确方式是修改java再用生成的class替换掉原有的class...
查看>>
图像处理之基础---图像缩放中的双线性插值c实现
查看>>
svn 安装与设置
查看>>
《sqoop实现hdfs中的数据导出至mysql数据库》
查看>>
hibernate简单注释(一)
查看>>
ABP框架 - 日志
查看>>
新浪微博客户端(49)-删除输入的Emotion表情
查看>>
新浪微博客户端(62)-计算某个文件或文件夹的大小
查看>>
(原)Ring loss Convex Feature Normalization for Face Recognition
查看>>