我如何要求Bazel重新运行缓存测试?

时间:2017-06-25 08:12:01

标签: bazel

我正在尝试分析并修复一个经常是绿色的片状测试 我的问题是,一旦测试通过,Bazel不会重新运行它,直到任何输入发生变化 我看到你可以要求Bazel重新运行一个目标但AFAICT只有在第一次它是绿色时(即减轻一个片状测试并且没有解决它)。

即使它通过,有没有办法要求Bazel进行测试? 我喜欢bazel test --force-attempts=50 //my-package:my-target

之类的东西

2 个答案:

答案 0 :(得分:15)

显然它有一面旗帜:)

https://docs.bazel.build/versions/master/user-manual.html#flag--cache_test_results

  

- cache_test_results =(yes | no | auto)( - t)

     

如果此选项设置为' auto' (默认)然后Bazel只会   如果符合以下任何条件,请重新运行测试:

     

Bazel检测测试中的测试或其依赖性的变化   标记为外部多次测试运行请求   --runs_per_test测试失败。如果' no',所有测试都将无条件执行。

     

如果'是',除了它之外,缓存行为将与auto相同   可以使用--runs_per_test缓存测试失败和测试运行。

     

请注意,测试结果始终保存在Bazel的输出树中,   无论是否启用此选项,您都无需使用    - 之前运行的bazel测试的--cache_test_results,以获得缓存命中。该选项仅影响Bazel之前是否使用   保存结果,而不是保存当前运行的结果。

     

默认情况下在.bazelrc文件中启用此选项的用户   可以找到方便的缩写-t(on)或-t-(off)   覆盖特定运行的默认值。

答案 1 :(得分:9)

除了--cache_test_results之外,Bazel实际上还有一个专门用于诊断片状测试的标志:--runs_per_test,它将重新运行测试N次,并且只保留失败运行的日志:

$ bazel test --runs_per_test=10 :flaker
INFO: Found 1 test target...
FAIL: //:flaker (run 10 of 10) (see /output/testlogs/flaker/test_run_10_of_10.log).
FAIL: //:flaker (run 4 of 10) (see /output/testlogs/flaker/test_run_4_of_10.log).
FAIL: //:flaker (run 5 of 10) (see /output/testlogs/flaker/test_run_5_of_10.log).
FAIL: //:flaker (run 9 of 10) (see /output/testlogs/flaker/test_run_9_of_10.log).
FAIL: //:flaker (run 3 of 10) (see /output/testlogs/flaker/test_run_3_of_10.log).
Target //:flaker up-to-date:
  bazel-bin/flaker
INFO: Elapsed time: 0.828s, Critical Path: 0.42s
//:flaker                                                                FAILED

Executed 1 out of 1 tests: 1 fails locally.

您可以使用它快速找出测试是多么脆弱,并获得一些失败的日志。