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

如何用grcov生成仅含Root1、Root2的Rust代码覆盖率报告并排除Dep1

Rust 多Crate项目使用grcov生成指定覆盖率报告的解决方案

项目背景与需求

  • 项目包含多个crate:Dep1、Dep2、Dep3、Root1、Root2
  • 依赖关系:
    • Dep2 依赖 Dep1
    • Root1 依赖 Dep2、Dep3
    • Root2 依赖 Dep1、Dep3
  • 核心需求:
    1. 生成仅包含Root1和Root2的统一代码覆盖率报告(支持一键生成或合并各自报告)
    2. 排除Dep1的覆盖率统计
    3. 仅使用grcov工具

当前执行的Root1单独报告命令:

grcov . --binary-path ./Root1/target/ -s . -t html,lcov,cobertura --branch -o Root1/coverage

存在问题:

  1. 报告未包含Root2的覆盖率
  2. 报告包含了不需要的Dep1覆盖率

可行方案

方法一:一键生成合并报告

同时指定两个Root crate的二进制产物路径,通过--ignore参数直接排除Dep1的代码统计:

grcov . \
  --binary-path ./Root1/target/debug/deps/ \
  --binary-path ./Root2/target/debug/deps/ \
  -s . \
  -t html,lcov,cobertura \
  --branch \
  --ignore "*/Dep1/*" \
  -o combined_coverage
  • --binary-path:需指向debug/deps目录(cargo test生成的测试二进制文件默认存放在这里),确保覆盖所有测试用例的执行数据
  • --ignore "*/Dep1/*":直接排除Dep1目录下的所有文件,避免其覆盖率被统计
  • 若需更精细控制,可替换为--filter exclude:./Dep1/src/,仅排除Dep1的源码文件

方法二:分别生成报告后合并

先为两个Root crate单独生成排除Dep1的中间报告,再合并为统一报告:

  1. 生成Root1的排除Dep1的lcov格式报告:
grcov . \
  --binary-path ./Root1/target/debug/deps/ \
  -s . \
  -t lcov \
  --branch \
  --ignore "*/Dep1/*" \
  -o Root1/coverage/lcov.info
  1. 生成Root2的排除Dep1的lcov格式报告:
grcov . \
  --binary-path ./Root2/target/debug/deps/ \
  -s . \
  -t lcov \
  --branch \
  --ignore "*/Dep1/*" \
  -o Root2/coverage/lcov.info
  1. 合并两个lcov文件并生成多格式统一报告:
grcov --merge \
  -t html,lcov,cobertura \
  -o combined_coverage \
  Root1/coverage/lcov.info Root2/coverage/lcov.info

关键注意事项

  • 编译前必须开启覆盖率收集:设置环境变量RUSTFLAGS="-C instrument-coverage",再执行cargo test生成覆盖数据
  • 若Dep1是外部依赖而非内部crate,需调整--ignore路径为--ignore "*/.cargo/registry/*/dep1-*"(根据实际依赖包名调整)

内容的提问来源于stack exchange,提问作者Capy Bara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:20:01