目录
通过使用pytest.mark
辅助工具,您可以轻松地在测试函数上设置元数据。您可以在API参考(API Reference)中找到内置标记的完整列表。或者,您可以使用命令行接口(CLI)pytest --markers
来列出所有标记,包括内置的和自定义的。
以下是一些内置标记的示例:
- usefixtures - 在测试函数或类上使用fixtures
- filterwarnings - 过滤测试函数中的某些警告
- skip - 始终跳过测试函数
- skipif - 如果满足某个条件,则跳过测试函数
- xfail - 如果满足某个条件,则产生“预期失败”的结果
- parametrize - 对同一个测试函数执行多次调用,每次调用时使用不同的参数
这些标记提供了一种灵活的方式来控制测试的执行,包括跳过某些测试、在特定条件下修改测试行为,以及基于不同参数集运行测试。通过使用这些标记,您可以更细致地控制测试套件的行为,以适应不同的测试场景和需求。
创建自定义标记或将标记应用于整个测试类或模块很容易。这些标记可以由插件使用,并且也常用于通过命令行上的-m选项来选择测试(select tests )。
请参阅“使用自定义标记”(Working with custom markers)部分中的示例,这些示例也作为文档使用。
注意:
标记只能应用于测试,对 fixtures没有影响。
注册标志
你可以像这样在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",
]
注意,pyproject.toml
文件是Python项目的一个配置文件,它遵循TOML(Tom's Obvious, Minimal Language)格式。在pytest中,这个文件可以用来配置pytest的某些选项,而不需要创建一个单独的pytest.ini
或setup.cfg
文件。但是,请确保您的pytest版本支持从pyproject.toml
文件中读取配置。
请注意,在标记名称后的冒号:
之后的所有内容都是可选的描述。
另外,您也可以在pytest_configure 钩子中编程方式注册新的标记:
def pytest_configure(config):
config.addinivalue_line(
"markers", "env(name): mark test to run only on named environment"
)
注册的标记会出现在pytest的帮助文本中,并且不会发出警告(参见下一节)。建议第三方插件总是注册它们的标记( register their markers)。
对未知标记引发错误
使用@pytest.mark.name_of_the_mark
装饰器应用的未注册标记总是会发出警告,以避免由于名称拼写错误而默默地执行一些令人惊讶的操作。如前一节所述,您可以通过在pytest.ini
文件中注册自定义标记或使用自定义的pytest_configure
钩子来禁用这些警告。
当传递--strict-markers
命令行标志时,使用@pytest.mark.name_of_the_mark
装饰器应用的任何未知标记都会触发错误。您可以通过将--strict-markers
添加到addopts
中来在您的项目中强制执行此验证,这样pytest在运行时就会对未知标记进行严格检查,确保测试代码的准确性和一致性。这样做可以帮助维护测试代码的质量,避免由于标记使用不当而导致的潜在问题。
[pytest]
addopts = --strict-markers
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial