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

TestNG測試報告樣例

ReportNG測試報告樣例

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



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

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


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


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

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

增加測試信息到報告中
1.增加測試任務(wù)信息

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

說明:調(diào)用過程與增加任務(wù)信息一樣,只是再調(diào)一次startTest與setStartedTime
對應(yīng)的報告實例如下:

- 增加測試用例結(jié)果狀態(tài)信息

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

- 如果重復(fù)此步驟還可以向下再添加一級的如測試步驟的結(jié)果狀態(tài),如下:

4.增加測試任務(wù)結(jié)果信息

- 說明:測試任務(wù)結(jié)束后調(diào)用setEndedTime與endTest標(biāo)志測試任務(wù)的結(jié)束
- 調(diào)用close方法關(guān)閉測試報告文件的讀寫。
- 測試任務(wù)的運行時長會在報告中進行自動計算

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

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

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

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