用 grcov 收集整合 code coverage

Wu Yu Wei published on
2 min, 217 words

在 Rust cargo 專案中進行 code coverage 比想像中輕鬆許多。透過 grcov 兩三行指令就能產生出報告來了。首先要先下載 release,不過既然有 cargo 我們只要 cargo install grcov 就好了。

再來設置一下環境變數,以下能夠防止 dead code 簡化才不會影響 coverage

export CARGO_INCREMENTAL=0
export RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort"
export RUSTDOCFLAGS="-Cpanic=abort"

然後就像平時一樣測試就好了

cargo build
cargo test

這樣就能在 target/debug/deps/ 看到產生的檔案 .gcdo .gcda。如果要在產生 html coverage report 的話像這樣作就好

grcov ./target/debug/ -s . -t html --llvm --branch --ignore-not-existing -o ./target/debug/coverage/

最後報告的位置就在 target/debug/coverage/index.html,整個過稱輕鬆寫意大概花不到五分鐘就完成了。