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跳过那些既慢又长的测试呢?
5 个回答
10
你还可以把标记装饰器叠加在一起使用。
@pytest.mark.slow
@pytest.mark.main
def test_myfunction():
pass
然后我运行了 py.test -m "slow and main"
,结果只有同时带有这两个装饰器的测试被执行。
而运行 py.test -m "not (slow and main)"
时,其他的测试就会被执行。
14
查看了一下pytest
的代码(mark.py
),还有一些实验后发现,下面的方法似乎有效:
pytest -k "-slow -long"
(使用--collect-only
这个选项可以加快实验速度)
79
另外,最近新增的“-m”命令行选项让你可以这样写:
py.test -m "not (slow or long)"
换句话说,“-m”选项接受一个表达式,这个表达式可以把标记当作布尔值来使用(如果在测试函数中没有这个标记,它的值就是假;如果有这个标记,它的值就是真)。