Gradle 不稳定测试
Flaky 测试是指用相同代码多次运行时产生不同结果(通过或失败)的测试。它们会削弱对测试套件的信任,并浪费开发人员时间调查虚假失败。Tuist 会自动检测 flaky 测试并帮助你跟踪它们。

Flaky 检测的工作原理
Section titled “Flaky 检测的工作原理”Tuist 通过两种方式检测 flaky 测试:
当你使用重试功能运行测试时,Tuist 会分析每次尝试的结果。如果一个测试在某些尝试中失败但在其他尝试中通过,则会被标记为 flaky。
你可以使用 Test Retry 插件 或类似的机制来重新运行失败的测试。Tuist 会检测在某些尝试中通过但在另一些尝试中失败的测试。
将插件添加到你的 build.gradle.kts:
plugins { id("org.gradle.test-retry") version "1.6.2"}
tasks.test { retry { maxRetries = 3 maxFailures = 5 failOnPassedAfterRetry = false }}
即使没有测试重试,Tuist 也可以通过比较同一提交在不同 CI 运行中的结果来检测 flaky 测试。如果一个测试在一次 CI 运行中通过但在同一提交的另一次运行中失败,则两次运行都会被标记为 flaky。
这对于捕获那些 flaky 程度不够一致以至于重试无法发现,但仍会导致间歇性 CI 失败的测试特别有用。
管理 flaky 测试
Section titled “管理 flaky 测试”Tuist 会自动清除 14 天不再是 flaky 的测试的 flaky 标记。这确保了已修复的测试不会被永久标记为 flaky。
你也可以从测试用例详情页手动标记或取消标记测试为 flaky。这在以下情况下很有用:
- 你想在修复 flaky 测试时确认一个已知的 flaky 测试
- 由于基础设施问题,测试被错误地标记
隔离 flaky 测试
Section titled “隔离 flaky 测试”隔离允许你将 flaky 测试隔离开,这样它们就不会阻塞你的 CI 管道,同时你正在修复它们。启用隔离后,Tuist Gradle 插件会在每个测试任务之前自动从服务器获取隔离的测试列表,并使用 Gradle 的 excludeTestsMatching 过滤器排除它们。
当在项目的 Automations 设置中启用时,测试在被标记为 flaky 时会自动隔离。这确保了新检测到的 flaky 测试立即被隔离,无需手动干预。
要启用自动隔离:
- 转到你的项目设置
- 导航到 Automations 选项卡
- 启用 Auto-quarantine flaky tests
你也可以从测试用例详情页使用 Quarantine 和 Unquarantine 按钮手动隔离或取消隔离测试。这在以下情况下很有用:
- 你想在一个测试被自动检测为 flaky 之前隔离它
- 你想在修复底层问题后取消隔离测试
跳过隔离的测试
Section titled “跳过隔离的测试”隔离在 CI 上自动启用(当设置了 CI 环境变量时),本地构建时禁用。插件在测试运行之前从 Tuist 服务器获取隔离的测试列表并排除它们。
你可以在 settings.gradle.kts 中显式控制此行为:
tuist { testQuarantine { enabled = true // 或 false 禁用 }}当未设置 enabled 时,它默认为自动检测:CI 上启用,本地禁用。
Slack 通知
Section titled “Slack 通知”通过在 Slack 集成中设置