Compare Test Runs 是一个用于对比两次测试运行的技能,主要帮助开发者识别两次运行之间的差异,包括新增失败、新增不稳定(flaky)测试、已修复测试以及耗时回归。
用途 该技能用于比较 base 与 head 两次测试运行,判断整体状态是变好、变差还是持平,并定位具体是哪些模块、套件或测试用例发生了变化。
主要能力
- 对比顶层指标:状态(status)、耗时(duration)、测试总数(total_test_count)、失败数(failed_test_count)、不稳定数(flaky_test_count)、平均测试耗时(avg_test_duration)。
- 获取模块与套件级别的细分结果,定位发生回归的区域。
- 获取单个测试用例结果,并按名称 + module_name + suite_name 在两个运行之间匹配。
- 将测试用例变化分类为:新增失败、已修复测试、新增不稳定、不再不稳定、新增测试、移除测试、耗时回归(耗时增加超过 50%)。
- 检查失败详情,包括失败消息、源文件路径、行号、问题类型、重试行为(repetitions)以及崩溃报告(crash_report)。
- 检查附件,如截图、UI 测试产物、日志文件或崩溃报告等诊断数据。
- 输出总结,包含整体结论、新增失败列表、新增不稳定测试、已修复测试、耗时变化以及可操作建议。
使用方式 通常需要提供两个测试运行标识。基本流程如下:
- 对 base 和 head 分别运行 tuist test show <id> --json。
- 运行 tuist test module list <test-run-id> --json 和 tuist test suite list <test-run-id> --json 获取模块与套件细分。
- 运行 tuist test case run list <identifier> --json 获取单个测试用例结果。
- 对比失败、不稳定测试、耗时和整体状态。
- 使用 tuist test case run show <id> --json 检查失败测试用例。
- 汇总发现并给出可操作建议。
解析测试运行:
- 如果 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 分支。
对比顶层指标时,需检查:base 通过但 head 失败则标记;head 慢于 10% 以上则标记;测试数量变化需注意;对比失败数、不稳定数;平均测试耗时显著变化需标记。
获取模块与套件细分:对两个测试运行分别运行 tuist test module list <test-run-id> --json 与 tuist test suite list <test-run-id> --json,按名称匹配模块和套件,找出新增失败或耗时回归的区域。
获取单个测试用例结果:运行 tuist test case run list <identifier> --json --page-size 100,按名称 + module_name + suite_name 在两个运行之间匹配测试用例。
分类变化:新增失败(base 通过、head 失败)、已修复测试(base 失败、head 通过)、新增不稳定(base 不稳定、head 不稳定)、不再不稳定(base 不稳定、head 稳定)、新增测试(head 有而 base 无)、移除测试(base 有而 head 无)、耗时回归(耗时增加超过 50%)。
检查失败:对每个新增失败运行 tuist test case run show <test-case-run-id> --json,重点查看 failures[].message(断言或错误消息)、failures[].path(源文件路径)、failures[].line_number(失败行号)、failures[].issue_type(问题类型)、repetitions(若存在,显示重试行为,用于不稳定检测)、crash_report(测试运行器崩溃时的崩溃数据)。
检查附件:tuist test case run show 输出包含附件和崩溃报告信息,需查看截图或 UI 测试产物、日志文件或崩溃报告、以及失败运行附带的任何诊断数据。
总结格式:输出应包含整体结论(相比 base 是更好、更差还是持平)、新增失败(每条含失败消息、文件路径、行号)、新增不稳定测试(含不稳定上下文)、已修复测试、耗时(整体及显著的单个测试回归)、建议(针对每个问题的可操作后续步骤)。
示例: 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:
-
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
-
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:
- 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 测试运行;已对比顶层指标;已获取两个运行的模块与套件细分;已识别新增失败、已修复测试和不稳定变化;已检查新增失败的失败详情;已提供带文件路径的可操作建议。
适用场景 适用于使用 tuist 测试工具链的项目,在代码变更后对比两次测试运行,快速定位回归、不稳定测试和耗时问题,尤其适合 CI 流程中的测试结果分析。
限制 该技能依赖 tuist 命令行工具及其 JSON 输出,需要提供测试运行标识或分支信息。资料未说明其支持的其他测试平台或非 tuist 环境。