本节介绍 Jtest 桌面版用户的测试影响分析工作流程。有关在命令行进行测试影响分析的信息,请参阅通过 Maven 进行测试和分析通过 Gradle 进行测试和分析

章节目录:

简介

Jtest 的测试影响分析通过自动检测受修改代码影响的测试用例来帮助您优化测试工作。您只需确认并重新运行受变更影响的测试。

Jtest 通过以下方式识别受代码变更影响的单元测试:

  • Jtest 在单元测试执行期间收集的代码覆盖率数据。特定的代码段与执行该代码的单元测试相关联。
  • 单元测试命名约定。例如,如果您修改的类名为 com.mypackage.MyClass,则在单元测试助手首选项指定的测试源文件夹中,将会识别测试类 com.mypackage.MyClassTest、com.mypackage.MyClassParameterizedTest 和 com.mypackage.MyClassSpringTest。如果您修改的方法名为 performFoo(),将会标识测试方法 testPerformFoo()。

受影响的单元测试视图将结合两种测试识别方式的结果。

尽管受影响的单元测试视图将根据单元测试命名约定自动显示测试,但代码覆盖率数据提供了更准确的结果,并可能识别需要运行的其他测试。因此,建议在查看受影响的测试前,确保将最近完整单元测试运行中的代码覆盖率数据导入 IDE。

要求

要进行测试影响分析,项目需存储在与 IDE 集成的版本控制系统中。

  • Eclipse 4.23 (2022-03) 或 IntelliJ IDE 2022.11
  • Git
  • JUnit 4 或 5

1 在使用 Java 16 或更高版本的 IDE 中运行时,受影响的单元测试视图无法正确填充。有关解决办法的信息,请参阅已知局限性

导入覆盖率

为获得最准确的结果,需确保您修改的源代码相关的覆盖率数据在 IDE 的覆盖率视图中可用。您需要将 Jtest 集成到您的单元测试执行中,以收集 XML 文件中的覆盖率数据或将其报告给 DTP,然后将数据导入您的 IDE。

测试和代码之间的关联信息会在 IDE 重启后持续存在——即使覆盖率视图在重启后不显示任何覆盖率数据。您可以通过将覆盖率数据从文件或 DTP 重新导入 IDE 来刷新关联。

定期重新导入最近一次测试运行的覆盖率数据可以确保与版本控制系统中源代码和测试的最新关联保持同步。

通过文件导入

在 CI 服务器上使用集成了 Jtest 的构建工具(Maven、Ant 或 Gradle)运行单元测试时,会生成 coverage.xml 文件。如果所有单元测试都在一次测试运行中执行,您可以选择从文件中导入覆盖率数据。

  1. 将 Jtest 与您的构建系统集成(请参阅与构建系统集成)。
  2. 配置单元测试执行作业,使用 MavenGradleAnt 收集覆盖率数据。作业运行时,已执行测试的覆盖率将保存在服务器作业位置的 coverage.xml 文件中。
    (tick)配置您的作业,将文件保存在便于下载的位置。

  3. 使用从本地文件或 URL 导入选项将文件中的覆盖率数据导入 IDE(请参阅导入覆盖率)。可以从构建服务器下载文件,然后指定本地文件的路径,或指定存储在构建服务器上的文件的 URL。

通过 DTP 导入

如果您想要收集多个测试运行的覆盖率,可以选择从 DTP 导入覆盖率数据的选项。

  1. 启用与 DTP 的连接(请参阅连接 DTP)。
  2. 将 Jtest 与 Maven、Ant 或 Gradle 集成(请参阅与构建系统集成)。
  3. 确保 Jtest 配置为向 DTP 发送覆盖率数据(请参阅将覆盖率信息发送到 DTP)。
  4. 配置单元测试执行作业。作业运行时,已执行测试的覆盖率数据将会发送到 DTP,并与之前的运行数据合并。
  5. 使用从 DTP 导入选项将文件中的覆盖率数据导入 IDE(请参阅导入覆盖率)。

监控和运行受影响的测试

