背景
搞過testng的同學都知道,testng自帶的報告非常丑,而且有些字段的展示很不人性化,所以需要優化下報告
解決方案
嘗試過一下開源的jar包,如ReportNG,奈何和目前使用的allure框架沖突,只能選擇其他方法,google后發現可以重寫testNG的生成報告的接口來實現自定義的報告,美化方面想到了直接套用bootstrap的框架
參考:https://stackoverflow.com/questions/19564862/customizing-summary-section-of-testng-emailable-report
首先嘗試獲取我們需要的關鍵信息,可以獲取到我們想要的用例數量,通過個數,失敗個數,跳過個數,類名,方法名,異常報錯,時間
for
(ISuite suite : suites) {
Map<String, ISuiteResult> tests = suite.getResults();
for
(ISuiteResult r : tests.values()) {
ITestContext overview = r.getTestContext();
System.err.println(
"suite: "
+ overview.getName());
System.err.println(
"Stard Time: "
+overview.getStartDate());
System.err.println(
"End Time: "
+overview.getEndDate());
System.err.println(
"all methods num : "
+overview.getAllTestMethods().length);
//passed
System.err.println(
"passed: "
+ overview.getPassedTests().size());
Set<ITestResult> passedSet = overview.getPassedTests().getAllResults();
for
(ITestResult p : passedSet){
System.err.println(
"class: "
+p.getTestClass().getName() +
" | method: "
+p.getName());
}
//failed
System.err.println(
"failed: "
+ overview.getFailedTests().size());
Set<ITestResult> failedSet = overview.getFailedTests().getAllResults();
for
(ITestResult f : failedSet){
System.err.println(
"class: "
+f.getTestClass().getName()+
" | method: "
+f.getName() +
" | error: "
+ f.getThrowable());
}
//skipped
System.err.println(
"skipped: "
+ overview.getSkippedTests().size());
Set<ITestResult> skippedSet = overview.getSkippedTests().getAllResults();
for
(ITestResult s : skippedSet){
System.err.println(
"---- "
+s.getName() );
System.err.println(s.getThrowable());
}
System.err.println(
"=================================="
);
}
}
|
然后將獲取到的數據寫到一個html文件中,css樣式采用放在html中, 類似下圖
生成的html文件中包含了我們期望的數據,和bootstrap的css內容,因此報告看起來好看又人性化