Java 创建自定义TestNG报告-WebDriver

Java 创建自定义TestNG报告-WebDriver,java,selenium,report,webdriver,testng,Java,Selenium,Report,Webdriver,Testng,我正在尝试实现org.testng IReporter接口。我的Java不是很好,基于我在网上找到的一些示例,我能够创建一个Reporter类。我遇到的问题是如何使用它,在哪里调用它,以及如何和哪些参数传递给它 公共类报告器实现了IReporter{ public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory){ ISuiteR

我正在尝试实现org.testng IReporter接口。我的Java不是很好,基于我在网上找到的一些示例,我能够创建一个Reporter类。我遇到的问题是如何使用它,在哪里调用它,以及如何和哪些参数传递给它

公共类报告器实现了IReporter{

public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory){
      ISuiteResult results =suites.get(0).getResults().get("Sanity Suite");
      ITestContext context = results.getTestContext();

      IResultMap passedTests = context.getPassedTests();
      IResultMap failedTests = context.getFailedTests();

      // Print all test exceptions...
      for( ITestResult r: failedTests.getAllResults()) {
          System.out.println( r.getThrowable());
      }
}
我将如何使用我的Reporter在跑步结束时获得定制报告


谢谢!

只需在上面展开框架,即可在需要的地方生成结果,.xml、.html、文本文件等。

只需在上面展开框架,即可在需要的地方生成结果,.xml、.html、文本文件等。

David,如果您通过在套件部分使用xml

<listeners>
<listener class-name="yourpackage.Reporter"/> </listeners>

如果您以编程方式调用这些,那么您需要通过您的代码添加它,如文档所示@

如果从命令行调用测试,请参阅


如果您以上述任一方式指定,则TestNG将在所有运行结束时调用此报告程序。

David,如果您通过套件部分中的xml调用测试,则可以将自定义报告程序添加到TestNG.xml中

<listeners>
<listener class-name="yourpackage.Reporter"/> </listeners>

如果您以编程方式调用这些,那么您需要通过您的代码添加它,如文档所示@

如果从命令行调用测试,请参阅

如果您以上述任一方式指定,TestNG将在所有运行结束时调用此报告程序。

I

基本思想是创建一个侦听器类并在testing.xml文件中引用它

<listeners>
    <listener class-name="qa.hs.framework.CustomReportListener"/>
  </listeners>

然后创建类:

 public class CustomReportListener implements IReporter {

    @Override
    public void generateReport( List<XmlSuite> xmlSuites, List<ISuite> suites, 
           String outputDirectory ) {
       System.out.println();
       //Iterating over each suite included in the test
       for (ISuite suite : suites) {
       //Following code gets the suite name
       String suiteName = suite.getName();
       //Getting the results for the said suite
       Map<String, ISuiteResult> suiteResults = suite.getResults();
       for ( ISuiteResult sr : suiteResults.values() ) {
          ITestContext tc = sr.getTestContext();
          System.out.println("Passed tests for suite '" + suiteName + "' is:" +
               tc.getPassedTests().getAllResults().size());
        }
        CustomReport cr = new CustomReport();
        cr.generateReport( xmlSuites, suites, outputDirectory );
        ...
公共类CustomReportListener实现IReporter{
@凌驾
公共无效生成器报告(列表xmlSuites、列表suites、,
字符串输出目录){
System.out.println();
//迭代测试中包含的每个套件
适用于(ISuite:suites){
//下面的代码获取套件名称
字符串suiteName=suite.getName();
//获取上述套件的结果
Map suiteResults=suite.getResults();
对于(ISuiteResult sr:suiteResults.values()){
ITestContext tc=sr.getTestContext();
System.out.println(“通过了套件测试”+“suiteName+”是:+
tc.getPassedTests().getAllResults().size());
}
CustomReport cr=新的CustomReport();
cr.generateReport(xmlSuites,suites,outputDirectory);
...
然后,您可以从该侦听器类创建一个“Report Writer”类,该类使用如下方式创建任意HTML输出:

public class CustomReport extends CustomReportListener
{
        private static final Logger LOG = Logger.getLogger( CustomReport.class );
        private static final SimpleDateFormat dateFormatter = new SimpleDateFormat(" MMM d 'at' hh:mm a");

        private String reportFileName = Constants.reportFileName;
        private PrintWriter m_out;
        private int m_row;
        private Integer m_testIndex;
        private int m_methodIndex;
        private Scanner scanner;

        @Override
        public void generateReport( List<XmlSuite> xml, List<ISuite> suites, String outdir ) {
                try {
                        m_out = createWriter( outdir );
                }
                catch ( IOException e ) {
                        LOG.error("output file", e);
                        return;
                }
                startHtml(m_out);
                generateSuiteSummaryReport(suites);
                generateMethodSummaryReport(suites);
                generateMethodDetailReport(suites);
                endHtml(m_out);
                m_out.flush();
                m_out.close();
        }
公共类CustomReport扩展了CustomReportListener
{
私有静态最终记录器LOG=Logger.getLogger(CustomReport.class);
私有静态最终SimpleDataFormat dateFormatter=新SimpleDataFormat(“MMM d'在'hh:mm a');
私有字符串reportFileName=Constants.reportFileName;
私人印刷作家m_out;
私人国际摩乌街;
私有整数m_testIndex;
私有int m_方法索引;
私人扫描仪;
@凌驾
公共void生成器报告(列表xml、列表套件、字符串outdir){
试一试{
m_out=createWriter(outdir);
}
捕获(IOE异常){
LOG.error(“输出文件”,e);
回来
}
startHtml(m_out);
生成套件摘要报告(套件);
生成方法摘要报告(套件);
生成方法跟踪报告(套件);
endHtml(m_out);
m_out.flush();
m_out.close();
}
最后,从“CustomReport”类中,您的“生成报告”方法都可以访问报告中的所有数据,例如:

testContext.getPassedTests()
Map<String, ISuiteResult> r = suite.getResults()
method.getDescription()
method.getTestClass().getName()
ITestResult.SUCCESS
tests.getAllMethods()
overview.getStartDate().getTime()
overview.getIncludedGroups()
etc.
testContext.getPassedTests()
Map r=suite.getResults()
方法getDescription()
方法。getTestClass().getName()
成功
tests.getAllMethods()
概述.getStartDate().getTime()
概述.getIncludedGroups()
等
I

基本思想是创建一个侦听器类并在testing.xml文件中引用它

<listeners>
    <listener class-name="qa.hs.framework.CustomReportListener"/>
  </listeners>

然后创建类:

 public class CustomReportListener implements IReporter {

    @Override
    public void generateReport( List<XmlSuite> xmlSuites, List<ISuite> suites, 
           String outputDirectory ) {
       System.out.println();
       //Iterating over each suite included in the test
       for (ISuite suite : suites) {
       //Following code gets the suite name
       String suiteName = suite.getName();
       //Getting the results for the said suite
       Map<String, ISuiteResult> suiteResults = suite.getResults();
       for ( ISuiteResult sr : suiteResults.values() ) {
          ITestContext tc = sr.getTestContext();
          System.out.println("Passed tests for suite '" + suiteName + "' is:" +
               tc.getPassedTests().getAllResults().size());
        }
        CustomReport cr = new CustomReport();
        cr.generateReport( xmlSuites, suites, outputDirectory );
        ...
公共类CustomReportListener实现IReporter{
@凌驾
公共无效生成器报告(列表xmlSuites、列表suites、,
字符串输出目录){
System.out.println();
//迭代测试中包含的每个套件
适用于(ISuite:suites){
//下面的代码获取套件名称
字符串suiteName=suite.getName();
//获取上述套件的结果
Map suiteResults=suite.getResults();
对于(ISuiteResult sr:suiteResults.values()){
ITestContext tc=sr.getTestContext();
System.out.println(“通过了套件测试”+“suiteName+”是:+
tc.getPassedTests().getAllResults().size());
}
CustomReport cr=新的CustomReport();
cr.generateReport(xmlSuites,suites,outputDirectory);
...
然后,您可以从该侦听器类创建一个“Report Writer”类,该类使用如下方式创建任意HTML输出:

public class CustomReport extends CustomReportListener
{
        private static final Logger LOG = Logger.getLogger( CustomReport.class );
        private static final SimpleDateFormat dateFormatter = new SimpleDateFormat(" MMM d 'at' hh:mm a");

        private String reportFileName = Constants.reportFileName;
        private PrintWriter m_out;
        private int m_row;
        private Integer m_testIndex;
        private int m_methodIndex;
        private Scanner scanner;

        @Override
        public void generateReport( List<XmlSuite> xml, List<ISuite> suites, String outdir ) {
                try {
                        m_out = createWriter( outdir );
                }
                catch ( IOException e ) {
                        LOG.error("output file", e);
                        return;
                }
                startHtml(m_out);
                generateSuiteSummaryReport(suites);
                generateMethodSummaryReport(suites);
                generateMethodDetailReport(suites);
                endHtml(m_out);
                m_out.flush();
                m_out.close();
        }
公共类CustomReport扩展了CustomReportListener
{
私有静态最终记录器LOG=Logger.getLogger(CustomReport.class);
私有静态最终SimpleDataFormat dateFormatter=新SimpleDataFormat(“MMM d'在'hh:mm a');
私有字符串reportFileName=Constants.reportFileName;
私人印刷作家m_out;
私人国际摩乌街;
私有整数m_testIndex;
私有int m_方法索引;
私人扫描仪;
@凌驾
公共无效生成器报告(列表xm)