如何使用属性标记测试函数

通过使用 pytest.mark 助手,您可以轻松地为测试函数设置元数据。您可以在API 参考中找到所有内置标记的完整列表。或者,您可以使用 CLI - pytest --markers 列出所有标记,包括内置和自定义标记。

以下是一些内置标记

  • usefixtures - 在测试函数或类上使用 fixture

  • filterwarnings - 过滤测试函数的某些警告

  • skip - 始终跳过测试函数

  • skipif - 如果满足特定条件则跳过测试函数

  • xfail - 如果满足特定条件,则产生“预期失败”结果

  • parametrize - 对同一个测试函数执行多次调用。

创建自定义标记或将标记应用于整个测试类或模块很容易。这些标记可以被插件使用,并且通常用于通过 -m 选项在命令行上选择测试

请参阅使用自定义标记以获取示例,这些示例也可用作文档。

注意

标记只能应用于测试,对fixture没有影响。

注册标记

您可以在配置文件中注册自定义标记,如下所示

[pytest]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "serial",
]
[pytest]
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_configure 钩子来禁用自定义标记的警告。

当设置了 strict_markers 配置选项时,使用 @pytest.mark.name_of_the_mark 装饰器应用的任何未知标记都将触发错误。您可以通过在配置中设置 strict_markers 来强制执行项目中的此验证

[pytest]
addopts = ["--strict-markers"]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "serial",
]
[pytest]
strict_markers = true
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial