2011-09-13 63 views
35

随着pytest,可以使用装饰Pytest:取消选择测试

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

然后,在命令行标记检测,一看就知道pytest跳过测试标记为“慢”

pytest -k-slow 

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

@pytest.mark.long 
def some_long_test() 
    pass 

我希望能够跳过长和慢的测试。我已经试过这样:

pytest -k-slow -k-long 

这:

pytest -k-slow,long 

而且既不似乎工作。

在命令行中,我该如何告诉pytest跳过慢速测试和长时间测试?

回答

40

另外,最近新增加的“-m”命令行选项,你应该能够编写:

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

督察,在“-m”选项接受可以使用标记作为布尔值的表达式(如果标记不存在于测试函数中,则其值为假,如果存在,则为真)。

10

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

pytest -k "-slow -long" 

(使用--collect-only选项加速试验)

+3

也许API已经改变了其他测试。我尝试了'pytest -k“-slow -long”'并返回了'py.test:error:argument -k:expected one argument' – DMfll

4

也可以堆栈标记装饰器。

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

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

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