You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取所有cargo测试列表及cargo test运行相关问题咨询

问题解答

1. 获取多crate项目所有待运行测试列表

你可以直接用cargo原生功能实现:

  • 快速文本输出:执行 cargo test --workspace -- --list,会输出整个工作区所有crate的全部测试用例,每行格式为测试名: test,同时会区分单元测试、集成测试等不同类型。
  • 结构化可靠输出:执行 cargo test --workspace --no-run --message-format=json,输出为标准JSON格式,可直接通过脚本解析拿到所有测试的归属crate、测试名称、测试二进制路径等信息,完全避免文本解析的不可靠问题,适配后续测试用例新增的场景。

2. 测试失败时绑定后续动作且不中断测试运行

cargo test默认行为就是跑完所有测试再返回最终退出码,只要你不添加--fail-fast参数,就不会在遇到第一个失败用例时中途终止运行。
你可以根据需求选择实现方式:

  • 全量测试跑完后统一触发后续动作:在shell脚本中先捕获cargo test的退出码,再执行你需要的后续逻辑,最后按需返回原退出码即可,示例逻辑如下:
cargo test --workspace
TEST_EXIT_CODE=$?
# 此处插入你要执行的后续动作,比如导出失败用例、跑无插桩验证等
exit $TEST_EXIT_CODE
  • 单个测试失败时实时触发动作:可以实时解析--message-format=json的输出流,当匹配到type=test、event=failed的事件时,即时触发你需要的对应动作,不会影响cargo test本身的运行流程。

3. 仅输出所有失败测试的名称

最可靠的方案是结合JSON输出和jq工具过滤,完全不受测试过程中的其他日志、打印内容干扰:

cargo test --workspace --message-format=json | jq -r 'select(.type == "test" and .event == "failed") | .name'

执行后会直接逐行输出所有失败测试的完整名称,你可以直接重定向到文件存储,供后续无插桩验证使用。如果不需要结构化解析,也可以用简单的文本过滤:cargo test --workspace 2>&1 | grep -E '^test .* FAILED$' | awk '{print $2}',适配简单场景。


适配你的场景的参考流程

你可以按以下步骤实现自动化对比逻辑:

  1. 运行grcov插桩环境的cargo test,导出所有失败测试名到failed_cover_tests.txt
  2. 执行无插桩环境的cargo test --workspace -- $(cat failed_cover_tests.txt),仅单独运行插桩环境下失败的测试用例
  3. 对比两次运行的结果,输出仅在插桩环境下失败的用例列表

内容的提问来源于stack exchange,提问作者Alex Petrosyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:06:03