如何使用Bazel query排除指定子目录查询所有测试用例?
用Bazel Query排除指定子目录查询测试用例
问题背景
原用于查询所有测试用例的命令:
bazel query 'kind(".*_test", //...)'
目录结构如下:
main_folder/ ├── main_folder/ -> 该目录下包含main_folder_content1文件夹 └── main_folder_content1/ ├── BUILD ├── test1_test.cc └── test2_test.cc
运行原命令会包含嵌套的main_folder子目录中的测试用例,但需求是仅查询父main_folder下的测试,排除这个子main_folder。尝试过-和--deleted_packages参数无效,目前通过在父main_folder的.bazelignore中添加子目录路径作为临时方案可行,希望找到更灵活的命令行解决方案。
可行解决方案
方法1:使用集合差操作排除目标目录
直接在Bazel query表达式中通过except关键字,从所有测试用例中减去子目录下的测试:
bazel query 'kind(".*_test", //...) except kind(".*_test", //main_folder:...)'
这里//main_folder:...准确指向嵌套的子main_folder下的所有目标,通过集合差直接过滤掉该目录下的测试用例。
方法2:通过包路径过滤
如果子目录是独立的Bazel包(包含BUILD文件),也可以通过package函数指定要排除的包:
bazel query 'kind(".*_test", //...) except package("//main_folder/...")'
package("//main_folder/...")会匹配子main_folder及其所有子包,从而排除这些包下的所有测试用例。
关于临时方案的补充
.bazelignore的方法虽然有效,但属于全局配置修改。如果只是临时查询不想改动配置文件,上面的query表达式方法更灵活,无需修改任何文件即可完成过滤。
内容的提问来源于stack exchange,提问作者Mukesh Jha
相关产品推荐
相关产品推荐

