14.5 CI 集成与代码覆盖率
听
持续集成(CI)是现代软件开发中保障代码质量的关键实践。通过在每次提交或拉取请求时自动运行测试,CI 能快速反馈回归问题,防止缺陷流入主干。Rust 项目可轻松集成主流 CI 平台,并结合代码覆盖率工具评估测试完整性。
在 CI 中运行测试
大多数 CI 服务(如 GitHub Actions、GitLab CI、CircleCI)均原生支持 Rust。以 GitHub Actions 为例,一个基本的 CI 配置如下(.github/workflows/ci.yml):
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --verbose
此工作流会在每次推送或 PR 时:
- 检出代码;
- 安装稳定版 Rust 工具链;
- 运行所有测试(包括单元测试、集成测试和文档测试)。
为提高可靠性,建议:
- 同时测试多个 Rust 版本(如
stable、beta、nightly); - 在不同操作系统(Linux、macOS、Windows)上运行;
- 添加
cargo check --all-features和cargo fmt --check等静态检查。
测量代码覆盖率
测试通过并不等于覆盖充分。代码覆盖率(code coverage)衡量测试执行了多少源代码,帮助识别未被测试的路径。Rust 社区广泛使用 cargo tarpaulin 实现这一目标。
安装 tarpaulin:
cargo install cargo-tarpaulin
生成覆盖率报告:
cargo tarpaulin --out Html
该命令会:
- 编译并运行测试(带覆盖率插桩);
- 收集执行信息;
- 生成
tarpaulin-report.html,可视化展示每行是否被执行。
在 CI 中集成覆盖率报告(以 GitHub Actions 为例):
- name: Run coverage
run: |
cargo install cargo-tarpaulin
cargo tarpaulin --out Xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./cobertura.xml
配合 Codecov 或 Coveralls 等服务,可在 PR 中自动评论覆盖率变化,设置最低阈值(如“覆盖率不得低于 80%”)。
注意事项
- 覆盖率不是万能指标:100% 行覆盖不等于逻辑正确,仍需设计有效测试用例;
- 排除无关代码:可通过
#[cfg(not(tarpaulin))]或配置文件忽略特定模块(如main.rs、错误处理样板); - 性能开销:覆盖率收集会显著减慢测试速度,通常仅在 CI 的专用 job 中运行;
- 二进制 crate 支持有限:tarpaulin 主要针对库 crate,对
bincrate 需额外配置。
小结
将测试纳入 CI 流程是保障项目长期健康的基础,而代码覆盖率则为测试质量提供量化依据。通过 cargo test 与 tarpaulin 的组合,Rust 开发者能构建从本地开发到云端验证的完整质量闭环。合理配置 CI 与覆盖率策略,不仅能及早发现问题,还能推动团队持续完善测试覆盖,最终交付更可靠、可维护的软件。
#Rust 入门教程
分享于 5 天前
上一篇:14.4 属性测试
下一篇:第十五章:实践:构建一个 Web API 服务