除非py.test中存在命令行参数,否则默认跳过测试

时间:2015-10-12 14:55:57

标签: python pytest

我有一个长期测试,持续2天,我不想包含在通常的测试运行中。我也不想输入命令行参数,这会在每次通常的测试运行中取消选择它和其他测试。当我真正需要时,我宁愿选择默认取消选择的测试。我尝试将测试从test_longrun重命名为longrun并使用命令

py.test mytests.py::longrun

但这不起作用。

2 个答案:

答案 0 :(得分:8)

尝试将您的测试装饰为@pytest.mark.longrun

conftest.py

def pytest_addoption(parser):
    parser.addoption('--longrun', action='store_true', dest="longrun",
                 default=False, help="enable longrundecorated tests")

def pytest_configure(config):
    if not config.option.longrun:
        setattr(config.option, 'markexpr', 'not longrun')

答案 1 :(得分:0)

这是一种稍微不同的方式。

@pytest.mark.longrun 装饰您的测试:

@pytest.mark.longrun
def test_something():
    ...

此时您可以运行除使用 -m 'not longrun' 标记的测试之外的所有内容

$ pytest -m 'not longrun'

或者如果您只想运行 longrun 标记的测试,

$ pytest -m 'longrun'

但是,要使 -m 'not longrun' 成为默认值,请在 pytest.ini 中将其添加到 addopts

[pytest]
addopts =  
    -m 'not longrun'
    ...

如果你想运行所有的测试,你可以这样做

$ pytest -m 'longrun or not longrun'