如何使用属性标记测试函数¶
通过使用 pytest.mark
辅助工具,您可以轻松地为测试函数设置元数据。您可以在 API 参考 中找到内置标记的完整列表。或者,您可以使用 CLI 命令 pytest --markers
列出所有标记,包括内置和自定义标记。
以下是一些内置标记:
usefixtures - 在测试函数或类上使用 fixture
filterwarnings - 过滤测试函数中的某些警告
skip - 总是跳过一个测试函数
skipif - 如果满足特定条件则跳过测试函数
xfail - 如果满足特定条件,则产生“预期失败”结果
parametrize - 对同一个测试函数执行多次调用。
创建自定义标记或将标记应用于整个测试类或模块都很容易。这些标记可以被插件使用,也常用于通过命令行上的 -m
选项 选择测试。
请参阅 使用自定义标记,其中包含示例,也可用作文档。
注意
标记只能应用于测试,对 fixture 没有影响。
注册标记¶
您可以在 pytest.ini
文件中这样注册自定义标记:
[pytest]
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial
或者在 pyproject.toml
文件中这样注册:
[tool.pytest.ini_options]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"serial",
]
请注意,标记名称后面 :
之后的所有内容都是可选描述。
或者,您可以在 pytest_configure 钩子中以编程方式注册新标记。
def pytest_configure(config):
config.addinivalue_line(
"markers", "env(name): mark test to run only on named environment"
)
已注册的标记会出现在 pytest 的帮助文本中,并且不会发出警告(参见下一节)。建议第三方插件总是 注册它们的标记。
对未知标记引发错误¶
使用 @pytest.mark.name_of_the_mark
装饰器应用的未注册标记将始终发出警告,以避免因名称拼写错误而悄无声息地产生意外行为。如上一节所述,您可以通过在 pytest.ini
文件中注册自定义标记或使用自定义 pytest_configure
钩子来禁用警告。
当传入 --strict-markers
命令行标志时,任何使用 @pytest.mark.name_of_the_mark
装饰器应用的未知标记都将触发错误。您可以通过将 --strict-markers
添加到 addopts
来在项目中强制执行此验证。
[pytest]
addopts = --strict-markers
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial