测试结果报告ExtentReports框架的配置、整合,依赖jar包、乱码问题的解决

本文介绍了如何通过ExtentReports框架为TestNG创建更直观的测试报告,解决了Maven整合ExtentTestNGIReporterListener时的依赖缺失问题以及中文乱码的解决方案。通过配置pom.xml、编写测试类、定制监听器以及设置Maven settings.xml,最终成功生成了带有详细信息和美观展示的测试报告。

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

TestNG自带的测试报告的显示效果简洁但不够直观,缺少了一些美感,本文介绍了ExtentReports插件来生成美观的测试报告,并解决Maven整合监听器ExtentTestNGIReporterListener中com.aventstack.extentreports依赖包的缺失,以及监听器生成报告中文乱码的问题。

TestNG自带的测试报告,index.html文件

在这里插入图片描述

首先新建Maven工程,编辑pom.xml
这里解决依赖包的问题,Maven会自动下载jar包到Maven仓库

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.course.code</groupId>
  <artifactId>Chapter</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <modules>
  	<module>Chapter5</module>
  	<module>Chapter6</module>
  </modules>
  
  <packaging>pom</packaging>
  
  <dependencies>
		<dependency>
			<groupId>com.relevantcodes</groupId>
			<artifactId>extentreports</artifactId>
			<version>2.41.1</version>
		</dependency>

		<dependency>
			<groupId>com.vimalselvam</groupId>
			<artifactId>testng-extentsreport</artifactId>
			<version>1.3.1</version>
		</dependency>

		<dependency>
			<groupId>com.aventstack</groupId>
			<artifactId>extentreports</artifactId>
			<version>3.1.3</version>
		</dependency>

	</dependencies>
  
  
</project>

新建类TestMethodsDemo ,有2个成功的方法,1个运行异常失败的方法

package com.tester.extend.demo;

import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test;

public class TestMethodsDemo {
	@Test
	public void test1() {
		Assert.assertEquals("aaa", "aaa");
	}
	
	@Test
	public void test2() {
		Assert.assertEquals(1, 1);
	}
	
	@Test
	public void logDemo() {
		Reporter.log("自己写的日志");
		throw new RuntimeException("自己抛的异常");
	}
}

新建监听器,复制以下代码
在这里解决中文显示乱码的问题

package com.tester.extend.demo;
 
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.ResourceCDN;
import com.aventstack.extentreports.Status;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import com.aventstack.extentreports.reporter.configuration.ChartLocation;
import com.aventstack.extentreports.reporter.configuration.Theme;
import org.testng.*;
 
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
public class ExtentTestNGIReporterListener implements IReporter {

	//测试报告导出到test-output文件夹下的Extent.html
    private static final String OUTPUT_FOLDER = "test-output/";
    private static final String FILE_NAME = "Extent.html";
 
    private ExtentReports extent;
 
    public void generateReport(List xmlSuites, List suites, String outputDirectory) {
        init();
        for (Object suite : suites) {
            Map result = ((ISuite) suite).getResults();
            for (Object r : result.values()) {
                ITestContext context = ((ISuiteResult) r).getTestContext();
                buildTestNodes(context.getFailedTests(), Status.FAIL);
                buildTestNodes(context.getSkippedTests(), Status.SKIP);
                buildTestNodes(context.getPassedTests(), Status.PASS);
 
            }
        }
 
        for (String s : Reporter.getOutput()) {
            extent.setTestRunnerOutput(s);
        }
 
        extent.flush();
    }
 
    private void init() {
        ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);
        htmlReporter.config().setDocumentTitle("ExtentReports - Created by TestNG Listener");
        htmlReporter.config().setReportName("ExtentReports - Created by TestNG Listener");
        htmlReporter.config().setTestViewChartLocation(ChartLocation.BOTTOM);
        htmlReporter.config().setTheme(Theme.STANDARD);
        //解决测试报告中文乱码问题
        htmlReporter.config().setEncoding("gbk");
        //设置静态文件的DNS
        //解决国内www.rawgit.com访问不了的情况,无法加载css文件导致网页加载一直转圈
        htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
 
        extent = new ExtentReports();
        extent.attachReporter(htmlReporter);
        extent.setReportUsesManualConfiguration(true);
    }
 
    private void buildTestNodes(IResultMap tests, Status status) {
        ExtentTest test;
 
        if (tests.size() > 0) {
            for (ITestResult result : tests.getAllResults()) {
                test = extent.createTest(result.getMethod().getMethodName());
 
                for (String group : result.getMethod().getGroups())
                    test.assignCategory(group);
 
                if (result.getThrowable() != null) {
                    test.log(status, result.getThrowable());
                }
                else {
                    test.log(status, "Test " + status.toString().toLowerCase() + "ed");
                }
 
                test.getModel().setStartTime(getTime(result.getStartMillis()));
                test.getModel().setEndTime(getTime(result.getEndMillis()));
            }
        }
    }
 
    private Date getTime(long millis) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(millis);
        return calendar.getTime();
    }
}

新建Maven Module,命名为Chapter6,新建xml配置文件settings.xml

<?xml version="1.0" encoding="UTF-8"?>

<suite name="MySuite">
	<test name="MyTestModule">
		<classes>
			<class name="com.tester.extend.demo.TestMethodsDemo">
				<methods>
					<include name="test1"/>
					<include name="test2"/>
					<include name="logDemo"/>
				</methods>
			</class>
		</classes>
	</test>
	
	<listeners>
		<listener class-name="com.tester.extend.demo.ExtentTestNGIReporterListener"/>
	</listeners>
	
</suite>

最后运行settIngs.xml即可得到输出的测试报告,我用的是Eclipse,所以只能去文件夹找到导出的Exent.html,打开就是这样

ExtentReports生成的测试报告

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值