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 或者您可以搜索解决方案。希望这有帮助
我只是用谷歌搜索但不知道数据提供者如何将测试数据发布到默认的 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 或者您可以搜索解决方案。希望这有帮助