TestNG-TestListenerAdapter和IReporter的实现方式

发布时间:2021-10-20 17:55:46 作者:柒染
来源:亿速云 阅读:157

这篇文章给大家介绍TestNG-TestListenerAdapter和IReporter的实现方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

https://static.javadoc.io/org.testng/testng/6.13/org/testng/TestListenerAdapter.html

TestListenerAdapter

一个简单的ITestListener适配器,用于存储所有运行的测试。
您可以使用以下方法检索这些结果:getPassedTests()getFailedTests()getSkippedTests()
如果您扩展此类以覆盖任何这些方法,请记住如果您希望维护此测试列表,则调用它们的超级等效项。
IReporter 

客户端可以实现此接口以生成报告。
它的方法generateReport()将在所有套件运行后调用,参数将提供在该运行期间发生的所有测试结果。

参考:

https://www.cnblogs.com/relax-zw/p/9884009.html

http://bbs.51testing.com/thread-1161195-1-1.html 

IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么不能自已定
制一份呢?testng的IReporter接口就接供了这样的功能,我们只需要实现这个接口,并加上监听,就
能拿到所有的信息了,你可以把这些信息存数据库,或者自已生成一个html,亦或者写在EXCEL里啊
等等,都可以,下面给出IReporter接口的实现方式:

自定义报告

package com.demo;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.testng.IReporter;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;

public class NewReport implements IReporter{
     
    @Override
    public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
        List<ITestResult> list = new ArrayList<ITestResult>();
        for (ISuite suite : suites) {          
            Map<String, ISuiteResult> suiteResults = suite.getResults();
            for (ISuiteResult suiteResult : suiteResults.values()) {
                ITestContext testContext = suiteResult.getTestContext();           
                IResultMap passedTests = testContext.getPassedTests();
                IResultMap failedTests = testContext.getFailedTests();
                IResultMap skippedTests = testContext.getSkippedTests();
                IResultMap failedConfig = testContext.getFailedConfigurations();   
                list.addAll(this.listTestResult(passedTests));
                list.addAll(this.listTestResult(failedTests));
                list.addAll(this.listTestResult(skippedTests));
                list.addAll(this.listTestResult(failedConfig));
            }          
        }
        this.sort(list);
        this.outputResult(list, outputDirectory+"/test.txt");
    }
     
    private ArrayList<ITestResult> listTestResult(IResultMap resultMap){
        Set<ITestResult> results = resultMap.getAllResults();    
        return new ArrayList<ITestResult>(results);
    }
     
    private void sort(List<ITestResult> list){
        Collections.sort(list, new Comparator<ITestResult>() {
            @Override
            public int compare(ITestResult r1, ITestResult r2) {
                if(r1.getStartMillis()>r2.getStartMillis()){
                    return 1;
                }else{
                    return -1;
                }              
            }
        });
    }
     
    private void outputResult(List<ITestResult> list, String path){      
        try {
            BufferedWriter output = new BufferedWriter(new FileWriter(new File(path)));
            StringBuffer sb = new StringBuffer();
            for (ITestResult result : list) {
                if(sb.length()!=0){
                    sb.append("\r\n");
                }
                sb.append(result.getTestClass().getRealClass().getName())
                  .append(" ")
                  .append(result.getMethod().getMethodName())
                  .append(" ")
                  .append(this.formatDate(result.getStartMillis()))
                  .append(" ")
                  .append(result.getEndMillis()-result.getStartMillis())
                  .append("毫秒 ")
                  .append(this.getStatus(result.getStatus()));
            }
            output.write(sb.toString());
            output.flush();
            output.close();
        } catch (IOException e) {          
            e.printStackTrace();
        }
         
    }
     
    private String getStatus(int status){
        String statusString = null;
        switch (status) {      
        case 1:
            statusString = "SUCCESS";
            break;
        case 2:
            statusString = "FAILURE";
            break;
        case 3:
            statusString = "SKIP";
            break;
        default:           
            break;
        }
        return statusString;
    }
     
    private String formatDate(long date){     
       SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       return formatter.format(date);
    }

}

生成测试报告

package com.demo;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners({com.demo.NewReport.class})
public class Test15 {
     
    @DataProvider
    public Object[][] dataProvider(){
        return new Object[][]{{1},{2}};
    }
     
    @Test(dataProvider="dataProvider")
    public void testAssert1(int a){
        Assert.assertEquals(1, a);
    }  
     
    @Test
    public void testAssert2(){ 
        Assert.assertEquals("2", "2"); 
    }

}

关于TestNG-TestListenerAdapter和IReporter的实现方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. 变量和不同的赋值方式(四)
  2. ribbon的调用方式和Feign实现远程调用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

testng

上一篇:Nacos的安装方法

下一篇:RocketMQ推拉模式是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》