一键测试生成单元测试报告testNG+BeautifulReport

本文介绍了如何结合TestNG和BeautifulReport来搭建单元测试报告系统。通过配置pom,设置监听器,编写测试用例,并创建自定义的HTML模板,最终实现一键生成详细的测试报告。在项目执行完成后,会在指定目录下生成可供查看的HTML测试报告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.背景

1.公司为规范团队的开发,涉及到组下员工的代码开发规范,日志打印规范,预警机制等。其中一项是规范团队的开发的单元测试。为了方便核检查小组开发需求的单元测试而整合的单元测试报告,测试框架用的测试框架为TESTNG,模板用的是BeautifulReport。先看一下展示的效果
在这里插入图片描述

二.搭建

1.使用的pom

这里我根据个人需求,把mongodb的包排除了,是因为extentreports包里面的一些异常信息截图功能会使用到mongodb,项目因为没有用到mongodb,这里不排除单侧会抛异常,但不影响使用。

<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>
			<exclusions>
				<exclusion>
					<groupId>org.mongodb</groupId>
					<artifactId>mongodb-driver</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

2.监听器

我在项目下src/test/java/com/abcnull/listener添加了一个测试报告监听器类 TestReportListener,它继承自 testng 依赖包中的 IReporter。TestReportListener 中其实没用到太多 extentreports 依赖中的 API,只有 Gson 类来自 extentreports 依赖中,基本还是靠着第三步中写好的 BeautifulReport 型式的 html 模板,代码如下
新建监听器
监听器代码如下,代码可根据个人需求自行继续编写优化



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 = "单元测试报告";

    @Override
    public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
        List<ITestResult> list = new ArrayList<ITestResult>();
        for (ISuite suite : suites) {
            Map<String, ISuiteResult> suiteResults = suite.getResults();
            for (ISuiteResult suiteResult : suiteResults.values()) {
                ITestContext testContext = suiteResult.getTestContext();
                IResultMap passedTests = 
单元测试报告 版本:V1.3 文 档 编 号 保 密 等 级 作 者 最后修改日期 审 核 人 最后审批日期 批 准 人 最后批准日期 修订记录 日期 版本 修订说明 修订人 目 录 1 简介 2 1.1 目的 2 1.2 背景 2 1.3 范围 2 2 测试用例清单 2 3 功能测试分析 2 4 边界测试分析 2 5 覆盖率分析 2 6 内存使用分析 2 7 典型缺陷记录 3 7.1 缺陷1 3 7.1.1 表现 3 7.1.2 原因 3 7.1.3 方案 3 8 测试数据分析 3 8.1 测试有效性分析 3 8.2 测试效率分析 3 9 产品质量分析 4 10 测试结论 4 简介 目的 【描述该单元测试报告的目的。】 背景 【描述单元测试报告的背景,单元测试活动目的。如无特殊背景信息,可裁剪。】 范围 【说明该单元测试报告在整个项目周期的适用范围】 测试用例清单 模块 目标类 级别 用例类 用例描述 执行结果 备注 【被测的代码类】 【代码级别】 【Junit测试类1】 【意图描述】 【P/F】 【Junit测试类2】 功能测试分析 边界测试分析 覆盖率分析 目标类 级别 方法覆盖率 行覆盖率 备注 【被测的代码类】 【代码级别】 内存使用分析 典型缺陷记录 记录单元测试中所发现的典型缺陷或常见缺陷。供再次发现同类问题时,作为参考使用。 缺陷1 表现 【缺陷表现描述】 原因 【缺陷产生原因分析描述】 方案 【解决方案描述】 测试有效性分析 【统计实际发现的缺陷数据,分析与计划值产生偏差的原因,结合《项目量化管理计划》定义的阈值,确定是否采取相关措施】 计划发现缺陷数 致命 严重 一般 实际发现缺陷数 偏差分析 对策或调整措施 产品质量分析 【结合上述数据和信息,对本次测试的项目、产品的本身质量进行分析、评价和总结】 测试结论  【描述测试是否达到测试计划的目的,是否满足单元测试的结束条件。】
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值