用途:当用户要求调查、排查或修复 Go 不稳定测试(flaky test)时使用。资料指出,Teleport 中的不稳定测试常在性能较强的开发机上本地通过,却在资源受限的 CI/CD 硬件上失败;问题有时源于测试写法,有时则暴露实现本身的缺陷。
主要步骤:先尝试复现失败,定位该测试,并在包含测试的目录中编译测试二进制:go test -c -o flaky.test .;再用 stress 工具运行:stress -failfast -p 30 ./flaky.test -test.run TestNameHere。若未安装 stress,可用 go install golang.org/x/tools/cmd/stress@latest 安装。必要时可提高 -p(并行度)以复现,但不宜过高,超过 -p 100 容易在通用初始化逻辑而非测试本身中引发失败。随后阅读测试、添加打印语句验证假设,尝试修复,并重复第 2 步确认不再出现不稳定;若仍出现则继续迭代,直到稳定通过。完成后总结不稳定原因与修复方案,删除 flaky.test 二进制,且不要提交 commit,交由开发者审查调整。
规则与限制:优先采用确定性改动,如基于 channel 的通知或 testing/synctest,而非 require.Eventually 这类重试方案;延长测试超时通常是反模式,应修复实现中的缺陷或重写测试使其更快。也可让测试做更少的事,例如优化底层代码、更好地隔离被测特性,或关闭默认启用但对被测特性不必要的功能。