走進Java介面測試之測試報告ExtentReport
文章目錄
引言
在上文走進Java介面測試之測試框架TestNG
中我們詳細介紹了 TestNG 的各種用法, 在本文中,我將詳細介紹如何將 ExtentReports 測試報告與TestNG整合。
ExtentReports 簡介
主要特點:
- 生成的報告簡潔美觀
- 生成的單html方便 Jenkins 整合發郵件
- 自帶集中展示歷史報告的服務端
- 支援 Java 和 .Net
TestNG 原生報告有點醜,資訊整理有點亂。ExtentReports 是用於替換TestNG 原生報告。當然也可以使用 ReportNg,個人偏好 ExtentReports 樣式。
官網已經給了很多demo了,大家可以參考練習,這裡根據個人經驗進行了配置。
官網:http://extentreports.com/
客戶端:https://github.com/anshooarora/extentreports-java/commits/master
服務端:https://github.com/anshooarora/extentx
具體步驟
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>
Step-2:重寫 ExtentTestNgFormatter 類
主要基於以下兩項原因:
- 支援報告中展示更多狀態型別的測試結果,例如:成功、失敗、警告、跳過等。
- 因為不支援cdn.rawgit.com訪問,故替css訪問方式。
建立 MyExtentTestNgFormatter 類
下載 ExtentReportes 原始碼,找到 ExtentTestNgFormatter 類,Listener 目錄下建立 MyExtentTestNgFormatter.java
類直接繼承 ExtentTestNgFormatter 類。
public class MyExtentTestNgFormatter extends ExtentTestNgFormatter {
解決CDN無法訪問
構造方法加入
htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
具體程式碼如下:
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);
}
重寫 onstart 方法
重寫onstart 方法功能。新建一個類名為MyReporter,一個靜態ExtentTest的引用。
Listener 包下 MyReporter.java
public class MyReporter {
public static ExtentTest report;
}
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);
}
自定義配置
測試報告預設是在工程根目錄下建立 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);
}
report.log
report.log 支援多種玩法
// 根據狀態不同新增報告。型如警告
MyReporter.report.log(Status.WARNING, "介面耗時(ms):" + String.valueOf(time));
直接從TestClass 中執行時會報 MyReporter.report
的空指標錯誤,需做判空處理。
Step-3:配置監聽
在測試集合 testng.xml 檔案中匯入 Listener 監聽類。
<listeners>
<listener class-name="com.zuozewei.extentreportdemo.listener.MyExtentTestNgFormatter"/>
</listeners>
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>
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;
}
}
可用於新增系統資訊,例如: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("故意執行時異常");
}
}
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>
測試報告
HTML Resport 示例
Email Report 示例
工程目錄
相關文章
- 測試平臺之介面測試
- 微服務測試之介面測試和契約測試微服務
- 介面測試怎麼進行,如何做好介面測試
- Go 單元測試之mock介面測試GoMock
- 介面測試之postmanPostman
- 測試計劃和測試報告測試報告
- 滲透測試學習之報告測試引數五
- 介面測試進階篇
- 測試 之Java單元測試、Android單元測試JavaAndroid
- 測試開發之效能篇-JMeter介面測試JMeter
- 介面測試測試流程
- 隨行付微服務測試之介面測試和契約測試微服務
- 記學習滲透測試之報告測試引數二
- 記學習滲透測試之報告測試引數一
- 記學習滲透測試之報告測試引數四
- 記學習滲透測試之報告測試引數三
- 介面測試之unittest框架框架
- 介面測試之fiddler(10.2)
- Allure測試報告測試報告
- Jumper 測試報告測試報告
- 雲測試報告測試報告
- API 測試 | 瞭解 API 介面測試 | API 介面測試指南API
- 軟體測試之網站測試如何進行?網站測試方案2022最新報價網站
- 使用java+TestNG進行介面迴歸測試Java
- Jmeter介面測試+效能測試JMeter
- 介面測試 - 引數測試
- 【軟體測試】——介面測試
- postman工具進行介面測試Postman
- charles 如何進行介面測試?
- postman進行http介面測試PostmanHTTP
- 介面自動化使用requests生成測試報告測試報告
- API測試:瞭解API介面測試與API介面測試指南API
- 測試員進階技能:如何有效地利用單元測試報告?測試報告
- jmeter介面測試教程以及介面測試流程JMeter
- 介面測試學習之jsonJSON
- 介面測試學習之 jsonJSON
- 介面測試要測試什麼?
- 記錄python介面自動化測試--利用unittest生成測試報告(第四目)Python測試報告