Pytest:取消选择测试

时间:2011-09-13 00:07:34

标签: python pytest

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

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

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

pytest -k-slow

如果我有其他标签:

@pytest.mark.long
def some_long_test()
    pass

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

pytest -k-slow -k-long

和此:

pytest -k-slow,long

似乎都不起作用。

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

5 个答案:

答案 0 :(得分:53)

此外,最近添加了“-m”命令行选项,您应该可以写:

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

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

答案 1 :(得分:13)

查看pytest代码(mark.py)并进行进一步的实验表明以下内容似乎有效:

pytest -k "-slow -long"

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

答案 2 :(得分:7)

也可以堆叠标记装饰器。

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

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

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

答案 3 :(得分:0)

如果您尝试从python文件内部运行测试,也就是说,您可以通过调用

来运行测试
$ python testfile.py

有内容

import pytest

pytest.main()

,您想知道如何将CLI标志传递到pytest.main,答案是:

pytest.main(["-m", "not slow"])

PS-是的,有正当理由以这种方式调用测试。祈祷你永远不必学习它们。

答案 4 :(得分:0)

您的测试书写正确吗?通常,测试以test_开始? 但是无论如何,这取决于您尝试过滤的内容,您可以使用-k "not slow and not long" 标记通过 名称 过滤这些测试。 em> 使用-m "not slow and not long"

通过关键字表达式运行测试

-k: 这将运行包含与给定的字符串表达式(不区分大小写)匹配的名称的测试,其中可以包括使用文件名,类名和函数名作为变量的Python运算符。

通过标记表达式运行测试

-m: 将运行所有用@pytest.mark.slow装饰器装饰的测试。

有关更多文档信息,请访问: