使用属性标记测试用例
使用 pytest.mark 可以帮助你在测试函数上简单的设置元数据。你可以在 API Reference 中找到完整的内置标记(marks)的列表。你也可以使用 pytest --markers 命令列出所有的内置和自定义的标记。
这里是一些内置的标记:
- usefixtures 在测试函数或者测试类上使用夹具
- filterwarnings 过滤一个测试方法中的特定警告
- skip 总是跳过一个测试函数
- skipif 在一定的条件下跳过测试方法
- xfail 在一定条件下产生一个 ”期望的失败“
- parametrize 一个测试方法使用多组数据多次执行
创建或给测试方法或者测试类使用一个自定义的标记也是很简单的。这些标记可以被插件使用,也可以用于选择执行用例,在命令行中使用 -m 参数可以指定要运行的标记。
可以看 Working with custom markers 这一节的例子,这些例子同样可以作为文档来使用。
注意:标记(marks)只能用于测试,不能用于夹具。
6.1 注册标记
你可以在你的 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的帮助信息中,并且不会发出警告(请参阅下一节)。强烈建议第三方插件能够注册自己的标记。
6.2 未知的标记引发一个错误
使用一个未注册的标记 @pytest.mark.name_of_the_mark 总是会引发一个警告,以避免在打错了标记名字的时候静静的运行突然给你一个惊吓。正如我们前面讲到的,你可以通过在 pytest.ini中注册标记或使用 pytest_configure 钩子来消除这个警告。
如果你在命令行中使用了 --strict-markers 参数,任何未注册的标记将会引发一个错误(error)。你可以通过配置强制要求进行检验:
[pytest]
addopts = --strict-markers
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial