1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的アドカレAdvent Calendar 2024

Day 7

pytest.ini で簡単にテストを管理する方法とカバレッジレポートの設定

Posted at

はじめに

pytestを使用していると、コマンドラインオプションを毎回指定するのが面倒になることがあります。pytest.iniを使用すると、よく使用するオプションをプロジェクトのデフォルト設定として定義できます。

pytest.iniとは

pytest.iniは、pytestの設定ファイルです。プロジェクトのルートディレクトリに配置することで、プロジェクト固有の設定を定義できます。

使用例

1. テスト対象のファイルを作成(準備)

次のようなフォルダ構成でファイルを作成します。

root
│── pytest.ini
│── src/
│   └── calc.py
└── test/
    └── test_calc.py

テスト対象のファイルは次のとおりです。
簡単な関数を2つ作成します。

calc.py
# 足し算
def add(x, y):
    return x + y

# 引き算
def subtract(x , y):
    return x - y

テストコードは下記の通りです。

test_calc.py
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.ini
[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をブラウザで開くと、カバレッジの詳細を確認できます。

HTMLレポート
root
│── htmlcov/
│   └── index.html
└── ...
JSONレポート
root
└── coverage.json

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?