欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java testng 使用 extentreports 测试报告

程序员文章站 2022-04-10 23:33:07
...

文章目录


testng 原版的测试报告太难看了,这里采用 extentreports 测试报告,效果很赞有没有!
目前市场 java 主流的有 extentreports 报告和 allure2 报告,二者生成的报告样式都很好看

extentreports 和 allure2 比较:

  • extentreports 生成的是 html 报告方便 jenkins 的邮件发送
  • extentreports 只支持 java 和 .net 比 allure2 支持范围少很多
  • extentreports 可定制的内容展示比 allure2 少
  • 但是 extentreports 带有几种展示历史报告的服务端,这个很赞
  • extentreports 官网有 V2.x 和 V3.x 版本的,V3.x 版本的只支持 jkd 8 及其以上

java testng 使用 extentreports 测试报告
第一步:配置依赖

除了基本 testng 的依赖外,还要如下依赖:

<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports</artifactId>
    <version>3.1.5</version>
</dependency>

第二步:编写测试报告监听器类

extentreports 的测试报告监听器类怎么写呢?

可以参照如下官方编写 demo,官方讲解非常非常清楚
extentreports 官方使用 demo

英文不好的小伙伴,可以参照 testerhome 中已经翻译过的这篇文章
extentreports 社区翻译版 demo

在自己测试项目 listener 包中新建一个监听器类 ExtentTestNGIReporterListener.java,我决定采用继承 testng 中 IReporter 接口的形式来实现监听,然后代码如下:


public class ExtentTestNGIReporterListener implements IReporter {
    
    private static final String OUTPUT_FOLDER = "test-output/";
    private static final String FILE_NAME = "Extent.html";
    
    private ExtentReports extent;

    @Override
    public void generateReport(List xmlSuites, List suites, String outputDirectory) {
        init();
        
        for (ISuite suite : suites) {
            Map result = suite.getResults();
            
            for (ISuiteResult r : result.values()) {
                ITestContext context = r.getTestContext();
                
                buildTestNodes(context.getFailedTests(), Status.FAIL);
                buildTestNodes(context.getSkippedTests(), Status.SKIP);
                buildTestNodes(context.getPassedTests(), Status.PASS);
                
            }
        }
        
        for (String s : Reporter.getOutput()) {
            extent.setTestRunnerOutput(s);
        }
        
        extent.flush();
    }
    
    private void init() {
        ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);
        htmlReporter.config().setDocumentTitle("ExtentReports - Created by TestNG Listener");
        htmlReporter.config().setReportName("ExtentReports - Created by TestNG Listener");
        htmlReporter.config().setTestViewChartLocation(ChartLocation.BOTTOM);
        htmlReporter.config().setTheme(Theme.STANDARD);
        
        extent = new ExtentReports();
        extent.attachReporter(htmlReporter);
        extent.setReportUsesManualConfiguration(true);
    }
    
    private void buildTestNodes(IResultMap tests, Status status) {
        ExtentTest test;
        
        if (tests.size() > 0) {
            for (ITestResult result : tests.getAllResults()) {
                test = extent.createTest(result.getMethod().getMethodName());
                
                for (String group : result.getMethod().getGroups())
                    test.assignCategory(group);

                if (result.getThrowable() != null) {
                    test.log(status, result.getThrowable());
                }
                else {
                    test.log(status, "Test " + status.toString().toLowerCase() + "ed");
                }
                
                test.getModel().setStartTime(getTime(result.getStartMillis()));
                test.getModel().setEndTime(getTime(result.getEndMillis()));
            }
        }
    }
    
    private Date getTime(long millis) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(millis);
        return calendar.getTime();      
    }
}

IReporter 是 testng 自带的报告接口,一般测试报告监听器会继承它。这个监听器中很多地方可以去做定制化的修改

第三步:testng.xml 配置监听器

代码如下:

<listeners>
	<listener class-name="com.abcnull.listener.ExtentTestNGIReporterListener"/>
</listeners>

第四步:查看测试报告

运行测试用例之后,你会在项目下 test-output 中看到 Extent.html 测试报告

相关标签: 测试开发 Model