LHJ's Blog

extentreports

📄 JUnit生成测试报告

在实习的时候有个需求就是,在执行完单元测试以后可以生成一个测试报告,然后把报告发送给相关的负责人。当时想的是这JUnit还能生成测试报告?后面搜了一下还真有🤣

🐜 使用Ant生成测试报告

🕸 首先新建一个普通的Maven工程,在src/resources下添加build.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?xml version="1.0" encoding="utf-8"?>

<project name="project" default="junit">
<property name="run.classpath" value="bin"/>
<property name="run.srcpath" value="src"/>
<property name="test.xml" value="xml"/>
<property name="test.report" value="report"/>
<property name="lib.dir" value="lib"/>

<path id="compile.path">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${run.classpath}"/>
</path>

<target name="init">
<delete dir="${test.report}"/>
<mkdir dir="${test.report}"/>
<delete dir="${test.xml}"/>
<mkdir dir="${test.xml}"/>
</target>

<target name="compile" depends="init">
<javac destdir="${run.classpath}" srcdir="${run.srcpath}" classpathref="compile.path" includeantruntime="on"/>
</target>

<!--Junit task-->
<target name="junit" depends="compile">
<junit printsummary="true">
<classpath refid="compile.path"/>
<formatter type="xml"/>
<!--<test name="cn.com.vp4.hup.testcase.TestCase_AudioFocus"/> -->
<batchtest todir="${test.xml}">
<fileset dir="${run.classpath}">
<include name="**/*Test.class"/>
</fileset>
</batchtest>
</junit>
<junitreport todir="${test.xml}">
<fileset dir="${test.xml}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${test.report}"/>
</junitreport>
</target>
</project>

🕸 接着编写一个测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.longhujing.report.ant;

import org.junit.Assert;
import org.junit.Test;

public class AntReportTest {

@Test
public void successTest(){
Assert.assertEquals(1, 1);
}

@Test
public void failedTest(){
Assert.assertEquals(1, 2);
}

}

🕸 然后你需要在项目目录下创建两个文件夹libbin,然后把junit-4.12.jarhamcrest-core-1.3.jar放到lib目录下,因为Ant进行测试的时候会从这个目录读取需要的jar包。

🕸 在IDEA的右侧有一个Ant的选项,打开以后把build.xml文件拖过去即可

ant-1

ant-2

🕸 双击junit就会在项目的report文件夹下生成测试报告

ant-3

ant-4

🎉 使用extentreports生成测试报告

Ant生成的测试报告不太好看,太简陋了。找了一个比Ant炫的多的报告生成方式(其实原理就是获取到每一个测试用例的执行情况,然后再写入到HTML模板里面就好了,很简单)

💧 还是先新建一个普通的Maven工程,引入需要的依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.41.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

🎄 写一个类来监视测试情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.longhujing.report.extentreports;

import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;

/**
* @author longhujing
*/
public class ReportTestWatcher extends TestWatcher {

private ExtentReports extentReports;

public ReportTestWatcher(ExtentReports extentReports){
this.extentReports = extentReports;
}

/**
* 监视成功的测试用例
*
* @param description 测试用例描述
*/
@Override
protected void succeeded(Description description) {
ExtentTest test = extentReports.startTest(description.getDisplayName(), "-");
test.log(LogStatus.PASS, "-");
extentReports.endTest(test);
extentReports.flush();
}

/**
* 监视失败的测试用例
*
* @param e 异常
* @param description 测试用例描述
*/
@Override
protected void failed(Throwable e, Description description) {
ExtentTest test = extentReports.startTest(description.getDisplayName(), "-");
test.log(LogStatus.FAIL, e);
extentReports.endTest(test);
extentReports.flush();
}

}

🔥 准备一个测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.longhujing.report.extentreports;

import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.NetworkMode;
import org.junit.*;

public class ExtentReportTest {

private static ExtentReports extentReports = null;

@BeforeClass
public static void init(){
String path = "reports/report.html";
extentReports = new ExtentReports(path, true, NetworkMode.OFFLINE);
}

@AfterClass
public static void generateReport(){
extentReports.close();
}

@Rule
public ReportTestWatcher reportTestWatcher = new ReportTestWatcher(extentReports);

@Test
public void successTest(){
Assert.assertEquals(1, 1);
}

@Test
public void failedTest(){
Assert.assertEquals(1, 2);
}

}

执行测试后生成的测试报告如下

extentreports


 评论