用途
compare-test-case 用于对比单个测试用例在两个分支之间的行为,分析通过/失败状态、执行时长、不稳定(flaky)情况以及失败详情。适合在排查测试用例在某个分支上出现回归或新增不稳定时使用。
主要能力
- 解析测试用例身份:支持通过测试用例 ID 或仪表盘 URL,或通过标识符(Module/Suite/TestCase)来定位测试用例。
- 获取测试用例指标:可读取 id、name、module_name、suite_name、reliability_rate、flakiness_rate、total_runs、failed_runs、is_flaky、is_quarantined 等字段。
- 按分支收集运行记录:通过 run list 命令列出测试用例的运行,并依据 git_branch 字段区分基分支与头分支。
- 跨分支对比:计算并比较两个分支的通过率、平均时长、不稳定运行次数以及最近一次状态。
- 失败详情检查:查看失败运行的 message、path、line_number、issue_type,以及 repetitions(重试行为)与 crash_report(崩溃数据)。
- 根因分析与建议:根据对比结果对新失败、新不稳定、时长回归、已修复、稳定等变化进行分类,并给出根因假设与修复建议。
使用方式
-
解析测试用例:
- 通过 ID 或仪表盘 URL:
tuist test case show <test-case-id> --json - 通过标识符:
tuist test case show Module/Suite/TestCase --json - 若未提供测试用例,可发现不稳定或失败的测试:
tuist test case list --flaky --json --page-size 10
- 通过 ID 或仪表盘 URL:
-
获取每个分支上的运行:
tuist test case run list <identifier> --json --page-size 20- 按分支分离运行,并计算通过率、平均时长、不稳定运行次数与最近状态。
-
对比分支行为:
- 对比通过率、平均时长、不稳定运行数、最近状态,并给出结论(如 REGRESSION、NEW FLAKINESS)。
- 变化分类包括:Newly failing(基分支 100% 通过,头分支低于 100%)、Newly flaky(基分支无不稳定,头分支出现不稳定)、Duration regression(平均时长增加超过 50%)、Fixed(基分支失败,头分支通过)、Stable(两分支行为一致)。
-
检查失败详情:
tuist test case run show <test-case-run-id> --json- 查看 failures[].message、failures[].path、failures[].line_number、failures[].issue_type、repetitions、crash_report。
-
识别根因:
- 新失败:检查基分支与头分支之间的提交,关注测试文件或被测试代码的变更;查看失败信息。
- 新不稳定:常见模式包括时序/异步问题、共享状态、环境依赖;检查 repetitions 是否呈现间歇性通过/失败。
- 时长回归:检查 setup/teardown 时间是否增加、测试是否做了更多工作(新增断言、更大数据集)、依赖是否变慢。
-
输出摘要:
- 测试用例信息(名称、模块、套件、整体可靠性)。
- 基分支行为(通过率、平均时长、不稳定次数)。
- 头分支行为(通过率、平均时长、不稳定次数)。
- 结论(变化内容与分类)。
- 根因(基于失败分析的假设)。
- 建议(具体文件路径、行号与修复建议)。
适用场景
- 某个测试用例在特性分支上突然失败或变得不稳定时。
- 需要确认测试用例在两个分支之间的通过率或执行时长是否发生回归时。
- 需要查看失败运行的具体信息(消息、路径、行号、重试行为、崩溃数据)时。
- 需要生成包含根因假设与修复建议的对比摘要时。
限制
- 该技能依赖 Tuist 命令行工具及其相关命令输出,资料中未提供其他平台的实现方式。
- 资料中未说明是否需要额外权限或环境配置。
- 资料中未提供如何处理没有运行记录的分支。
- 资料中未提供关于性能开销或并发调用的说明。
- 资料中未提供计费、价格、平台支持或效果保证等信息。
快速开始
通常会收到一个测试用例标识符和两个分支。步骤:
- 运行
tuist test case show <id-or-identifier> --json获取测试用例指标。 - 运行
tuist test case run list <identifier> --json查看跨分支的运行。 - 对比基分支与头分支的行为。
- 使用
tuist test case run show <run-id> --json检查失败。 - 通过根因分析总结发现。
默认设置:
- 如果未提供基分支,使用项目默认分支(通常为 main)。
- 如果未提供头分支,检测当前 git 分支。
示例摘要:
Test Case Comparison: AuthModuleTests/LoginTests/test_login_with_expired_token
Overall reliability: 85% (was 100% before head branch)
Base (main): Pass rate: 100% (15/15 runs) Avg duration: 0.3s Flaky: No
Head (feature/auth-refactor): Pass rate: 60% (3/5 runs) Avg duration: 0.5s Flaky: Yes (2 flaky runs)
Verdict: NEWLY FLAKY -- test was stable on main but intermittently fails on feature branch
Root cause: The auth refactor introduced an async token refresh that races with the test's synchronous assertion. Failures show "Expected status 401, got nil" at Tests/AuthModuleTests/LoginTests.swift:42, suggesting the response arrives before the token refresh completes.
Recommendations:
- Add an await/expectation before the assertion at LoginTests.swift:42
- Consider mocking the token refresh to make the test deterministic
完成清单
- 已解析测试用例身份
- 已收集两个分支上的运行
- 已对比通过率、时长与不稳定情况
- 已检查失败运行的失败详情
- 已识别根因并给出文件路径与行号
- 已提供可操作的修复建议