げっとシステムログ

WEB開発メモ

rust でカバレッジをとってみる

CONTENTS
  1. コードで
  2. 必要な準備
  3. カバレッジをとる
  4. カバレッジが 100% じゃなかったらエラーにする
  5. まとめ
  6. 参考資料
ENVIRONMENTS
  • rust: 1.51

コードで

以下の shell script でカバレッジをとることができる。

rustup component add llvm-tools-preview
rustup install nightly
cargo install grcov

export RUSTFLAGS="-Zinstrument-coverage"
export LLVM_PROFILE_FILE="target/coverage/%m-%p.profraw"

cargo +nightly build
cargo +nightly test

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

rm -rf ./target/coverage

mozilla のやつってことで grcov を選んでみた。

TOP

必要な準備

カバレッジをとるツールをインストールする。

rustup component add llvm-tools-preview
rustup install nightly
cargo install grcov

grcov は llvm-tools-preview を使ってレポートを作る。 また、grcov を使ってカバレッジをとるには nightly な rust が必要。 grcov 自体は cargo install grcov$HOME/.cargo/bin にインストールできる。

TOP

カバレッジをとる

export RUSTFLAGS="-Zinstrument-coverage"
export LLVM_PROFILE_FILE="target/coverage/%m-%p.profraw"

cargo +nightly build
cargo +nightly test

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

instrument-coverage フラグをつけて nightly ビルド、テストをすると、profraw ファイルが生成される。 profraw ファイルの名前は LLVM_PROFILE_FILE で指定する。

この profraw ファイルから grcov でレポートを生成できる。

grcov のオプションは以下の通り。

  • path: profraw ファイルを出力したディレクトリを指定
  • -s: ソースのルートを指定
  • --binary-path: build したバイナリを指定
  • --llvm: なんか速くなるらしい
  • --branch: branch カバレッジを取れるらしい。うまくいってない。よくわからん
  • --ignore-not-existing: つけないとエラーになる。ライブラリのソース探しに行ってる雰囲気を感じる
  • -t html -o ./coverage: html 形式で指定したディレクトリにレポートを出力
  • --ignore: --ignore tests/** とか、glob で無視するファイルを指定

TOP

カバレッジが 100% じゃなかったらエラーにする

カバレッジ 100% を目指すのはあんまり意味ない。 けど、無視するファイルを上手く指定してやれば、テストもれを検出できる。

grcov が出力した html から以下のコマンドで 100% か確認できる。

grep abbr "${output_dir}/index.html" | head -1 | grep "100 %"

abbr タグでサマリがマークアップされている。 line, function, branch の順に並んでいるので、これの最初のやつを確認する。

とりあえず line カバレッジが 100% になればいいかな。

TOP

まとめ

rust でカバレッジをとる方法をまとめた。

TOP

参考資料

TOP