千家信息网

TestNG-TestListenerAdapter和IReporter的实现方式

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章给大家介绍TestNG-TestListenerAdapter和IReporter的实现方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。https://static.j
千家信息网最后更新 2025年02月03日TestNG-TestListenerAdapter和IReporter的实现方式

这篇文章给大家介绍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 xmlSuites, List suites, String outputDirectory) {        List list = new ArrayList();        for (ISuite suite : suites) {                      Map 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 listTestResult(IResultMap resultMap){        Set results = resultMap.getAllResults();            return new ArrayList(results);    }         private void sort(List list){        Collections.sort(list, new Comparator() {            @Override            public int compare(ITestResult r1, ITestResult r2) {                if(r1.getStartMillis()>r2.getStartMillis()){                    return 1;                }else{                    return -1;                }                          }        });    }         private void outputResult(List 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的实现方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0