Pythonでテストしてカバレッジを取得する時にあれこれコマンドが長くなるなぁと思いつつ特に気にせず作業していたんですけど、やっぱり長いのを打つのってけっこうめんどくさい。。ということで、テストコマンドを最小限に抑えるための設定ファイルの作り方を探った時のメモ的なものです。
2021年3月時点で最新のunittestとpytestに対応しています。今回はテストのコマンドを短くすることに目的をおいているので、テストコードの例は省いています。
環境
- Windows10
- Python3.9インストール済
今回のディレクトリ構成
proj_unittest/
├ src/
│ ├ app/
│ │ ├ __init__.py
│ │ └ main.py
│ ├ tests/
│ │ ├ __init__.py
│ │ └ test_app_main.py
│ └ __init__.py
└ .coveragerc
proj_pytest/
├ src/
│ ├ app/
│ │ ├ __init__.py
│ │ └ main.py
│ ├ tests/
│ │ ├ __init__.py
│ │ └ test_app_main.py
│ └ __init__.py
└ pytest.ini
unittestの場合
準備
.coveragerc
を準備します。
今回はC1カバレッジ(判定条件網羅)を出力するためにbranch = true
を書いています。テストコードでカバーできてない行をコマンド出力するためにshow_missing = true
も追加しています。
[run]
source = src/app
branch = true
command_line = -m unittest
[report]
show_missing = true
coverage
をインストールします。
$ pip install coverage
テスト&カバレッジ出力
[Before]
$ coverage run --source=src/app --branch -m unittest ← テスト
$ coverage report -m ← コマンド出力
$ coverage html ← HTML出力
[after]
$ coverage run
$ coverage report
$ coverage html
だいぶきれいになりました。
pytestの場合
準備
pytest.ini
を準備します。
C1カバレッジを出力するために--cov-branch
を書いています。テストコードでカバーできてない行をコマンド出力するために--cov-report=term-missing
、自動でHTMLを出力する機能もあるので--cov-report=html
も追加しています。
[pytest]
addopts=
--cov=src/app
--cov-branch
--cov-report=term-missing
--cov-report=html
pytest
、pytest-cov
をインストールします。
$ pip install pytest pytest-cov
テスト&カバレッジ出力
[before]
$ pytest --cov=src/app --cov-branch --cov-report=term-missing --cov-report=html
[after]
$ pytest
pytestの場合はこれでカバレッジ出力も自動でやってくれるからほんと便利です。