mcpField
C
compare-test-runs

compare-test-runs

github.com/tuist测试与质量35248 次安装31 周前更新
代码仓库

关于 compare-test-runs

借助 Tuist CLI 对比两次测试运行的技能,适用于需要评估代码变更对测试结果影响的开发者。它汇总整体指标、模块与套件结果、失败和波动测试,并指导检查错误详情与附件。

主要功能

  1. 01解析测试运行标识或分支
  2. 02比较状态、耗时与测试数量
  3. 03按模块和套件检查结果
  4. 04分类失败、修复与波动测试
  5. 05检查失败详情及附件

适用场景

  1. 01评估分支变更是否引入测试回归
  2. 02定位新失败或新增波动测试
  3. 03检查测试运行耗时变化
  4. 04整理失败证据并提出后续建议

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tuist/agent-skills --skill compare-test-runs

安装后在 Claude Code 中输入/compare-test-runs确认已加载。

详细介绍

比较测试运行

快速开始

通常会收到两个测试运行标识符。请按以下步骤操作:

  1. 分别对 base 和 head 测试运行执行 tuist test show <id> --json。
  2. 执行 tuist test module list <test-run-id> --json 和 tuist test suite list <test-run-id> --json,获取模块和测试套件明细。
  3. 执行 tuist test case run list <identifier> --json,获取各个测试用例的结果。
  4. 比较失败、易波动测试、耗时和整体状态。
  5. 使用 tuist test case run show <id> --json 检查失败的测试用例。
  6. 总结发现并提出可执行的建议。

第 1 步:解析测试运行

如果 base/head 是测试运行 ID 或仪表板 URL

直接获取:

tuist test show <base-id> --json
tuist test show <head-id> --json
如果 base/head 是分支名称

列出每个分支上最近的测试运行,以确定测试运行 ID:

tuist test list --git-branch <base-branch> --json --page-size 5
tuist test list --git-branch <head-branch> --json --page-size 5

从每个分支的结果中选取最新的测试运行 ID。

默认值
  • 如果未提供 base,则使用项目的默认分支(通常为 main)。
  • 如果未提供 head,则检测当前 git 分支。

第 2 步:比较顶层指标

获取两个测试运行后,比较以下内容:

指标检查内容
status如果 base 通过而 head 失败,则标记
duration如果 head 耗时增加超过 10%,则标记
total_test_count注意测试数量是否变化(新增或移除测试)
failed_test_count比较失败数量
flaky_test_count比较易波动测试数量
avg_test_duration标记显著变化

第 3 步:获取模块和测试套件明细

获取两个测试运行的模块和测试套件级结果,了解哪些部分出现退化:

tuist test module list <base-test-run-id> --json
tuist test module list <head-test-run-id> --json

tuist test suite list <base-test-run-id> --json
tuist test suite list <head-test-run-id> --json

根据名称匹配两个运行中的模块和测试套件,以确定哪些部分出现新增失败或耗时退化。

第 4 步:获取各个测试用例的结果

获取两个测试运行的测试用例运行结果:

tuist test case run list <identifier> --json --page-size 100

根据 name + module_name + suite_name 匹配两个运行中的测试用例。

第 5 步:分类变化

将测试用例分为以下类别:

  1. 新增失败:在 base 中通过、但在 head 中失败的测试。
  2. 已修复测试:在 base 中失败、但在 head 中通过的测试。
  3. 新增易波动测试:在 base 中不易波动、但在 head 中易波动的测试。
  4. 不再易波动:在 base 中易波动、但在 head 中稳定的测试。
  5. 新增测试:在 head 中存在、但在 base 中不存在的测试。
  6. 已移除测试:在 base 中存在、但在 head 中不存在的测试。
  7. 耗时退化:耗时增加超过 50% 的测试。

第 6 步:检查失败

对于每个新增失败,获取详细信息:

tuist test case run show <test-case-run-id> --json

需要检查的关键字段:

  • failures[].message -- 断言或错误消息
  • failures[].path -- 源文件路径
  • failures[].line_number -- 失败的确切行号
  • failures[].issue_type -- 问题类型
  • repetitions -- 如果存在,则显示重试行为(易波动检测)
  • crash_report -- 测试运行器崩溃时的崩溃数据

第 7 步:检查附件

tuist test case run show 的输出包含附件和崩溃报告信息。请检查:

  • 截图或 UI 测试产物
  • 日志文件或崩溃报告
  • 附加到失败运行的任何诊断数据

总结格式

请按以下内容生成总结:

  1. 总体结论:与 base 相比,情况更好、更差或没有变化。
  2. 新增失败:逐项列出,并附上失败消息、文件路径和行号。
  3. 新增易波动测试:列出测试并说明易波动情况。
  4. 已修复测试:列出现在已通过的测试。
  5. 耗时:整体耗时及值得注意的单项测试退化情况。
  6. 建议:针对每个问题提出可执行的后续步骤。

示例:

Test Run Comparison: base (run-123 on main) vs head (run-456 on feature-x)

Status: success -> failure -- REGRESSION
Duration: 120.5s -> 145.2s (+21%)
Tests: 342 -> 345 (3 new tests)
Failures: 0 -> 2 (2 new failures)
Flaky: 1 -> 3 (2 newly flaky)

New Failures:
1. AuthModuleTests/LoginTests/test_login_with_expired_token
   Message: "Expected status 401, got 500"
   File: Tests/AuthModuleTests/LoginTests.swift:42
   Likely cause: Server error handling changed for expired tokens

2. NetworkTests/RetryTests/test_retry_on_timeout
   Message: "Timed out waiting for retry"
   File: Tests/NetworkTests/RetryTests.swift:87
   Likely cause: Timeout threshold too low after network layer refactor

Newly Flaky:
1. CacheTests/WriteCacheTests/test_concurrent_writes (flaky in 3/5 runs)

Recommendations:
- Fix expired token handling in AuthModule
- Increase timeout in RetryTests or mock the network layer
- Investigate concurrent write synchronization in CacheTests

完成检查清单

  • 已解析 base 和 head 测试运行
  • 已比较顶层指标
  • 已获取两个运行的模块和测试套件明细
  • 已确定新增失败、已修复测试和易波动变化
  • 已检查新增失败的详细信息
  • 已提供包含文件路径的可执行建议

评论

支持 Markdown