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.createFileSystem
和 sandbox.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.createFileSystem
和 sandbox.delete
正在做什么需要这么多时间?除了运行我的测试之外,subprocess.run
还做了什么?我想知道有没有办法让我进入test-setup.sh
之前的状态,然后交互式地戳系统?
hmmm,使用standalone
会快得多,大约是2s
,但仍然比普通的pytest
慢得多,后者只需要0.5s
...以上是关于tools/test/test-setup.sh test-setup.sh 在 bazel 中做了啥的主要内容,如果未能解决你的问题,请参考以下文章