Pytest:取消选择测试

JS.*_*JS. 43 python pytest

使用pytest,可以使用装饰器标记测试

@pytest.mark.slow
def some_slow_test():
    pass
Run Code Online (Sandbox Code Playgroud)

然后,从命令行,可以告诉pytest跳过标记为"慢"的测试

pytest -k-slow
Run Code Online (Sandbox Code Playgroud)

如果我有一个额外的标签:

@pytest.mark.long
def some_long_test()
    pass
Run Code Online (Sandbox Code Playgroud)

我希望能够跳过长期和慢速测试.我试过这个:

pytest -k-slow -k-long
Run Code Online (Sandbox Code Playgroud)

还有这个:

pytest -k-slow,long
Run Code Online (Sandbox Code Playgroud)

似乎都不起作用.

在命令行中,如何告诉pytest跳过慢和长测试?

hpk*_*k42 56

此外,最近添加了"-m"命令行选项,您应该能够编写:

py.test -m "not (slow or long)"
Run Code Online (Sandbox Code Playgroud)

IOW,"-m"选项接受一个表达式,该表达式可以使用标记作为布尔值(如果测试函数上不存在标记,则其值为False,如果存在,则为True).


JS.*_*JS. 13

通过pytest代码(mark.py)和进一步的实验看,以下似乎工作:

pytest -k "-slow -long"
Run Code Online (Sandbox Code Playgroud)

(使用该--collect-only选项加​​速实验)

  • 也许API已经改变了.我试过`pytest -k"-slow -long"`然后回来了`py.test:error:argument -k:期待一个参数` (3认同)

DMf*_*fll 7

也可以堆叠标记装饰器.

@pytest.mark.slow
@pytest.mark.main
def test_myfunction():
    pass
Run Code Online (Sandbox Code Playgroud)

然后我打电话py.test -m "slow and main",只调用两个装饰器的测试.

py.test -m "not (slow and main)" 导致其他测试运行