You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bazel构建输出中获取所有测试与目标的执行结果

问题描述

我在CI环境中通过Bazelisk运行Bazel,无法获取合理的构建输出结果。我希望能够在输出中查看所有测试和构建目标的执行结果(即便是通过缓存命中完成的任务),以便开发人员确认自己编写的代码已经被测试覆盖。

最容易想到的方案是设置--show_task_finish参数,但该参数暂不可用,我尚未找到可以可靠打印测试或目标执行结果的参数。且由于输出量过大,我无法打印通过测试的stdout/stderr信息。

近期我遇到的一段经过脱敏的输出如下,如果我想要确认某个特定目标是否已经被测试,这段输出几乎完全没用:

bazel test //...
(23:19:36) INFO: Options provided by the client:
  Inherited 'common' options: --isatty=0 --terminal_columns=0
(23:19:36) INFO: Reading rc options for 'test' from /home/bazelisk/project/.bazelrc:
  Inherited 'common' options: --attempt_to_print_relative_paths --show_timestamps --experimental_allow_tags_propagation
(23:19:36) INFO: Reading rc options for 'test' from /home/bazelisk/.bazelrc:
  Inherited 'common' options: --color=yes --curses=no --show_progress_rate_limit=0.25 --show_task_finish --announce_rc
(23:19:36) INFO: Reading rc options for 'test' from /home/bazelisk/project/.bazelrc:
  Inherited 'build' options: --keep_going --verbose_failures --local_cpu_resources=HOST_CPUS*0.5 --local_ram_resources=HOST_RAM*0.5
(23:19:36) INFO: Reading rc options for 'test' from /home/bazelisk/.bazelrc:
  Inherited 'build' options: --local_cpu_resources=HOST_CPUS --local_ram_resources=HOST_RAM*.67
(23:19:36) INFO: Reading rc options for 'test' from /home/bazelisk/project/.bazelrc:
  'test' options: --test_output=errors --test_summary=detailed --test_env=LANG=en_US.utf8 --test_env=LOCALE_ARCHIVE
(23:19:36) INFO: Reading rc options for 'test' from /home/bazelisk/.bazelrc:
  'test' options: --test_verbose_timeout_warnings
(23:19:36) INFO: Current date is <blah>
(23:19:36) Loading: 
(23:19:36) Loading: 0 packages loaded
(23:19:47) Analyzing: 48 targets (0 packages loaded)
(23:19:47) INFO: Build option --test_env has changed, discarding analysis cache.
(23:19:47) Analyzing: 48 targets (0 packages loaded, 0 targets configured)
(23:19:48) INFO: Analyzed 48 targets (0 packages loaded, 13812 targets configured).
(23:19:48) INFO: Found 25 targets and 23 test targets...
(23:19:48) [0 / 3] [Prepa] BazelWorkspaceStatusAction stable-status.txt
(23:19:50) [2,529 / 2,551] 2 / 23 tests; Testing // ... (22 actions running)
(23:19:53) [2,532 / 2,551] 5 / 23 tests; Testing // ... (19 actions running)
(23:19:56) [2,533 / 2,551] 5 / 23 tests; Testing // ... (18 actions running)
(23:19:59) [2,534 / 2,551] 6 / 23 tests; Testing // ... (17 actions running)
(23:20:05) [2,535 / 2,551] 8 / 23 tests; Testing // ... (16 actions running)
(23:20:11) [2,536 / 2,551] 8 / 23 tests; Testing // ... (15 actions running)
(23:20:16) [2,539 / 2,551] 11 / 23 tests; Testing // ... (12 actions running)
(23:20:22) [2,541 / 2,551] 14 / 23 tests; Testing // ... (10 actions running)
(23:20:32) [2,544 / 2,551] 17 / 23 tests; Testing // ... (7 actions running)
(23:20:44) [2,546 / 2,551] 18 / 23 tests; Testing // ... (5 actions running)
(23:20:54) [2,546 / 2,551] 18 / 23 tests; Testing // ... (5 actions running)
(23:21:06) [2,547 / 2,551] 19 / 23 tests; Testing // ... (4 actions running)
(23:21:29) [2,549 / 2,551] 21 / 23 tests; Testing // ... (2 actions running)
(23:21:59) [2,549 / 2,551] 21 / 23 tests; Testing // ... (2 actions running)
(23:22:27) [2,549 / 2,551] 21 / 23 tests; Testing // ... (2 actions running)
(23:22:50) INFO: Elapsed time: 193.959s, Critical Path: 181.09s
(23:22:50) INFO: 24 processes: 24 processwrapper-sandbox.
(23:22:50) INFO: Build completed successfully, 24 total actions
Test cases: finished with 417 passing and 0 failing out of 417 test cases

Executed 23 out of 23 tests: 23 tests pass.
(23:22:50) INFO: Build completed successfully, 24 total actions

CircleCI received exit code 0

本次运行的完整展开参数

bazel test \
  --announce_rc \
  --attempt_to_print_relative_paths \
  --color=yes \
  --curses=no \
  --experimental_allow_tags_propagation \
  --isatty=0 \
  --keep_going \
  --local_cpu_resources=HOST_CPUS \
  --local_ram_resources=HOST_RAM*.67 \
  --show_progress_rate_limit=0.25 \
  --show_task_finish \
  --show_timestamps \
  --terminal_columns=0 \
  --test_env=LANG=en_US.utf8 \
  --test_env=LOCALE_ARCHIVE \
  --test_output=errors \
  --test_summary=detailed \
  --test_verbose_timeout_warnings \
  --verbose_failures \
  //...
解决方案

可以通过以下三种方案实现需求,你可以根据自己的场景选择:

  • 新增--show_result=2147483647参数
    该参数控制Bazel在控制台输出的目标结果数量上限,默认值较低仅展示失败目标,将值设置为最大整数即可输出所有测试、构建目标的状态,包括缓存命中、执行成功、执行失败的目标,输出仅包含目标路径和状态,不会打印stdout/stderr,不会导致输出量过大。
  • 新增--build_event_text_file=<输出文件路径>参数
    该参数会将所有构建事件(包括所有目标的执行状态、缓存命中情况、测试结果)全部写入指定的文本文件,不会污染控制台输出。你可以在CI任务结束后按需解析该文件,提取需要的信息,也可以直接用grep过滤特定目标的执行状态。
  • 新增--experimental_slim_profile=<输出文件路径>参数
    该参数输出的精简构建profile为文本格式,包含所有任务的执行状态、耗时、是否命中缓存等信息,解析成本很低,适合需要批量统计任务执行情况的场景。

内容的提问来源于stack exchange,提问作者Simon Swanson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:18:04