您可以在受影响的单元测试视图中监控和重新运行因代码变更而受到影响的测试。在 IDE 菜单栏中选择 Parasoft> 显示视图> 受影响的单元测试可打开该视图。

监控受影响的测试

Jtest 自动监控工作空间中所有打开的项目。默认情况下,该视图会实时显示哪些测试受到当前代码修改的影响 – 每次进行会影响测试的代码变更时,视图都会刷新以显示受影响的测试。若要关闭自动检测受影响测试的功能,可禁用视图菜单中的自动检测受影响的测试选项。

禁用该选项后则需要点击刷新按钮手动刷新。

您可以右键点击检测到的测试,选择转到,在编辑器中查看测试代码:

此外,受影响的单元测试视图还会显示:

  • 包含受影响测试的项目数量
  • 受影响的测试方法和测试类的总数
  • 测试当前状态(通过/失败/未运行)

运行受影响的测试

要运行视图中显示的所有受影响的测试,可点击视图菜单中的运行所有测试按钮。

要运行受影响测试的子集,需选择要分析的项目、包、类和/或方法节点,点击视图菜单中的运行所选测试

如果在受影响的测试视图中运行测试失败,可以运行和诊断单个测试。右键点击相应测试,然后选择使用单元测试助手运行

若要停止测试执行,则点击视图菜单中的停止按钮。 

注意:非默认包中的非公共 JUnit 5 测试类无法在受影响的单元测试视图中运行。在视图中,它们显示为不可用状态。

实时单元测试

视图菜单中的实时单元测试按钮可以持续执行所有受影响的测试,并在后台自动收集它们的覆盖率数据。每次视图中受影响的测试更新时(启用自动检测受影响的测试选项,或者使用刷新按钮)都会运行测试。

测试运行后,视图中显示的测试状态将自动更新。

收集覆盖率 

要为覆盖率视图收集覆盖率,需选择菜单中的收集覆盖率选项。这样,覆盖率视图就能向受影响的单元测试视图提供覆盖率数据,从而关联测试与覆盖的代码。

在任务和任务详情视图中显示错误 

如果在受影响的测试视图运行测试失败,测试的结果和错误栈跟踪将显示在任务和任务详情视图中以供分析。

任务视图中显示任务的列表。

单个任务的详细信息可以显示在任务详情视图中。

配置受影响的测试

要指定收集受影响测试的 Git 提交范围,可点击配置链接,并在受影响的测试设置对话框进行配置。

  • 修改的方法 
    • 相较于 - 针对所有在比较磁盘上的文件与指定提交中的内容时所发现已修改方法显示测试。
    • 自当前分支分叉于 - 针对项目当前分支从指定分支分叉以来所修改的所有方法显示测试。必须指定当前分支的来源分支。
  • 提交或分支 - 您可以指定用于相较于自当前分支分叉于设置的提交、分支、或标签。提交或分支下拉菜单保存了输入历史。它包含两个用于相较于设置的预设值:
    • “本地分支上的最新提交”- 针对本地修改但未提交的代码显示测试。
    • “远程分支上的最新提交”- 针对本地修改但未提交的代码以及未推送到远程分支的任何本地提交中的更改显示测试。

注意: 

  • 不支持 Git reflog 引用。
  • 如果遇到未发现分支或提交的错误,应先确保您的本地 Git 资源库为最新状态
  • 请考虑以下关于使用修改的方法提交或分支设置的建议:
    • 如果您只有本地修改,并且希望在提交前针对受影响的代码显示测试,我们建议使用“相较于”和“本地分支上的最新提交”设置。
    • 如果您有尚未推送的本地提交,并且希望针对这些提交显示测试,包括当前任何本地更改,我们建议使用“相较于”和“远程分支上的最新提交”设置。
    • 如果您已将提交推送到某个分支,例如功能或开发分支,并且现在功能或修复已完成,您希望针对该分支中所做的所有更改显示测试,我们建议使用“自当前分支分叉于”并指定当前分支的父分支。例如,如果您使用的是从 master 分支分叉的“feature/foo”功能分支,则可以指定“master”。
  • No labels