テストの網羅率を出す coverage を使ってみたのでメモ

2022年5月3日

参考

インストールする

coverage をインストールします。
pipenv もあるようですが今回は pip でインストールしました。
こちら の記事にあるように pip でインストールしたので「python3 -m」を付けなかった場合「bash: coverage: command not found」となってしまうようです。

pip3 install coverage

網羅率のデータを集める

次のコマンドを実行するとテストを実行してデータを集めるようです。
これが完了すると .coverage というファイルが作成されます。

python3 -m coverage run --source='.' manage.py test

レポートを出力する

テスト網羅率が記載されたレポートを出力します。

python3 -m coverage report   
Name                                          Stmts   Miss  Cover
-----------------------------------------------------------------
accounts/__init__.py                              0      0   100%
accounts/admin.py                                 3      0   100%
accounts/apps.py                                  3      3     0%
accounts/migrations/0001_initial.py               8      0   100%
accounts/migrations/__init__.py                   0      0   100%
accounts/models.py                                6      1    83%
accounts/tests.py                                 1      0   100%
accounts/views.py                                 1      1     0%
app/__init__.py                                   0      0   100%
...(略)...
  • Stmts(statements)
    • 実行可能なコードの行数。
  • Miss
    • (実行可能なコード中の)実行されなかったコードの行数。
  • Cover
    • 網羅立

レポートをHTMLで出力する

レポートはHTMLで出力もできるようです。

python3 -m coverage html

レポートの網羅率100%を非表示にする

100% の所は確認する必要がないので非表示にしたい、という場合はオプション --skip-covered を使用することで非表示にできるようです。

python3 -m coverage report -m --skip-covered

オプションを省略する

.coveragerc を作成して下記のようにすることでコマンドにオプションを自動で付与してくれます。
omit は除外するファイルです。

[run]
source = .
omit =
    */tests/*
    */migrations/*
    */__init__.py

[report]
skip_covered = True
omit =
    */tests*
    */migrations/*
    */__init__.py

と言う事でオプション無しで下記のようにコマンドを実行する事ができるようになりました。

python3 -m coverage run  manage.py test
python3 -m coverage report
python3 -m coverage html
YouTube

2022年5月3日