前言
工作中会对java的类进行接口测试,选用的testNG测试框架,但是testNG自带的测试报告实在是不美观,且功能较差,便选用reportNG来生成测试报告。不过reportNG并不支持中文,且生成的报告页面也需再优化一点,但是reportNG目前已不再更新,最后的版本为1.1.4版本,所以很多人选择修改reportNG代码,定制reportNG。自己在网上也搜了不少资料去修改reportNG源代码,但最后卡在生成的jar包无法用,然后花了上午一小会时间研究了下,搞定打包。看到网上很多人在其他人的文章下留言问怎么打包reportNG,所以这里就分享下。
定制reportNG
- 下载源码
首先去github下载reportNG的源码到本地。
https://github.com/dwdyer/reportng
解压后,源码文件目录如下:
reportng-master/
├── CHANGELOG.txt
├── LICENSE.txt
├── NOTICE.txt
├── README.txt
├── build.xml
├── etc
│ ├── intellij
│ ├── sample-testng.xml
│ ├── sample2-testng.xml
│ └── testng.xml
├── lib
│ └── compiletime
└── reportng
├── lib
├── pom.xml
├── reportng.iml
└── src
7 directories, 10 files
我们要修改的,仅仅是pom.xml所在的reportng目录下的maven工程。
- 修改maven工程目录
源码中的maven工程目录如下:
reportng/
├── lib
│ └── runtime
│ └── velocity-dep-1.4.jar
├── pom.xml
├── reportng.iml
└── src
├── css
│ └── hudsonesque.css
└── java
├── main
├── resources
└── test
8 directories, 4 files
可见,main目录处于/src/java目录下。而maven打包是编译和打包main目录下的java类文件,要求的目录格式为/src/main/java,所以改变源码的目录格式为如下格式:
reportng/
├── lib
│ └── runtime
│ └── velocity-dep-1.4.jar
├── pom.xml
├── reportng.iml
└── src
├── main
│ ├── css
│ ├── java
│ └── resources
└── test
└── org
9 directories, 3 files
-
解决中文乱码
修改AbstractReporter类中的generateFile方法如下:
解决中文乱码
其他可定制修改处,可自行网上搜资料,这里不再写。
打包jar包
- 修改pom文件:
设置版本号,这里设置为1.1.5:
<modelVersion>4.0.0</modelVersion>
<name>ReportNG</name>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.5</version>
<packaging>jar</packaging>
<url>https://reportng.dev.java.net/</url>
因为原文件中的testng版本号太低了,编译打包会失败,所以修改为较高的版本,这里设置为6.10版本:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
-
mvn package生成jar包
IDEA中maven package
生成jar包入如下:
lilinfeng@lilinfengdeMacBook-Air:~/llf_code/llf_java/reportng-master/reportng/target$ ll
total 72
drwxr-xr-x 3 lilinfeng staff 102 1 23 23:50 classes
drwxr-xr-x 3 lilinfeng staff 102 1 23 23:50 maven-archiver
drwxr-xr-x 3 lilinfeng staff 102 1 23 23:50 maven-status
-rw-r--r-- 1 lilinfeng staff 35906 1 23 23:50 reportng-1.1.5.jar
引用生成的reportNG jar包
- 新建maven工程
工程lib目录下放置上一步生成的jar包:
IvanliTest/
├── IvanliTest.iml
├── lib
│ └── reportng-1.1.5.jar
├── pom.xml
├── src
│ ├── main
│ └── test
└── target
├── classes
├── generated-test-sources
├── maven-status
├── surefire-reports
└── test-classes
10 directories, 3 files
pom文件配置如下:
<?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>Hello</groupId>
<artifactId>IvanliTest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.5</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/reportng-1.1.5.jar</systemPath>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 添加插件,添加ReportNg的监听器,修改最后的TestNg的报告 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
<property>
<name>listener</name>
<value>org.uncommons.reportng.HTMLReporter,
org.uncommons.reportng.JUnitXMLReporter</value>
</property>
</properties>
<workingDirectory>target/</workingDirectory>
<suiteXmlFiles>
<!--<suiteXmlFile>testng.xml</suiteXmlFile>-->
</suiteXmlFiles>
<forkMode>never</forkMode>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<encoding>utf-8</encoding>
<fork>true</fork>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
测试代码如下:
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test;
public class testOne {
@Test
public void testCase1(){
String exp = "1";
String act = "1";
Reporter.log("expect: " + exp + ", actual: " + act);
Assert.assertEquals(exp, act);
}
@Test
public void testCase2(){
String exp = "1";
String act = "2";
Reporter.log("expect: " + exp + ", actual: " + act);
Assert.assertEquals(exp, act);
}
}
-
执行测试
mvn -Dtest=testOne test
生成报告如下:
overview
output
可见,报告已支持中文,即我们生成的reportNG jar包是可用的。
希望本篇生成jar包的说明可以帮助一些想定制reportNG的同学们。