使用py.test但在命令行中排除测试列表?

时间:2017-12-07 09:17:31

标签: python pytest python-unittest

我想用py.test排除一个列表(大约5项)。

我想通过命令行将此列表提供给py.test。

我想避免修改来源。

怎么做?

2 个答案:

答案 0 :(得分:6)

您可以使用tests selecting expression,选项为-k。如果您有以下测试:

def test_spam():
    pass

def test_ham():
    pass

def test_eggs():
    pass

使用:

调用pytest
pytest -v -k 'not spam and not ham' tests.py

你会得到:

collected 3 items

pytest_skip_tests.py::test_eggs PASSED             [100%]

=================== 2 tests deselected ===================
========= 1 passed, 2 deselected in 0.01 seconds =========

答案 1 :(得分:2)

您可以通过创建conftest.py文件来实现此目的:

# content of conftest.py

import pytest
def pytest_addoption(parser):
    parser.addoption("--skiplist", action="store_true",
                     default="", help="skip listed tests")

def pytest_collection_modifyitems(config, items):
    tests_to_skip = config.getoption("--skiplist")
    if not tests_to_skip:
        # --skiplist not given in cli, therefore move on
        return
    skip_listed = pytest.mark.skip(reason="included in --skiplist")
    for item in items:
        if item.name in tests_to_skip:
            item.add_marker(skip_listed)

您可以将它用于:

$ pytest --skiplist test1 test2

请注意,如果您总是跳过相同的测试,则可以在conftest中定义列表。

另见this useful link