Dataprovider 如何将测试数据发布到 HTML 报告中

How Dataprovider publish the test data into HTML report

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

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

以下 class 将创建注释:

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

以下class将从用户获取数据:

  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 报告中打印该注释值。

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

使用 customReport 如果要实现自定义 TestHTMLReporter,则必须实现 IReporter、扩展 TestListenerAdapter 并覆盖 generateReport 方法.对于其他记者,您可能需要做一些不同的事情,但概念将保持不变。您将实现如下所示的自定义 '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 方法的正确位置添加以下代码段

// 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 或者您可以搜索解决方案。希望这有帮助