fixture
in order を使用して、目的を達成できます。
import pytest
@pytest.fixture(autouse=True)
def run_before_and_after_tests(tmpdir):
"""Fixture to execute asserts before and after a test is run"""
# Setup: fill with any logic you want
yield # this is where the testing happens
# Teardown : fill with any logic you want
詳細な説明
@pytest.fixture(autouse=True)
、ドキュメントから:「場合によっては、関数引数を明示的に宣言したり、usefixtures デコレーターを宣言したりせずに、フィクスチャを自動的に呼び出す必要がある場合があります。」したがって、このフィクスチャはテストが実行されるたびに実行されます。
# Setup: fill with any logic you want
、このロジックは、すべてのテストが実際に実行される前に実行されます。あなたの場合、実際のテストの前に実行される assert ステートメントを追加できます。
yield
、コメントに示されているように、ここでテストが行われます
# Teardown : fill with any logic you want
、このロジックはすべてのテストの後に実行されます。このロジックは、テスト中に何が起こっても実行されることが保証されています。
注:テストの失敗とテスト実行中のエラーにはpytest
違いがあります。Failure は、テストが何らかの形で失敗したことを示します。エラーは、適切なテストを実行するポイントに到達できなかったことを示します。
次の例を検討してください。
テストが実行される前にアサートが失敗する -> エラー
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert False # This will generate an error when running tests
yield
assert True
def test():
assert True
テストの実行後にアサートが失敗する -> ERROR
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert True
yield
assert False
def test():
assert True
テスト失敗 -> FAILED
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert True
yield
assert True
def test():
assert Fail
テスト合格 -> 合格
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert True
yield
assert True
def test():
assert True