如何用属性标记测试函数

How to mark test functions with attributes

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

以下是一些内置标记:

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

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

  • skip - 始终跳过测试函数

  • skipif - 如果满足某个条件,则跳过测试函数

  • xfail - 如果满足某个条件,产生“预期失败”的结果

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

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

请参见 使用自定义标记,其中包含示例,这些示例也作为文档。

Note

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

注册标记

Registering marks

您可以在 pytest.ini 文件中注册自定义标记,如下所示:

[pytest]
markers =
    slow: 将测试标记为慢(使用 '-m "not slow"' 取消选择)
    serial

或者在 pyproject.toml 文件中,如下所示:

[tool.pytest.ini_options]
markers = [
    "slow: 将测试标记为慢(使用 '-m \"not slow\"' 取消选择)",
    "serial",
]

请注意,标记名称后的 : 后的内容是可选描述。

或者,您可以在 pytest_configure 钩子中以编程方式注册新标记:

def pytest_configure(config):
    config.addinivalue_line(
        "markers", "env(name): 仅在命名环境中运行测试"
    )

注册的标记会出现在 pytest 的帮助文本中,并且不会发出警告(请参见下一节)。 建议第三方插件始终 注册他们的标记

对未知标记抛出错误

Raising errors on unknown marks

未注册的标记如果使用 @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: 将测试标记为慢(使用 '-m "not slow"' 取消选择)
    serial