Python Pytest:取消选择测试
使用pytest,可以使用装饰器标记测试Python Pytest:取消选择测试,python,pytest,Python,Pytest,使用pytest,可以使用装饰器标记测试 @pytest.mark.slow def some_slow_test(): pass 然后,从命令行可以告诉pytest跳过标记为“slow”的测试 如果我有一个附加标签: @pytest.mark.long def some_long_test() pass 我希望能够跳过长测试和慢测试。我试过这个: pytest -k-slow -k-long 这是: pytest -k-slow,long 这两种方法似乎都不管用 在命令
@pytest.mark.slow
def some_slow_test():
pass
然后,从命令行可以告诉pytest跳过标记为“slow”的测试
如果我有一个附加标签:
@pytest.mark.long
def some_long_test()
pass
我希望能够跳过长测试和慢测试。我试过这个:
pytest -k-slow -k-long
这是:
pytest -k-slow,long
这两种方法似乎都不管用
在命令行中,我如何告诉pytest跳过慢测试和长测试?查看
pytest
代码(mark.py
),进一步的实验表明以下方法似乎有效:
pytest -k "-slow -long"
(使用
--collect only
选项可以加快实验速度)此外,通过最近添加的“-m”命令行选项,您应该能够编写:
py.test -m "not (slow or long)"
在这里,“-m”选项接受一个表达式,该表达式可以将标记用作布尔值(如果测试函数中不存在标记,则其值为False,如果存在,则为True) 也可以堆叠标记装饰器
@pytest.mark.slow
@pytest.mark.main
def test_myfunction():
pass
然后我调用了py.test-m“slow and main”
,只调用了两个装饰器的测试
py.test-m“not(slow and main)”
导致其他测试运行如果您试图从python文件内部运行测试,也就是说,您通过调用
$ python testfile.py
里面有内容
导入pytest
pytest.main()
您想知道如何将CLI标志传递到pytest.main
,答案是:
pytest.main([“-m”,“不慢”)
PS-是的,这样调用测试是有正当理由的。祈祷你永远不必学习它们。你的测试写对了吗?通常,测试从
测试开始?
但无论如何,这取决于您尝试过滤的内容,您可以使用-k“不慢且不长”
通过名称或使用-m“不慢且不长”
通过标记来过滤这些测试
按关键字表达式运行测试
-k
:
这将运行包含与给定字符串表达式匹配的名称(不区分大小写)的测试,其中可以包括使用文件名、类名和函数名作为变量的Python操作符
通过标记表达式运行测试
-m
:
将运行使用@pytest.mark.slow
装饰器装饰的所有测试
有关更多文档信息,请访问:
- 或者执行:
pytest--help
也许API已经改变了。我尝试了pytest-k“-slow-long”
并返回了py。test:error:argument-k:期望有一个参数
,这里的重要部分是理解-m
和-k
之间的区别-m
用于筛选标记,而-k
用于筛选测试名称。
$ python testfile.py