[TOC]
跳过(Skip)及预期失败(xFail): 处理不能成功的测试用例
你可以标记无法在某些平台上运行的测试用例或你希望失败的测试用例,以便Pytest可以相应地处理它们并提供测试会话的摘要,同时保持测试套件为通过状态。
跳过(Skip)指,你希望如果某些条件得到满足你的测试用例才执行,否则Pytest应该完全跳过运行该用例。常见示例是在非Windows平台上跳过仅限Windows的测试用例,或者跳过依赖于当前不可用的外部资源的测试用例(例如数据库)。
预期失败(xFail)意味着已知测试失败并标记原因。一个常见的例子是对尚未实现的函数的测试,或者尚未修复的错误。当测试通过时尽管预计会失败(标记为pytest.mark.xfail),但它将在测试结果摘要及报告中显示为xpass状态。
Pytest分别计算并列出Skip和xFail用例。默认情况下不显示有关跳过/标记失败用例的详细信息,以避免输出混乱。你可以使用该-r选项查看与测试进度中显示的不同字母参数对应的详细信息:
-r可以通过运行pytest -h,找到有关该选项的更多详细信息。
(请参阅:如何更改命令行选项默认值)
Skip跳过用例
版本2.9中的新函数。
跳过测试用例的最简单方法是使用skip装饰器标记它,可以传递一个可选的原因reason参数:
或者,也可以在测试执行或setup期间,通过调用pytest.skip(reason)函数强制跳过该用例:
当在导入时间内无法评估跳过条件时,这种在用例跳过的方法非常有用。
也可以在模块级别跳过整个模块:pytest.skip(reason,allow_module_level=True)
import sys
import pytest
if not sys.platform.startswith("win"):
pytest.skip("跳过只支持Windows平台的用意",allow_module_level=True)
(译者注:使用此方法跳过整个模块时会抛出Skipped异常,如果在脚本下方使用pytest.main()执行,会执行不到。此时应使用命令行pytest命令执行。) 参考: pytest.mark.skip
Skipif:指定条件下跳过
2.0版中的新功能。
如果你希望特定条件地跳过某些用例,则可以使用skipif。下面的示例演示了,当Python版本小于3.6时跳过测试用例。
import sys
import pytest
@pytest.mark.skipif(sys.version_info<(3,6),reason="需要Python3.6版本以上")
def test_function():
...
(译者注:skipif方法必须指定reason)
如果收集用例时,skipif中的条件表达式计算为True,则将跳过测试函数,运行是使用会在-rs,会在运行结果摘要中显示指定的原因。
你可以skipif在模块之间共享标记,参考以下测试脚本:


701

被折叠的 条评论
为什么被折叠?



