#测试 #覆盖率 #报告 #代码覆盖率 #HTML #项目 #生成器

夜间版 应用 cosmoline

生成 Rust 项目的 HTML 代码覆盖率报告的命令行工具

1 个不稳定版本

0.1.1 2021 年 7 月 8 日

#2190开发工具

GPL-3.0-or-later

38KB
824

cosmoline

这是什么?

Cosmoline 是一个为 Rust 生成快速代码覆盖率报告的工具。它利用了 2020 年 11 月在 nightly 中引入的基于源代码的覆盖率。

它是如何工作的?

输入:来自 llvm-cov export(或其便利的包装 cargo cov)的 JSON

输出:使用 handlebars-rs 渲染的精美 HTML 报告。模板位于 template 目录中,并编译到 cosmoline 二进制文件中。

如何使用它?

安装先决条件

有关如何在 Rust Unstable Book 中配置 nightly 以生成分析数据的说明。

安装 jq(有用,但不是必需的)

例如在 macOS 上

brew install jq

或 Debian

sudo apt-get install jq

或 FreeBSD

sudo pkg install jq

构建和安装 cosmoline

# Check out this repo
git clone https://github.com/inferiorhumanorgans/cosmoline

# Install it with cargo
cargo +nightly install --path ./cosmoline

导出 JSON 覆盖率数据

使用 jqllvm 为单个库

# Back in the directory for our own project
cd /path/to/my-app
export OUT_DIR="$(PWD)/coverage-report"
export APP_NAME="my-app"

# Run tests, save results as JUnit data
LLVM_PROFILE_FILE="${OUT_DIR}/${APP_NAME}-%m.profraw" RUSTFLAGS="-Z instrument-coverage" cargo +nightly test --lib -- -Z unstable-options --format=junit > ${OUT_DIR}/junit.xml

# Grab test executable
COV_EXEC=$(RUSTFLAGS="-Z instrument-coverage" cargo +nightly test --message-format=json --lib --no-run | jq -r "select(.profile.test == true) | .filenames[]" | head -1)

# Merge sparse files
cargo +nightly profdata -- merge --sparse "${OUT_DIR}/${APP_NAME}-"*.profraw -o "${OUT_DIR}/${APP_NAME}.profdata"

# Extract JSON formatted details
cargo +nightly cov -- export "${COV_EXEC}" -instr-profile="${OUT_DIR}/${APP_NAME}.profdata" > "${OUT_DIR}/${APP_NAME}.coverage.json"

将其传递给 cosmoline

cosmoline --input "${OUT_DIR}/${APP_NAME}.coverage.json" --source-directory "$(PWD)" --output-directory "${OUT_DIR}/report"

生成的报告是自包含的,并将放置在 ${OUT_DIR}/report/index.html 中。

查看结果

一个典型的报告可能看起来像这样

Report Index

请注意,列出的百分比将根据文件被覆盖的比例以红色、黄色或绿色着色。

单击文件名将带您到该文件内容的注解渲染

File Detail

已配置的程序代码,如果未执行,将以红色突出显示,如果已执行,则以绿色突出显示。未配置的代码保持白色。

待办事项

  • 渲染 clippy 警告?
  • 重构 CSS
  • 包含 cargo 和 git 元数据

依赖关系

~7-17MB
~217K SLoC