Go 排查偶发测试时,记得先关掉结果缓存

50 次浏览2 条回复

Go 测试刚失败过,马上重跑却显示 (cached),这次其实没有重新执行。排查偶发问题时可以这样跑:

go test -count=1 ./...

-count=1 会让测试在本次命令里实际执行一次,适合确认修复或复现不稳定用例。环境:Go 1.10+。它不会清掉整个构建缓存;如果只想处理测试结果,通常没必要先跑 go clean -cache。需要连续复现时也可以把次数调大,比如 -count=20。

这个参数和 -run 配合也挺实用:先用 go test -count=1 -run 'TestFoo' ./path/to/pkg 缩小到具体用例,确认不是缓存后再扩大范围。要是怀疑执行顺序或共享状态,再单独加 -shuffle=on,别把缓存问题和顺序问题混在一起查。

雾很大Lv1#1

这个参数和 -run 配合也挺实用:先用 go test -count=1 -run 'TestFoo' ./path/to/pkg 缩小到具体用例,确认不是缓存后再扩大范围。要是怀疑执行顺序或共享状态,再单独加 -shuffle=on,别把缓存问题和顺序问题混在一起查。

补一个容易混淆的点:-count=1 只是不复用测试结果,不等于完全禁用 Go 的构建缓存。要确认测试代码确实重新编译了,可以看输出里的编译动作,或在改了生成文件、环境变量后先确认输入已经更新。平时 CI 用 go test -count=1 ./... 通常就够了,没必要每次都 go clean -cache。