如何按层级顺序运行Cargo测试?实现测试组串行、子测试并行
自定义层级的串行+并行混合测试执行方案
需求核心
proxy/v1_specific下的test1/test2/test3必须按顺序串行执行,但单个测试内部的子测试允许并行- 需要通过
--magic=level参数一键触发不同层级的测试集合:--magic=1:串行执行test1→test2→test3--magic=2:串行执行指定子测试集合:test1::subtest1、test1::subtest2、test2::subtest1、test3::subtest1
实现方案:Shell脚本自定义参数
直接用脚本解析--magic参数,逐个执行对应测试集合,每个测试内部保留默认并行能力:
脚本代码
#!/bin/bash # 初始化变量 MAGIC_LEVEL=0 CARGO_ARGS=() # 解析命令行参数 while [[ $# -gt 0 ]]; do case "$1" in --magic=*) MAGIC_LEVEL="${1#*=}" shift ;; *) CARGO_ARGS+=("$1") shift ;; esac done # 匹配magic层级对应的测试列表 case "$MAGIC_LEVEL" in 1) TESTS=( "v1_specific::test1" "v1_specific::test2" "v1_specific::test3" ) ;; 2) TESTS=( "v1_specific::test1::subtest1" "v1_specific::test1::subtest2" "v1_specific::test2::subtest1" "v1_specific::test3::subtest1" ) ;; *) echo "错误:无效的--magic层级,请使用1或2" exit 1 ;; esac # 串行执行每个测试,内部子测试默认并行 for TEST in "${TESTS[@]}"; do echo "=== 开始执行测试:$TEST ===" cargo test --package tests --test proxy "$TEST" "${CARGO_ARGS[@]}" # 若上一个测试失败,可取消注释以下代码终止后续执行 # if [ $? -ne 0 ]; then # echo "测试$TEST失败,终止后续执行" # exit 1 # fi done
使用方法
- 保存脚本为
cargo-magic-test.sh,添加执行权限:chmod +x cargo-magic-test.sh - 执行对应层级测试:
- 层级1:
./cargo-magic-test.sh --magic=1 - 层级2:
./cargo-magic-test.sh --magic=2
- 层级1:
- 可附加其他Cargo参数(比如
--release、--verbose):./cargo-magic-test.sh --magic=1 --release --verbose
优化:转为Cargo自定义命令
把脚本放到~/.cargo/bin/目录下,并命名为cargo-magic-test(去掉.sh后缀),之后就可以像原生Cargo命令一样使用:
cargo magic-test --magic=1
关键说明
- 每个单独的
cargo test命令默认会并行执行内部子测试,无需额外配置,正好满足「顶层测试串行,内部子测试并行」的需求 - 若需要调整单个测试的并行度,可在脚本的
cargo test命令后添加--jobs=N参数(比如--jobs=4指定4线程并行)
内容的提问来源于stack exchange,提问作者calvin
相关产品推荐
相关产品推荐

