conftest.py
pytestのconftest.py
は、pytestがテストコレクション、テストの実行、および結果のレポートを行う際に使用する設定ファイルです。conftest.py
は、pytestの実行中に自動的に検出され、テストコレクションおよび実行中にpytestが使用するfixture、プラグイン、コマンドラインオプション、およびカスタマイズされたテストランナーを定義できます。
conftest.py
は、テストファイルと同じディレクトリに置くことができます。また、テストファイルがあるディレクトリの親ディレクトリに置くことで、複数のテストファイルで共有されるfixtureを定義することもできます。
以下は、conftest.py
でfixtureを定義する例です。
import pytest
@pytest.fixture
def my_fixture():
return 'Hello, pytest!'
このように、conftest.py
内で@pytest.fixture
デコレータを使用してfixtureを定義することができます。上記の例では、my_fixture
という名前のfixtureを定義しています。
複数のテストファイルで共有される fixture を定義
以下は、conftest.py
を使用して、複数のテストファイルで共有されるfixtureを定義する例です。
import pytest
@pytest.fixture
def my_fixture():
return 'Hello, pytest!'
def test_my_fixture(my_fixture):
assert my_fixture == 'Hello, pytest!'
def test_my_fixture(my_fixture):
assert my_fixture == 'Hello, pytest!'
上記の例では、conftest.py
に定義されたmy_fixture
という名前のfixtureを、test_file1.py
およびtest_file2.py
で使用しています。これにより、複数のテストファイルで共有されるfixtureを定義することができます。
conftest.py と pytest フック関数
以下は、conftest.pyとpytestフック関数を使用した例です。
pytest_addoption フック関数を使用して、カスタムコマンドラインオプションを定義
def pytest_addoption(parser):
parser.addoption('--myoption', action='store', default='default value', help='my custom option')
def test_custom_option(request):
assert request.config.getoption('--myoption') == 'custom value'
上記の例では、pytest_addoption
フック関数を使用して、--myoption
オプションを定義しています。このオプションには、デフォルト値として'default value'
が設定されています。また、test_custom_option
関数で、request.config.getoption('--myoption')
を使用して、--myoption
オプションの値を取得しています。
例えば、次のようにして--myoption
オプションを指定してテストを実行することができます。
$ pytest --myoption custom value
上記の例では、--myoption
オプションの値として'custom value'
が設定されています。
pytest_collection_modifyitems フック関数を使用して、テストアイテムのリストを変更
def pytest_collection_modifyitems(items):
for item in items:
if item.parent.name == 'test_file.py':
item.add_marker(pytest.mark.slow)
import time
def test_slow():
time.sleep(5)
def test_fast():
pass
上記の例では、pytest_collection_modifyitems
フック関数を使用して、test_file.py
というファイルに属するテストアイテムに、@pytest.mark.slow
マーカーを追加しています。これにより、テスト実行時に@slow
マーカーが付けられたテストアイテムだけを実行することができます。
例えば、次のようにして@slow
マーカーが付けられたテストのみを実行することができます。
$ pytest -m slow
pytest_configure フック関数を使用して、pytest.ini ファイルからカスタム設定をロード
def pytest_configure(config):
custom_setting = config.getini('custom_setting')
print(f"custom_setting: {custom_setting}")
[pytest]
custom_setting = True
上記の例では、pytest_configure
フック関数を使用して、pytest.ini
ファイルからcustom_setting
というカスタム設定を読み込んでいます。 config.getini()
メソッドを使用して、pytest.ini
ファイルからカスタム設定を読み込んでいます。
例えば、次のようにしてpytest.ini
ファイルを読み込み、カスタム設定を使用することができます。
$ pytest
上記の例では、pytestコマンドを実行するだけで、pytest.ini
ファイルからcustom_setting
というカスタム設定を読み込んで、 pytest_configure
フック関数で表示しています。
参考