使用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跳过慢速测试和长测试?
答案 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
装饰器装饰的测试。
pytest --help