Search code examples
pythonpytest

How to control test case execution order in pytest?


I have two files in a directory. In one of the files there is a long-running test case that generates some output. In the other file there is a test case that reads that output.

How can I ensure the proper execution order of the two test cases? Is there any alternative other than puting the test cases in the same file in the proper order?


Solution

  • In general you can configure the behavior of basically any part of pytest using its well-specified hooks.

    In your case, you want the "pytest_collection_modifyitems" hook, which lets you re-order collected tests in place.

    That said, it does seem like ordering your tests should be easier -- this is Python after all! So I wrote a plugin for ordering tests: "pytest-ordering". Check out the docs or install it from pypi. Right now I recommend using @pytest.mark.first and @pytest.mark.second, or one of the @pytest.mark.order# markers, but I have some ideas about more useful APIs. Suggestions welcome :)

    Edit: pytest-ordering seems abandoned at the moment, you can also check out pytest-order (a fork of the original project by the author).

    Edit2: In pytest-order, only one marker (order) is supported, and the mentioned examples would read @pytest.mark.order("first"), @pytest.mark.order("second"), or @pytest.mark.order(#) (with # being any number).