はじめに
pytestを使用していると、コマンドラインオプションを毎回指定するのが面倒になることがあります。pytest.iniを使用すると、よく使用するオプションをプロジェクトのデフォルト設定として定義できます。
pytest.iniとは
pytest.iniは、pytestの設定ファイルです。プロジェクトのルートディレクトリに配置することで、プロジェクト固有の設定を定義できます。
使用例
1. テスト対象のファイルを作成(準備)
次のようなフォルダ構成でファイルを作成します。
root
│── pytest.ini
│── src/
│ └── calc.py
└── test/
└── test_calc.py
テスト対象のファイルは次のとおりです。
簡単な関数を2つ作成します。
# 足し算
def add(x, y):
return x + y
# 引き算
def subtract(x , y):
return x - y
テストコードは下記の通りです。
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from src.calc import add, subtract
def test_add():
assert add(1, 2) == 3
def test_subtract():
assert subtract(3, 2) == 1
2. pytest.iniの作成
プロジェクトのルートディレクトリにpytest.iniファイルを作成します。
pytest.iniはプロジェクトのルートディレクトリに配置する必要があります
- addopts
- -v:詳細なテスト結果の表示
- --cov=src:srcディレクトリのカバレッジを計測
- python_files:テストとして認識するファイル名
- testpaths:テストファイルを含むディレクトリ
[pytest]
addopts = -v --cov=src
python_files = test_*.py
testpaths = test
--cov-report
のオプション
カバレッジレポートの出力形式としていくつかのオプションが利用できます。
- --cov-report=term:カバレッジ結果をターミナルに表示
- --cov-report=json:JSONフォーマットでカバレッジ結果を出力
・・・など
参考:https://pytest-cov.readthedocs.io/en/latest/reporting.html
pytest --cov-report html
--cov-report xml
--cov-report json
--cov-report lcov
--cov-report annotate
--cov=myproj tests
These four report options output to files without showing anything on the terminal:
https://pytest-cov.readthedocs.io/en/latest/reporting.html
上記のオプションでは、レポート結果はターミナルではなくファイルに出力されるようです。
テスト実行
次のコマンドでテストを実行します。
pytest
上記コマンドを実行すると結果として下記のログが出力されます
cachedir: .pytest_cache
rootdir: XXXXX
configfile: pytest.ini
testpaths: test
plugins: cov-5.0.0
collected 2 items
# 2つのテスト
test/test_calc.py::test_add PASSED [ 50%]
test/test_calc.py::test_subtract PASSED [100%]
---------- coverage: XXXXX -----------
Name Stmts Miss Cover
---------------------------------
src\calc.py 4 0 100%
---------------------------------
TOTAL 4 0 100%
このログでは下記の事が分かります。
- 2つのテストがすべて成功(PASSED)
- テスト対象の関数(add, subtract)のカバレッジ100%達成
テスト実行時にキャッシュとカバレッジファイルが生成されるので必要であれば .gitignore に追加することをお勧めします。
レポート結果をJSON、HTML出力にした場合
レポート結果をHTMLとJSONに出力されるように設定します。
addopts = -v --cov-report=html --cov-report=json
テスト実行後、htmlcov/ディレクトリに詳細なカバレッジレポートが生成されます。
index.htmlをブラウザで開くと、カバレッジの詳細を確認できます。
root
│── htmlcov/
│ └── index.html
└── ...
root
└── coverage.json