码迷,mamicode.com
首页 > 其他好文 > 详细

测试报告ExtentReport改进

时间:2019-03-01 15:40:49      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:mave   功能   rri   get   测试框架   文章   protoc   声明   新建   

具体步骤
Step-1:添加 Maven 依赖包
引入pom.xml


<!--引入extentreports相关包-->
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.1.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.vimalselvam</groupId>
<artifactId>testng-extentsreport</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.41.2</version>
</dependency>
<!--引入testng测试框架-->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>compile</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
Step-2:重写 ExtentTestNgFormatter 类
主要基于以下两项原因:

支持报告中展示更多状态类型的测试结果,例如:成功、失败、警告、跳过等。
因为不支持cdn.rawgit.com访问,故替css访问方式。
创建 MyExtentTestNgFormatter 类
下载 ExtentReportes 源码,找到 ExtentTestNgFormatter 类,Listener 目录下创建 MyExtentTestNgFormatter.java 类直接继承 ExtentTestNgFormatter 类。

public class MyExtentTestNgFormatter extends ExtentTestNgFormatter {
1
解决CDN无法访问
构造方法加入

htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
1
具体代码如下:

ublic MyExtentTestNgFormatter() {
setInstance(this);
testRunnerOutput = new ArrayList<>();
String reportPathStr = System.getProperty("reportPath");
File reportPath;

try {
reportPath = new File(reportPathStr);
} catch (NullPointerException e) {
reportPath = new File(TestNG.DEFAULT_OUTPUTDIR);
}

if (!reportPath.exists()) {
if (!reportPath.mkdirs()) {
throw new RuntimeException("Failed to create output run directory");
}
}

File reportFile = new File(reportPath, "report.html");
File emailReportFile = new File(reportPath, "emailable-report.html");

htmlReporter = new ExtentHtmlReporter(reportFile);
EmailReporter emailReporter = new EmailReporter(emailReportFile);
reporter = new ExtentReports();
// 如果cdn.rawgit.com访问不了,可以设置为:ResourceCDN.EXTENTREPORTS或者ResourceCDN.GITHUB
htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
reporter.attachReporter(htmlReporter, emailReporter);
}
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
重写 onstart 方法
重写onstart 方法功能。新建一个类名为MyReporter,一个静态ExtentTest的引用。

Listener 包下 MyReporter.java

public class MyReporter {
public static ExtentTest report;
}
1
2
3
MyExtentTestNgFormatter.java

public void onStart(ITestContext iTestContext) {
ISuite iSuite = iTestContext.getSuite();
ExtentTest suite = (ExtentTest) iSuite.getAttribute(SUITE_ATTR);
ExtentTest testContext = suite.createNode(iTestContext.getName());
// 将MyReporter.report静态引用赋值为testContext。
// testContext是@Test每个测试用例时需要的。report.log可以跟随具体的测试用例。另请查阅源码。
MyReporter.report = testContext;
iTestContext.setAttribute("testContext", testContext);
}
1
2
3
4
5
6
7
8
9
自定义配置
测试报告默认是在工程根目录下创建 test-output/ 文件夹下,名为report.html、emailable-report.html。可根据各自需求在构造方法中修改。

public MyExtentTestNgFormatter() {
setInstance(this);
testRunnerOutput = new ArrayList<>();
// reportPath报告路径
String reportPathStr = System.getProperty("reportPath");
File reportPath;

try {
reportPath = new File(reportPathStr);
} catch (NullPointerException e) {
reportPath = new File(TestNG.DEFAULT_OUTPUTDIR);
}

if (!reportPath.exists()) {
if (!reportPath.mkdirs()) {
throw new RuntimeException("Failed to create output run directory");
}
}
// 报告名report.html
File reportFile = new File(reportPath, "report.html");
// 邮件报告名emailable-report.html
File emailReportFile = new File(reportPath, "emailable-report.html");

htmlReporter = new ExtentHtmlReporter(reportFile);
EmailReporter emailReporter = new EmailReporter(emailReportFile);
reporter = new ExtentReports();
reporter.attachReporter(htmlReporter, emailReporter);
}
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
report.log
report.log 支持多种玩法

// 根据状态不同添加报告。型如警告
MyReporter.report.log(Status.WARNING, "接口耗时(ms):" + String.valueOf(time));
1
2
直接从TestClass 中运行时会报 MyReporter.report 的空指针错误,需做判空处理。

Step-3:配置监听
在测试集合 testng.xml 文件中导入 Listener 监听类。

<listeners>
<listener class-name="com.zuozewei.extentreportdemo.listener.MyExtentTestNgFormatter"/>
</listeners>
1
2
3
Step-4:配置报告
extent reporters支持报告的配置。目前支持的配置内容有title、主题等。
先在src/resources/目录下添加 config/report/extent-config.xml。

<?xml version="1.0" encoding="UTF-8"?>
<extentreports>
<configuration>
<timeStampFormat>yyyy-MM-dd HH:mm:ss</timeStampFormat>
<!-- report theme -->
<!-- standard, dark 个人喜好暗色 -->
<theme>dark</theme>

<!-- document encoding -->
<!-- defaults to UTF-8 -->
<encoding>UTF-8</encoding>

<!-- protocol for script and stylesheets -->
<!-- defaults to https -->
<protocol>https</protocol>

<!-- title of the document -->
<documentTitle>QA-接口自动化测试报告</documentTitle>

<!-- report name - displayed at top-nav -->
<reportName>QA-接口自动化测试报告</reportName>

<!-- report headline - displayed at top-nav, after reportHeadline -->
<reportHeadline>接口自动化测试报告</reportHeadline>

<!-- global date format override -->
<!-- defaults to yyyy-MM-dd -->
<dateFormat>yyyy-MM-dd</dateFormat>

<!-- global time format override -->
<!-- defaults to HH:mm:ss -->
<timeFormat>HH:mm:ss</timeFormat>

<!-- custom javascript -->
<scripts>
<![CDATA[
$(document).ready(function() {

});
]]>
</scripts>

<!-- custom styles -->
<styles>
<![CDATA[

]]>
</styles>
</configuration>
</extentreports>
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
48
49
50
Step-5:配置系统系统
config下新建 MySystemInfo类继承 SystemInfo 接口

public class MySystemInfo implements SystemInfo {
@Override
public Map<String, String> getSystemInfo() {

Map<String, String> systemInfo = new HashMap<>();
systemInfo.put("测试人员", "zuozewei");

return systemInfo;
}
}
1
2
3
4
5
6
7
8
9
10
可用于添加系统信息,例如:db的配置信息,人员信息,环境信息等。根据项目实际情况添加。
至此,extentreports 美化报告完成。

Step-6:添加测试用例
public class TestMethodsDemo {

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

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


@Test
public void test3(){
Assert.assertEquals("aaa","aaa");
}


@Test
public void logDemo(){
Reporter.log("这是故意写入的日志");
throw new RuntimeException("故意运行时异常");
}
}
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
Step-7:测试用例suite
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="测试demo" verbose="1" preserve-order="true">
<parameter name="report.config" value="src/main/resources/report/extent-config.xml"/>
<parameter name="system.info" value="com.zuozewei.extentreportdemo.config.MySystemInfo"/>

<test name="测试demo" preserve-order="true">
<classes>
<class name="com.zuozewei.extentreportdemo.testCase.TestMethodsDemo"/>
</classes>
</test>

<listeners>
<listener class-name="com.zuozewei.extentreportdemo.listener.MyExtentTestNgFormatter"/>
</listeners>
</suite>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
测试报告
HTML Resport 示例


Email Report 示例


工程目录

---------------------
作者:zuozewei
来源:CSDN
原文:https://blog.csdn.net/zuozewei/article/details/85011217
版权声明:本文为博主原创文章,转载请附上博文链接!

测试报告ExtentReport改进

标签:mave   功能   rri   get   测试框架   文章   protoc   声明   新建   

原文地址:https://www.cnblogs.com/kaola8023/p/10456577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!