pytest 核心功能-用属性标记测试函数

2022-03-21 09:19 更新

通过使用 ​pytest.mark​ 助手,您可以轻松地在测试函数上设置元数据,或者,您可以使用 ​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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号