tools/test/test-setup.sh test-setup.sh 在 bazel 中做了啥

Posted

技术标签:

【中文标题】tools/test/test-setup.sh test-setup.sh 在 bazel 中做了啥【英文标题】:what does tools/test/test-setup.sh test-setup.sh do in bazeltools/test/test-setup.sh test-setup.sh 在 bazel 中做了什么 【发布时间】:2021-01-30 07:54:45 【问题描述】:

我将 Bazel 用于 Python 项目。

我使用bazel test //... --profile=/tmp/profile.gz 分析了一个微不足道的测试,它应该在 1 秒内运行。但是,bazel test 命令占用了 5s。

分析如下所示

它表明大部分时间都花在操作action 'Testing //tests/unit/io:test_ds_presto' 上,如关键路径行所示。然后我通过bazel aquery 了解有关此操作的更多详细信息,

action 'Testing //tests/unit/io:test_ds_presto'
  Mnemonic: TestRunner
  Target: //tests/unit/io:test_ds_presto
  Configuration: darwin-fastbuild
  ActionKey: 2123d47ebdd54b927b3377c77ce293144693c4e16117fe9d0fdc7b8b7213b392
  Inputs: [bazel-out/darwin-fastbuild/internal/_middlemen/tests_Sunit_Sio_Stest_Uds_Upresto-runfiles, external/bazel_tools/tools/test/generate-xml.sh, external/bazel_tools/tools/test/test-setup.sh]
  Outputs: [bazel-out/darwin-fastbuild/testlogs/tests/unit/io/test_ds_presto/test.cache_status, bazel-out/darwin-fastbuild/testlogs/tests/unit/io/test_ds_presto/test.log]
  Command Line: (exec external/bazel_tools/tools/test/test-setup.sh \
    tests/unit/io/test_ds_presto)

所以操作正在运行命令

exec external/bazel_tools/tools/test/test-setup.sh tests/unit/io/test_ds_presto

谁能提供一些关于脚本tools/test/test-setup.sh 打算做什么以及为什么可能需要这么长时间的见解?

我假设 test-setup.sh 脚本是来自 bazel repo 的 https://github.com/bazelbuild/bazel/blob/master/tools/test/test-setup.sh

更新

--spawn_strategy=local 的个人资料,但不清楚时间都花在了哪里。

【问题讨论】:

【参考方案1】:

test-setup.sh 是您的测试目标的包装器,因此您需要确保您的测试在这里没有问题。您可以使用 -s --sandbox_debug 标志在没有 Bazel 的情况下运行该脚本,因此可以在该包装脚本中添加一些调试调用,例如 date。 另一方面,花在沙盒例程上的时间:sandbox.createFileSystemsandbox.delete 相当高。您可以尝试使用 --spawn_strategy=standalone 标志在不使用沙盒的情况下运行测试

【讨论】:

-s-s --sandbox_debug 一样做什么? 知道了:--[no]subcommands [-s] (true, pretty_print or false; default: "false") 如果有 -s --sandbox_debug 标志,没有 Bazel 是什么意思,我不完全理解 --sandbox_debug 的作用 我尝试了所有建议。 -s 提供信息,它确认test-setup.sh 步骤很慢。我该怎么做才能更深入地了解它为什么慢。例如。 sandbox.createFileSystemsandbox.delete 正在做什么需要这么多时间?除了运行我的测试之外,subprocess.run 还做了什么?我想知道有没有办法让我进入test-setup.sh之前的状态,然后交互式地戳系统? hmmm,使用standalone 会快得多,大约是2s,但仍然比普通的pytest 慢得多,后者只需要0.5s...

以上是关于tools/test/test-setup.sh test-setup.sh 在 bazel 中做了啥的主要内容,如果未能解决你的问题,请参考以下文章