背景
搞过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内容,因此报告看起来好看又人性化