Pytest: Deselecting tests

后端 未结 5 868
臣服心动
臣服心动 2021-01-31 07:28

With pytest, one can mark tests using a decorator

@pytest.mark.slow
def some_slow_test():
    pass

Then, from the command line, one can tell py

相关标签:
5条回答
  • 2021-01-31 08:13

    Additionally, with the recent addition of the "-m" command line option you should be able to write:

    py.test -m "not (slow or long)"
    

    IOW, the "-m" option accepts an expression which can make use of markers as boolean values (if a marker does not exist on a test function it's value is False, if it exists, it is True).

    0 讨论(0)
  • 2021-01-31 08:14

    Looking through the pytest code (mark.py) and further experimentation shows the following seems to work:

    pytest -k "-slow -long"
    

    (Using the --collect-only option speeds up experimentation)

    0 讨论(0)
  • 2021-01-31 08:17

    It's also possible to stack the mark decorators.

    @pytest.mark.slow
    @pytest.mark.main
    def test_myfunction():
        pass
    

    I then called py.test -m "slow and main" and only the tests with both decorators were called.

    py.test -m "not (slow and main)" resulted in the other tests running

    0 讨论(0)
  • 2021-01-31 08:26

    If you are trying to run the tests from inside a python file, that is, you run your tests by calling

    $ python testfile.py
    

    which has contents

    import pytest
    
    pytest.main()
    

    and you want to know how to pass the CLI flag in to pytest.main, the answer is:

    pytest.main(["-m", "not slow"])
    

    PS - yes, there are legitimate reasons to call tests this way. Pray you never have to learn them.

    0 讨论(0)
  • 2021-01-31 08:26

    Is your test correctly written? Normally, tests start with test_? But anyway, it depended on what you try to filter, you can filter those tests by name using -k "not slow and not long" or by tag using -m "not slow and not long".

    Run tests by keyword expressions

    -k: This will run tests which contain names that match the given string expression (case-insensitive), which can include Python operators that use filenames, class names and function names as variables.

    Run tests by marker expressions

    -m: Will run all tests which are decorated with the @pytest.mark.slow decorator.

    More documentation info can be found on:

    • https://docs.pytest.org/en/latest/usage.html
    • Or do: pytest --help
    0 讨论(0)
提交回复
热议问题