如何在bazel中的源代码树上运行测试?
我正在将一个项目从cmake迁移到bazel。我有一个文件夹,其中包含一些python代码和一些如何在bazel中的源代码树上运行测试?,bazel,Bazel,我正在将一个项目从cmake迁移到bazel。我有一个文件夹,其中包含一些python代码和一些genrules。 我让一个测试脚本递归地运行这个文件夹中的所有python测试。 所以基本上我需要这个文件夹下的所有py文件作为测试脚本的data。但是考虑到我需要运行一些genrule,所以有一些构建文件,glob([“***.py”])无法通过 例如,我们有一个文件夹python包含以下文件 python/BUILD python/test\u a.py python/folder\u a/B
genrules
。
我让一个测试脚本递归地运行这个文件夹中的所有python测试。
所以基本上我需要这个文件夹下的所有py文件作为测试脚本的data
。但是考虑到我需要运行一些genrule,所以有一些构建文件,glob([“***.py”])
无法通过
例如,我们有一个文件夹python
包含以下文件
python/BUILD
python/test\u a.py
这一个包含genrulepython/folder\u a/BUILD
这一个也有genrulepython/folder\u a/folder\u b/BUILD
python/folder\u a/folder\u b/folder\u c/test\u b.py
python/
下运行测试脚本,它将递归地运行所有test.*.py
。现在我们想在bazel中将其包装为sh_测试。因此,我们需要在data
字段中指定所有test.*.py
。但是没有简单的方法可以做到这一点,因为glob()
无法通过python/folder\u a/BUILD
和python/folder\u a/folder\b/BUILD
如果我能在源代码树中运行这个脚本,将会非常方便。但巴泽尔似乎没有提供这一点。在sh_test
中添加local=1
,只会使runfiles树可写
我知道使用bazel进行测试不是一个好方法,但有时要同时迁移所有内容,工作量太大。我想不出一个简单的方法来获取构建文件中的所有目标名称,但是可以运行一个bazel查询来获取目标名称,然后,您可以在文件组目标中收集,以在sh_test.data
属性中引用
bazel query 'filter(".*:test_.*\.py", kind("source file", //python/...:*) + kind("generated file", //python/...:*))'
分解如下:
kind(“源文件”//python/…:*)
查询所有源文件
递归地在//python
包中设置目标。这收集了
普通源文件
kind(“生成的文件”,//python/…:*)
查询所有生成的
递归地在//python
包中创建文件目标。这收集
该规则生成了多个文件
过滤器(“.*:test.*\.py”,…)
过滤包含
仅以//any/package:test\u name.py形式的目标
例如,跑步
bazel query 'filter(".*:test_.*\.py", kind("source file", //src/...:* + //tools/...:*) + kind("generated file", //src/...:* + //tools/...:*))'
在Bazel自己的源代码树上找到一个目标://src/test/py/Bazel:test_base.py
虽然可能不是一个完美的选择,但它可以工作。在本例中,我必须将所有python文件添加到bazel中,这也是几项工作。