如何设置Bazel测试执行优先级,让重测试优先运行
Bazel测试用例执行顺序调整方案
Bazel原生支持调整测试用例执行优先级,可通过以下几种方案实现重资源测试用例优先执行,优化整体测试耗时:
方案1:基于测试标签配置执行顺序
- 首先在BUILD文件中给资源占用高的重测试规则添加自定义标签,示例:
py_test( name = "heavy_integration_test", srcs = ["heavy_test.py"], tags = ["heavy_test"], # 自定义重测试标签 # 其余配置省略 ) - 执行测试时通过
--test_tag_filters参数指定标签顺序,Bazel会按标签匹配顺序优先执行靠前标签对应的用例:bazel test //... --test_tag_filters=heavy_test,-heavy_test
该命令会先执行所有带heavy_test标签的用例,再执行其余不带该标签的用例。
方案2:通过优先级参数直接配置(适用Bazel 5.0及以上版本)
- 使用
--test_priority_pattern参数可直接按照测试路径、名称模式指定执行优先级,优先级数值越高调度顺序越靠前,默认优先级为0。 - 示例:给所有存放在
integration_test/heavy/目录下的测试设置最高优先级:bazel test //... --test_priority_pattern=*integration_test/heavy/*=10 - 多优先级规则可重复添加该参数,Bazel会按匹配到的最高优先级调度用例。
方案3:拆分两次测试执行(兼容性最强)
如果不想修改BUILD配置,也可以直接拆分两次测试任务,先跑重测试再跑轻量测试:
# 第一步:先执行所有重测试集合 bazel test //path/to/heavy_test_set/... # 第二步:执行全量测试,过滤掉已经跑完的重测试 bazel test //... --exclude //path/to/heavy_test_set/...
默认情况下Bazel会优先调度体积小、预期执行快的测试用例,所以会出现重测试延后启动的情况,使用以上方案均可解决该问题。
内容的提问来源于stack exchange,提问作者mundaneL
相关产品推荐
相关产品推荐

