如何用属性标记测试函数

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

下面是一些内置标记:

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

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

  • skip - 总是跳过测试函数

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

  • xfail - 如果满足某个条件,则产生一个 “expected failure” 结果

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

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

参见 Working with custom markers 获取也可作为文档使用的示例。

备注

标记只能应用于测试,对 fixtures 不起作用。

注册标记

You can register custom marks in your pytest.ini file like this:

[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 的帮助文本中,并且不发出警告(参见下一节)。建议第三方插件总是 register their markers

Raising errors on unknown marks

Unregistered marks applied with the @pytest.mark.name_of_the_mark decorator will always emit a warning in order to avoid silently doing something surprising due to mistyped names. As described in the previous section, you can disable the warning for custom marks by registering them in your pytest.ini file or using a custom pytest_configure hook.

When the --strict-markers command-line flag is passed, any unknown marks applied with the @pytest.mark.name_of_the_mark decorator will trigger an error. You can enforce this validation in your project by adding --strict-markers to addopts:

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