文章目录
我在做 java 的 WebUI 自动化测试的时候,会要求生成测试报告,用 testng 自带的测试报告,样式太丑了,因此需要使用其他的模板样式,这里我考虑使用 BeautifulReport 报告模板样式,其实对于 python 来说可以直接 pip BeautifulReport 来做,当然这里我介绍的是 java 项目
这里展示一下 BeautifulReport 模板样式
第一步:maven 配置依赖
WebUI 项目中其实 selenium 依赖 testng 依赖都应该有,下面这个 extentreports 是用来做定制模板的依赖
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
</dependency>
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.0.7</version>
</dependency>
第二步:编写测试报告监听器类
我在项目下src/test/java/com/abcnull/listener
添加了一个测试报告监听器类 TestReportListener,它继承自 testng 依赖包中的 IReporter。TestReportListener 中其实没用到太多 extentreports 依赖中的 API,只有 Gson 类来自 extentreports 依赖中,基本还是靠着第三步中写好的 BeautifulReport 型式的 html 模板,代码如下:
package com.abcnull.listener;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.testng.*;
import org.testng.xml.XmlSuite;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author abcnull
* @version 1.0.0
* @date 2020/1/26
*/
public class TestReportListener implements IReporter {
// 日期格式化
private static Date date = new Date();
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd,HH点mm分ss秒");
private static String reportdate = simpleDateFormat.format(date);
private static String getReportName = "自动化测试报告-" + reportdate;
// 定义html模板所在路径
private String templatePath = this.getClass().getResource("/").getPath() + "report/template.html";
// 定义报告生成的路径
private String reportDirPath = System.getProperty("user.dir") + File.separator + "target" + File.separator + "test-output" + File.separator + "report";
private String reportPath = reportDirPath + File.separator + getReportName + ".html";
private String name = "DemoTest";
private int testsPass;
private int testsFail;
private int testsSkip;
private String beginTime;
private long totalTime;
private String project = "WebUI自动化测试报告";
@Override
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
List<ITestResult> list = new ArrayList<ITestResult>();
for (