如何使用Marks标记测试用例

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

以下是一些内置标记的示例:

  • usefixtures <usefixtures> - 在测试函数或类上使用 fixture
  • filterwarnings <filterwarnings> - 过滤测试函数中的特定警告
  • skip <skip> - 始终跳过测试函数
  • skipif <skipif> - 如果满足特定条件,则跳过测试函数
  • xfail <xfail> - 如果满足特定条件,则产生“预期失败”的结果
  • parametrize <parametrizemark> - 对同一个测试函数执行多次调用

创建自定义标记或将标记应用于整个测试类或模块非常容易。这些标记可以被插件使用,通常还可以通过命令行选项 -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 <initialization-hooks> hook中以编程方式注册新的标记:

Python
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 hook来禁用自定义标记的警告。

当传递 --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

results matching ""

    No results matching ""