TestNG 报告生成 Selenium:如何生成?

⚡ 智能摘要

TestNG 报告是默认的 HTML 结果文件, TestNG 每次运行后,都会将结果写入测试输出文件夹,显示哪些测试用例通过、失败或被跳过,以及任何报告器日志。

  • 🔘 默认输出: 所有的 TestNG run 命令会创建一个测试输出文件夹,无需任何额外代码。
  • ☑️ 两个 HTML 视图: emailable-report.html 汇总结果,index.html 链接到详细视图。
  • ✅ 报告日志: Reporter.log() 将自定义消息直接写入生成的报告中。
  • 🧪 套件运行: 运行 testng.xml 会将多个类合并到一个综合报告中。
  • 🛠️ 定制: ITestListener 和 IReporter 允许团队构建自己的报告格式。
  • 📊 超越默认设置: ExtentReports 和 Allure 添加了图表、历史记录和屏幕截图附件。

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

  1. 点击选项“emailable-report.html”
  2. 点击选项网络浏览器

下面的屏幕截图显示了从 test-output 文件夹打开 emailable-report.html 文件的过程。

在选中 emailable-report.html 文件 TestNG 测试输出文件夹

输出报告 TestNG 如果两个类都通过,报告将如下所示:

TestNG 可通过电子邮件发送的报告显示 DemoA 和 DemoB 测试类已通过

考虑一下你故意让测试用例(即 DemoB 类)失败的情况。然后将两个类都转换为 testng.xml 套件文件并运行它。结果将如下所示。它将显示 失败的测试用例.

这是 DemoB 类的结果:

可通过电子邮件发送的报告,重点介绍故意失败的 DemoB 测试用例

类似地,DemoA 类的结果将如下所示:

通过 DemoA 课程的报告摘要行(可通过电子邮件发送)

方法 2:index.html

  1. 右键单击项目目录中的 index.html。
  2. 选择使用 Web 浏览器打开选项。它将按以下顺序显示结果。

下面的屏幕截图显示的是从项目目录中打开的 index.html 文件。

在网页浏览器中打开项目目录中的 index.html 文件

结果将如下所示:

TestNG index.html 报告首页列出了运行结果视图

方法 3:记者班

随着这些 TestNG 报告生成方法,您可以使用 object.properties 文件来存储系统生成的日志以及用户生成的日志。但在测试中存储日志信息的最简单方法之一是使用 记者班.

记者登录 Selenium 是存在于 TestNG HPMC胶囊 Selenium 报告。它提供了 4 种不同的方法来存储日志信息,它们是:

  1. 记者.log(字符串s);
  2. 记者.log(字符串s,布尔logToStandardOut);
  3. 记者.log(字符串s,int level);
  4. 记者.log(字符串s,int level,布尔logToStandardOut);

第二个参数决定是否将消息回显到控制台以及报告中,而 level 参数控制消息的详细程度。

例如::

创建两个类如DemoA和DemoB,并在类里面写入以下代码。

对于 DemoA 类;

  • 此 Code DemoA 的相关说明已在上方解释过。这里您正在使用 Reporter 类的 log 方法。 (如果您要实现自己的报表类,该类必须实现 org.testng.IReporter 接口。)
  • log 方法是 Reporter 类的静态方法。因此,您可以通过 Reporter 类访问该方法。
  • log方法用于保存写入程序内部的日志信息,通过查看日志信息可以很容易地知道程序执行到底在什么地方停止了。

下面的屏幕截图显示了放置在 DemoA 类中的 Reporter.log 调用。

DemoA 测试类中编写的 Reporter.log 语句

对于 DemoB 类:

Reporter.log 语句写在 DemoB 测试类中

  • 现在,通过选择这两个类来创建 testng.xml 文件
  • 选择以...身份运行
  • 单击转换为 testng。
  • 然后通过选择以...身份运行并选择 testng suite 来运行此 testng.xml 文件。
  • 然后刷新项目打开测试输出文件夹。
  1. 在 test-output 文件夹中,打开 emailable-report.html。它看起来像:

    运行 DemoA 和 DemoB testng.xml 套件后,生成可通过电子邮件发送的报告。

    类似地,您也将拥有 Demo B 项目的输出。

  2. 在 test-output 文件夹中,打开 index.html 文件。它看起来会像这样:

    testng.xml 测试套件运行后生成的 index.html 报告

单击报告器输出。它将打开测试方法中写入的任何日志信息。

TestNG 报告器输出视图,列出测试方法记录的消息

点击时间。它将显示使用以下代码运行类中的测试方法所花费的时间 TestNG 报告工具。

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 持续整合 教程。

常见问题

文件夹仅在之后出现 TestNG 运行结束后,IDE 中的项目会刷新。空文件夹通常意味着该类是以普通程序的形式启动的。 Java 应用程序或默认监听器被关闭,因此没有报告器运行。

是的。 TestNG 默认情况下会将输出写入测试输出目录。可以在命令行中使用 -d 选项,也可以在 IDE 运行配置或启动测试套件的 Maven Surefire 设置中设置输出目录。

在监听器方法(例如 onTestFailure)中捕获图像,将文件保存到报告旁边,然后通过 Reporter.log 写入 HTML 图像标签。报告会渲染该标记,因此图片会显示在失败方法的旁边。

TestNG 它本身不会发送邮件。团队通常会从构建作业中附加 emailable-report.html 文件,例如: Jenkins 添加构建后电子邮件步骤,或者在 IReporter 实现中添加一个小型邮件例程。

AI模型按堆栈对故障进行分组trac通过比较相似性,将真正的缺陷与环境或时序故障区分开来,并确定哪些故障方法需要优先检查。这样,原本冗长的邮件报告列表就变成了团队需要处理的简短优先级队列。

GitHub 副驾驶 可以根据简短的注释生成监听器类、Reporter.log 语句和 testng.xml 条目。 Rev查看每一条建议,因为生成的监听器经常会遗漏确切的接口方法。 TestNG 期待。

一旦连接了 IRetryAnalyzer,每次重试都会与最终结果一起记录下来。因此,默认报告会显示每次尝试,所以不稳定的测试在同一次运行中可能既显示为失败又显示为通过。

在命令行中传递 `-usedefaultlisteners false` 参数,或者在 Maven Surefire 或 Ant 配置中将 `useDefaultListeners` 设置为 `false`。这样,只有您显式注册的报告器才会运行,从而缩短大型测试套件的运行时间。

总结一下这篇文章: