我想用py.test排除一个列表(大约5项)。
我想通过命令行将此列表提供给py.test。
我想避免修改来源。
怎么做?
答案 0 :(得分:6)
您可以使用tests selecting expression,选项为-k
。如果您有以下测试:
def test_spam():
pass
def test_ham():
pass
def test_eggs():
pass
使用:
调用pytestpytest -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
中定义列表。