pythontestingpytestfixturestest-fixture

pytest - How to execute a function after specific tests


I have some tests organized in several classes. I already have a test fixture with scope=class so that it would run before suite(class) of tests. However, I need to execute a function after some specific tests. Lets say I have 100 tests in a class, I already have a fixture that will execute a function before these tests, but I also want to run a function after 2-3 of these tests.

What is the best approach to achieve that? Can it be done with fixtures or anything else ?


Solution

  • First, write a fixture that will execute after a test finishes:

    @pytest.fixture
    def foo():
        yield
        print("do stuff after test")
    

    Docs: Fixture finalization / executing teardown code

    Now mark each test that should invoke this fixture with usefixtures("foo"):

    @pytest.mark.usefixtures("foo")
    def test_spam():
        ...
    

    Docs: Use fixtures in classes and modules with usefixtures