背景
搞过testng的同学都知道,testng自带的报告非常丑,而且有些字段的展示很不人性化,所以需要优化下报告
解决方案
尝试过一下开源的jar包,如ReportNG,奈何和目前使用的allure框架冲突,只能选择其他方法,google后发现可以重写testNG的生成报告的接口来实现自定义的报告,美化方面想到了直接套用bootstrap的框架
参考:https://*.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内容,因此报告看起来好看又人性化
虽千万人,吾往矣!