Pythonからpytestユニットテストを実行し、pytestフィクスチャを動的に登録する方法を探しています。 Pytestのドキュメントで説明したように、プログラムを使ってテストを実行するときtheir behaviour can be altered with a custom plugin。私は次のセットアップPytestプラグインにフィクスチャをプログラムで登録する
validation.py(実行するテストが含まれています)で起動される
def test_valid(new_fixture):
assert new_fixture > 0
、ここ
import pytest
new_fixture_value = 36
class FixtureRegPlugin(object):
def pytest_sessionstart(self):
print('Test session start')
@pytest.fixture
def new_fixture():
return new_fixture_value
pytest.main(['-sv', './validation.py'], plugins=[FixtureRegPlugin()])
は、我々は、カスタムプラグインでvalidation.py
でテストを実行していpytest_sessionstart
のフックを登録します。このフックはテストセッションの初めに実行され、私は期待どおりに印刷出力を見ることができます。ただし、new_fixture
は登録されていないため、テストは失敗し、「フィクスチャが見つかりません」というエラーが表示されます。
目的は、実行時にフィクスチャの結果を変更することです。その定義をvalidation.py
の中に置くことはできません。
グレート、ありがとう!プラグインのメソッドとしてフィクスチャを定義することは、まさに私が探していたものでした。あなたの答えを少し簡素化して、他の人にとってより良い利益をもたらしてください。私はそれを受け入れるだろう。すなわち、a)「字下げの変更」が明確ではなく、FixtureRegPluginがメソッドでなければならないことを説明する方法と置き換える方がよい。 b)--setup-showは便利ですが、 'pytest.fixture(scope = 'function')'などは範囲外です。それらを削除し、可能であれば同じ 'validation.py'を使います。トップは、むしろコメントにする必要があります。それ以外の場合は大変感謝します! – rth