官方实例
# content of test_skip.py
import pytest
import sys
@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
pass
def valid_config():
return False
def test_function():
if not valid_config():
pytest.skip("unsupported configuration")
@pytest.mark.skipif(sys.version_info < (3,10), reason="requires python3.10 or higher")
def test_version_function():
print("test_version_function was invoked.")
@pytest.mark.skipif(sys.platform == "win32", reason="does not run on windows")
class TestPosixCalls:
def test_function(self):
print("will not be setup or run under 'win32' platform")
解读与实操
你可以标记无法在某些平台上运行的测试函数或你预计会失败的测试函数,以便pytest可以相应地处理它们并显示测试会话的摘要,同时保持测试套件的绿色。
skip意味着你希望测试只有在满足某些条件时才能通过,否则pytest应该完全跳过运行。常见的例子是跳过非windows平台上的仅窗口测试,或者跳过依赖于当前不可用的外部资源(例如数据库)的测试。
skip测试函数的最简单方法是用skip装饰器标记它,可以传递一个可选的原因:
或者,也可以通过调用pytest.skip(reason)方法在测试执行或设置期间强制跳过
对于较大的测试套件,一个好主意是使用一个文件来定义标记,然后在整个测试套件中始终应用这些标记。要跳过类或模块的所有测试函数,你可以在类上使用skipif标记(就像任何其它标记一样)
应用场景
保持测试报告绿色,合理的将失败用例用skip和xfail标记出来,也是一种与产品、研发之间好的沟通方式。