前言
在實際的自動化測試工作中經常會用到一些報告生成工具大概分為兩類,一類是測試框架自帶的報告生成工具如:JUnit+Ant、TestNG;另一類就是專用報告工具如ReportNG等。這些報告要么在UI設計上不滿足我們的需求,要么在API和擴展性上比較差。所以,我們要尋求一個既美觀大方,又支持擴展的報告插件。本文介紹的ExtentReport就是這樣一個報告插件。
當前狀況
下面來分別看看當前我們常用的報告
JUnit+Ant測試報告樣例:

TestNG測試報告樣例

ReportNG測試報告樣例

看到上面報告的樣例是不是覺得報告頁面丑陋而且死板不夠炫啊,其實這些報告樣式不光是丑陋也使用了一些過時的css樣式並且擴展性比較差:
- JUnit與Ant的配合生成的報告簡潔,但配置有點復雜無法立即上手。
- TestNG的報告雖然比詳盡,但信息比較分散,定制開發的門檻比較高。
- ReportNG目前已經不再維護了Current Stable Version: 1.1.4
ExtentReports報告
這些報告的使用與配置方面的問題這里不再詳述,大家可以去Google相應的文章,這里關鍵給大家推薦一個更實用的開源報告生成工具ExtentReports,其不光漂亮而且使用簡單,並可以定制相應的樣式,先上圖看看:



我們要改變
ExtentReports的介紹
ExtentReports是由Anshoo Arora創造的一個基於HTML5報告,它提供了Java與.NET類庫,非常容易使用和創建出漂亮的自動化測試報告。既可以顯示測試測試的Summary與步驟詳細信息(狀態、錯誤等)也提供分析Dashbord,這些頁面使用Tab標簽鏈接進行分離方便快速切換查看等優點
-
文檔頁面 :http://relevantcodes.com/extentreports2/java/version2/docs.html
-
API文檔:http://relevantcodes.com/Tools/ExtentReports2/javadoc/index.html
基本使用過程
下載與配置
當前For Java的最新版本是2.40.2,

1. 解壓后並將extentreports-java-2.40.2.ja與lib目錄中導入你的自動化測試工程中,這里以Eclipse的工程為例:


2. 在你的測試代碼中或者需要使用報告的地方引用,按下面的步驟進行調用:


初始化ExtentReports
1.ExtentReports提供多個初始化接口,根據自己的需要來進行初始化,常用的如下:
ExtentReports extent = ExtentReports(String filePath, Boolean replaceExisting, NetworkMode networkMode)

2.參數說明:
filePath:html報告文件的路徑
replaceExisting:是否覆蓋存在的文件,true:覆蓋,false,不覆蓋,新的測試信息將會追加到報告中
NetworkMode :OFFLINE---html報告是使用離線的CSS和JS, ONLINE使用報告本地目錄的中的CSS與JS,如果選擇OFFLINE,將會復制相應的CSS與JS到%reportFolder%/extentreports目錄中,這樣就不需要在線的css與js樣式了提高速度
其他初始方法詳情請參考API文檔:
http://relevantcodes.com/Tools/ExtentReports2/javadoc/index.html

增加測試信息到報告中
1.增加測試任務信息

- 說明:調用startTest方法並傳入任務的名稱並返回一個ExtentTest類的實例taskTest的,標示測試的開始,這個名稱將會顯示 在測試報告的標題中,
- taskTest再調用setStartedTime方法來設置一個測試的開始時間
- extent.flush()是將信息寫入報告文件中
2.增加測試用例信息:

說明:調用過程與增加任務信息一樣,只是再調一次startTest與setStartedTime
對應的報告實例如下:

- 增加測試用例結果狀態信息

- 說明:caseTest.log(parameter1, parameter2)向報告中記錄Case結果狀態,如果是Pass調用,參數parameter1傳入LogStatus.PASS,如果為Fail parameter1傳入LogStatus. parameter2用於在狀態欄顯示什么樣的信息(如顯示 通過、passed等);
- 同樣調用調用setEndedTime方法來設置一個測試的結束時間
- 測試用例的運行時長會在報告中進行自動計算。
- taskTest.appendChild(caseTest);是將此Case的測試結果關聯到前面的測試任務上。效果如下圖:

- 如果重復此步驟還可以向下再添加一級的如測試步驟的結果狀態,如下:

4.增加測試任務結果信息

- 說明:測試任務結束后調用setEndedTime與endTest標志測試任務的結束
- 調用close方法關閉測試報告文件的讀寫。
- 測試任務的運行時長會在報告中進行自動計算

- 增加屏幕截圖到測試用例的報告中:

說明:
仍然使用ExtentTest實例caseTest調用log(parameter1, parameter2)方法傳入兩個參數
LogStatus.INFO表示要增加一條信息,信息內容為parameter2始caseTest.addScreenCapture(screenPath), screenPage可以使用相對路徑如:
"./Screenshots/" + snapShotFileName;
高級應用
LogStatus.INFO樣式定制
在測試用例信息中增加制定化的Hmtl樣式如下

log方法中可以直接傳入html字符串來定制自己想要的效果。
增加附加信息到報告中
將測試設備、測試任務、OS平台等相關的信息到報告中

說明,將需要的信息放入Map中,報告類初始化后的實例extent調用addSystemInfo(sysInfo);來完成想關的信息插入,效果如下圖:

作者:彭海波
鏈接:https://www.jianshu.com/p/92eb0375fb43
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。