【问题标题】:How Dataprovider publish the test data into HTML reportDataprovider 如何将测试数据发布到 HTML 报告中
【发布时间】:2017-11-22 12:22:19
【问题描述】:

我只是用谷歌搜索,但不知道数据提供者如何将测试数据发布到默认的 TestNG 报告中。如果有人了解数据提供者的内部逻辑,请告诉我。如果有任何文件可以更好地理解这一点,我们将不胜感激。

我刚刚创建了一个自定义注释,我想像 DataProvider 那样将其发布到默认的 testNG HTML 报告中。到目前为止,我已经尝试过以下代码。

下面的类将创建注解:

     @Retention(RetentionPolicy.RUNTIME)
     @Target({ ElementType.METHOD })
     public @interface Greet {
        /**
         * @return - The name of the person to greet.
         */
        String name() default "";
}

下面的类将从用户那里获取数据:

  public class TestCase1 {
    @Test
    @DataPublish(name="First Test method_1")
    public static void test1() throws Exception {
       try {
            Assert.assertTrue(true);
           } 
       catch (Exception ex) {
            ex.printStackTrace();
        }
    }

我想在 testNG 默认 HTML 报告中打印该注释值。

【问题讨论】:

  • 你想传递给记者什么数据,你在寻找什么逻辑。数据提供者解释here。基本上你想达到什么目的?您可以编辑问题并进行解释。
  • 我可以从提供的信息中看到,您必须使用 dataprovider 将数据传递给扩展 TestHTMLReporter.javaSuiteHTMLReporter.java 或实现 IReporter 的类,具体取决于什么你想做的事
  • 我注意到 suitehtmlreporter.java 有私有方法,我不认为它可以扩展到子类。实现逻辑的任何线索。

标签: testng testng-dataprovider


【解决方案1】:

您的数据提供者可以为任何类或方法提供数据,我相信那里有这样的示例。您可以在下面的类中添加您的数据。我已经在下面解释了自定义报告部分。

使用您的 customReport 您必须实现 IReporter ,扩展 TestListenerAdapter 并覆盖 generateReport 方法,如果您想实现自定义 TestHTMLReporter 。对于其他记者,您可能需要做一些不同的事情,但概念将保持不变。您将实现如下所示的自定义“TestHTMLReporter”。

在您的项目中创建一个CustomReport.java 文件并复制粘贴TestHTMLReporter.java 的全部内容,在getOutputFile 方法中更改文件名,如下所示

public class CustomReport  extends TestListenerAdapter implements IReporter {

     @Override
        public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
                                   String outputDirectory) {

        }
   ...
   //paste the content of TestHTMLReporter.java here
   ...
   ...

确保所有来自TestHTMLReporter.java 的导入都已到位 现在,根据您的要求在此文件中进行更改。例如:如果您想添加每个测试的结束时间,那么在 generateTable 方法中的正确位置添加以下 sn-p

// Test class
      String testClass = tr.getTestClass().getName();
       long testMillis = tr.getEndMillis();
        String testMillisString = Long.toString(testMillis);
      if (testClass != null) {
        pw.append("<br>").append("Test class Name: ").append(testClass);

         // this line to add end time in ms
        pw.append("<br>").append("End Time(ms): ").append(testMillisString); 
        // Test name
        String testName = tr.getTestName();
        if (testName != null) {
          pw.append(" (").append(testName).append(")");

        }   

然后你会得到如下所示

现在,您将获得两份报告,一份是默认报告,另一份是您的文件名。 现在唯一剩下的就是关闭默认报告侦听器,因此您只会得到一份报告。为此,您可以关注this 或者您可以搜索解决方案。希望这会有所帮助

【讨论】:

  • 我刚刚从 TestHTMLReporter.java 复制代码并粘贴到我的类文件中,并在该类文件的 256 行中观察到错误(尝试 (PrintWriter writer = new PrintWriter(Utils.openWriter(outputDirectory, getOutputFile(测试上下文)))){)。它说 openWriter 是 Utils 类的未定义类型。此外,我已经在我的 customhtml.java 中正确导入了该类文件
  • 对不起。它的版本问题。我已经在我的 Eclipse IDE 中升级了 testNG。它解决了这个问题。另外,我做了一些更改,这些更改也复制到了默认的 html 文件中。有没有办法对 emailable 和 index.html 报告做同样的事情?
  • 我不确定该怎么做。我将不得不调查。您可以打开新问题,可能有人会回答或者我会尝试回答。
  • 当然。感谢您的支持。
  • @ArrcanaMohan 我想,我知道如何做 index.html ,但我不能在这里解释,空间太短了。因此,如果您提出问题,我可以回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多