Test case execution order in pytest

前端 未结 7 1775
情书的邮戳
情书的邮戳 2020-11-28 12:01

I am using 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

相关标签:
7条回答
  • 2020-11-28 12:10

    Maybe you can consider using dependency pytest plugin, where you can set the test dependencies easily:

    @pytest.mark.dependency()
    def test_long():
        pass
    
    @pytest.mark.dependency(depends=['test_long'])
    def test_short():
        pass
    

    This way test_short will only execute if test_long is success and force the execution sequence as well.

    0 讨论(0)
  • 2020-11-28 12:11

    Try this:

    @pytest.fixture(xxx)
    def test_A():
        pass
        yield
        pass
    
    @pytest.mark.usefixtures('test_A')
    def test_B():
        pass
    
    0 讨论(0)
  • 2020-11-28 12:12

    main.py:

    import functools
    import pytest
    from demo import test_foo,test_hi
    
    def check_depends(depends):
        try:
            for dep in depends:
                dep()
        except Exception as e:
            return dep
        else:
            return True
    
    def pytest_depend(depends):
        def pytest_depend_decorator(func):
            stat = check_depends(depends)
            if stat is True:
                return func
            else:
                return pytest.mark.skip(True, reason="%s[skip] --> %s[Failed]" % (func.__name__, stat.__name__))(func)
        return pytest_depend_decorator
    
    
    @pytest_depend([test_foo,test_hi])
    def test_bar():
        pass
    
    @pytest_depend([test_foo,test_hi])
    def test_bar2():
        pass
    

    demo.py:

    def test_hi():
        pass
    def test_foo():
        assert False
    

    platform linux -- Python 3.5.2, pytest-3.8.2, py-1.6.0, pluggy-0.7.1 -- /usr/bin/python3

    pytest -vrsx ./plugin.py

    0 讨论(0)
  • 2020-11-28 12:22

    There's also a plugin pytest-ordering that seems to meet your requirements.

    0 讨论(0)
  • 2020-11-28 12:24

    Make Sure you have installed pytest-ordering package. To confirm go to Pycharm settings>>Project Interpreter >> and look for pytest-ordering : If it is not available install it. Pycharm settings>>Project Interpreter >> Click on + button and search pytest-ordering install it. Voila!! It will definitely work.

    0 讨论(0)
  • 2020-11-28 12:25

    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 :)

    0 讨论(0)
提交回复
热议问题