Rust 不稳定测试
Tuist 可以检测不一致的 Cargo 测试结果,并帮助你在 测试 → 不稳定测试 中进行排查。
- 配置 Rust 测试洞察。
不稳定测试检测的工作原理#
Tuist 会比较同一提交上的 CI 运行结果。如果某个测试在一次运行中通过而在另一次运行中失败,它可能会被标记为不稳定。
通过常用命令报告每次运行:
tuist cargo test --workspace
Cargo 不会自动重试失败的测试。在同一提交上重新运行 CI 任务可以提供另一个结果,用于跨运行检测。
管理不稳定测试#
自动清除#
检测和恢复通过项目的“不稳定测试检测”自动化流程运行。默认情况下,如果在 14 天内没有再次触发,不稳定标志将被清除。在 设置 → 自动化 下编辑恢复窗口和操作。
手动管理#
打开 测试 → 不稳定测试 查看测试的历史记录。你可以从其详情页面手动将其标记或取消标记为不稳定。
隔离和压力测试#
从测试的详情页面静音或跳过该测试,或在 设置 → 自动化 中配置隔离。下一次 tuist cargo test 将获取项目当前的隔离状态:
- 已静音 的测试仍会运行并报告其实际结果,但其失败不会导致命令失败。其他测试失败、编译错误、崩溃和不完整的结果仍会正常导致失败。
- 已跳过 的测试会被排除在执行之外,并作为隔离跳过来报告。匹配包括包、目标、Rust 模块路径和测试名称,因此名称相似的测试保持独立。
静音会保留所选的工作区包和功能,并运行所有选定的目标,即使某个被静音的目标失败也是如此。跳过隔离需要选择一个包:使用 tuist cargo test -p store 而不是多包工作区命令。Tuist 拒绝多包跳过,因为缩小命令范围可能会改变 Cargo 的统一依赖功能。
隔离也适用于 分片的 Cargo 运行。如果 Tuist 无法获取状态,它会发出警告并在不隔离的情况下运行;失败不会被抑制。若要故意在不隔离的情况下运行:
TUIST_TEST_SKIP_QUARANTINE=1 tuist cargo test --workspace
强制执行需要标准的 libtest 测试 harness 和捕获的默认输出。当需要应用隔离时,带有安静、详细、替代格式或未捕获输出的命令会失败。如果目标归属不明确,请使用 -p <package> 选择确切的工作区包。不支持自定义 harness、包/目标名称通配符和未解析的包选择。文档测试也可以被静音或跳过,但 Rustdoc 的测试过滤无法区分每一对可能的示例名称。如果跳过某个示例也会跳过已启用的示例,或者部分文档测试排除使用 --exact,Tuist 会因诊断信息而失败,而不是执行被跳过的示例或静默省略已启用的测试;在调查期间使用上述覆盖方法。
Tuist 不会对新的 Cargo 测试进行压力测试。在调查失败的测试时,使用 Cargo 测试过滤器来重复运行该测试:
tuist cargo test -p store rejects_invalid_token
Slack 通知#
配置 Slack 不稳定测试警报,以便在测试变得不稳定时通知你的团队。