TestNG 报告生成 Selenium:如何生成?
是什么 TestNG 报告?
TestNG 报告 是使用以下代码执行测试用例后生成的默认 HTML 报告 TestNG. 这些报告可帮助您识别有关测试用例和项目状态的信息。 TestNG 报告中 Selenium 记录每个测试方法的三种结果——通过、失败和跳过——以便您可以一目了然地查看有关测试用例的数据。
当您进行自动化测试以及手动测试时,报告生成非常重要。
- 通过查看结果,您可以轻松识别有多少测试用例通过、失败和跳过。
- 通过查看报告,您将了解项目的状态。
Selenium WebDriver 用于自动化 Web 应用程序,但它本身不会生成任何报告。
- 此 TestNG 将生成默认报告。
- 当你执行 testng.xml 文件并刷新项目后,你会看到一个名为 test-output 的文件夹,该文件夹包含了测试报告的输出结果。 TestNG.
- 右键单击 emailable-report.html,然后选择“使用 Web 浏览器打开”选项。
注意: 这里描述的行为在以下方面没有改变: TestNG 7.x 版本 TestNG 7.6 及更高版本需要 JDK 11 或更高版本,因此较旧的项目可能需要在生成报告之前提高其 JDK 版本。
有哪些 TestNG 测试输出文件夹中的报告
在打开任何单个文件之前,了解测试输出文件夹实际包含的内容会很有帮助。 TestNG 每次运行都会生成多个工件,每个工件都回答一个不同的问题。
| 文件或文件夹 | 它包含什么 | 何时有用 |
| index.html的 | 着陆报告链接到结果、分组、时间和记者输出视图。 | 深入分析一次跑步比赛。 |
| 可通过电子邮件发送的报告.html | 一个独立的页面,汇总每个类中已通过、未通过和已跳过的方法。 | 与未打开项目的人分享结果。 |
| testng-results.xml | 由内置 XML 报告器生成的机器可读 XML,包含每个方法的状态和持续时间。 | 为仪表盘或自定义解析器提供数据。 |
| junitreports | JUnit-格式的XML文件,每个测试类一个。 | 任何读取以下内容的 CI 插件 JUnit 结果格式。 |
| testng-failed.xml | 生成的测试套件文件,其中仅列出失败的方法。 | 只重新运行失败的测试用例,而不是整个测试套件。 |
本教程接下来将打开这两个 HTML 文件,因此下面的演练从 emailable-report.html 开始。
如何生成报告 Selenium
方法 1:emailable-report.html
- 点击选项“emailable-report.html”
- 点击选项网络浏览器
下面的屏幕截图显示了从 test-output 文件夹打开 emailable-report.html 文件的过程。
输出报告 TestNG 如果两个类都通过,报告将如下所示:
考虑一下你故意让测试用例(即 DemoB 类)失败的情况。然后将两个类都转换为 testng.xml 套件文件并运行它。结果将如下所示。它将显示 失败的测试用例.
这是 DemoB 类的结果:
类似地,DemoA 类的结果将如下所示:
方法 2:index.html
- 右键单击项目目录中的 index.html。
- 选择使用 Web 浏览器打开选项。它将按以下顺序显示结果。
下面的屏幕截图显示的是从项目目录中打开的 index.html 文件。
结果将如下所示:
方法 3:记者班
随着这些 TestNG 报告生成方法,您可以使用 object.properties 文件来存储系统生成的日志以及用户生成的日志。但在测试中存储日志信息的最简单方法之一是使用 记者班.
记者登录 Selenium 是存在于 TestNG HPMC胶囊 Selenium 报告。它提供了 4 种不同的方法来存储日志信息,它们是:
- 记者.log(字符串s);
- 记者.log(字符串s,布尔logToStandardOut);
- 记者.log(字符串s,int level);
- 记者.log(字符串s,int level,布尔logToStandardOut);
第二个参数决定是否将消息回显到控制台以及报告中,而 level 参数控制消息的详细程度。
例如::
创建两个类如DemoA和DemoB,并在类里面写入以下代码。
对于 DemoA 类;
- 此 Code DemoA 的相关说明已在上方解释过。这里您正在使用 Reporter 类的 log 方法。 (如果您要实现自己的报表类,该类必须实现 org.testng.IReporter 接口。)
- log 方法是 Reporter 类的静态方法。因此,您可以通过 Reporter 类访问该方法。
- log方法用于保存写入程序内部的日志信息,通过查看日志信息可以很容易地知道程序执行到底在什么地方停止了。
下面的屏幕截图显示了放置在 DemoA 类中的 Reporter.log 调用。
对于 DemoB 类:
- 现在,通过选择这两个类来创建 testng.xml 文件
- 选择以...身份运行
- 单击转换为 testng。
- 然后通过选择以...身份运行并选择 testng suite 来运行此 testng.xml 文件。
- 然后刷新项目打开测试输出文件夹。
- 在 test-output 文件夹中,打开 emailable-report.html。它看起来像:
类似地,您也将拥有 Demo B 项目的输出。
- 在 test-output 文件夹中,打开 index.html 文件。它看起来会像这样:
单击报告器输出。它将打开测试方法中写入的任何日志信息。
点击时间。它将显示使用以下代码运行类中的测试方法所花费的时间 TestNG 报告工具。
如何定制 TestNG 使用 ITestListener 和 IReporter 生成报告
以上三种方法都使用了任何 TestNG 默认情况下会生成。当团队需要不同的布局、额外的字段或实时进度视图时, TestNG 它提供了两个扩展点,而不是要求你修补默认报告。
- 测试监听器 每次测试开始、通过、失败或跳过时,系统都会实时通知您。当需要在事件发生时立即捕获信息时,例如失败时截屏,可以使用此功能。
- iReporter 每次测试套件运行结束后,系统会收到一次通知,并接收描述整个运行过程的对象。当输出结果为最终文档(例如 PDF 或自定义 HTML 页面)时,可以使用此功能。
通过 Reporter 类将每个结果推送到报告中的监听器如下所示。
import org.testng.ITestListener; import org.testng.ITestResult; import org.testng.Reporter; public class ReportListener implements ITestListener { @Override public void onTestSuccess(ITestResult result) { Reporter.log("PASSED: " + result.getName(), true); } @Override public void onTestFailure(ITestResult result) { Reporter.log("FAILED: " + result.getName(), true); } @Override public void onTestSkipped(ITestResult result) { Reporter.log("SKIPPED: " + result.getName(), true); } }
监听器的注册是在你已经为 DemoA 和 DemoB 创建的同一个 testng.xml 测试套件文件中完成的。
<suite name="Demo Suite"> <listeners> <listener class-name="ReportListener" /> </listeners> <test name="Demo Test"> <classes> <class name="DemoA" /> <class name="DemoB" /> </classes> </test> </suite>
在进行实验时,有两个命令行开关值得了解。 -d 此选项会更改报告的写入目录,并且 -usedefaultlisteners false 关闭内置的监听器,只运行您自己的监听器。这两项功能在官方文档中有详细说明。 TestNG 日志记录和结果文档它还记录了内置 XML 报告器接受的属性。
监听器只需注册一次,即可应用于套件中的每个类,这就是为什么运行大型应用程序的团队需要监听器的原因。 自动化测试 测试套件通常更喜欢这种方式,而不是手动为每个测试方法添加日志行。
TestNG 默认报表、ExtentReports 和 Allure 的比较
默认报告足以满足小型套件的需求,但它们不包含历史记录和图表。当套件规模扩大时,通常会添加两个开源库,这两个库都与默认报告兼容。 TestNG.
| 能力 | TestNG 默认 | ExtentReports | 倾城报告 |
| 准备工作 | 无 — 自动生成 | 添加库并编写报告器代码 | 添加适配器,然后根据结果生成报告。 |
| 图表和仪表盘 | 没有 | 是 | 是 |
| 截图 | 仅通过 Reporter.log 标记 | 内置附件 API | 内置附件 API |
| 运行历史记录和趋势 | 没有 | 通过可选的服务器组件 | 是的,来自之前存储的结果 |
| 框架覆盖范围 | TestNG 仅由 | Java 和.NET | 框架无关 |
先从默认报告开始,此时套件规模较小。 ExtentReports 当利益相关者要求提供易于理解的仪表盘时,以及 倾城报告 当构建过程中不稳定的测试历史记录成为关键问题时,无论你选择哪种方式,该报告通常都由构建作业发布,这在……中有所介绍。 Jenkins 持续整合 教程。












