有时候需要针对不同的测试环境跑不同的测试用例,如:冒烟测试、sit、uat、prd,所以给自动化测试用例做标记分组是很有必要的,pytest.mark
可以轻松实现这个功能。首先需要注册自定义标记。
注册marks
有3中方法注册marks,第一种事在pytest.ini文件
通过pytest.ini文件注册自定义标记
如下:
[pytest]
markers =
sit: 标记测试为sit (deselect with '-m "not sit"')
uat: 标记测试为uat
prd: 标记测试为prd
serial
通过 pyproject.toml文件注册自定义标记
[tool.pytest.ini_options]
markers = [
"sit: 标记测试为sit (deselect with '-m \"not sit\"')",
"serial",
]
注意标记名:后面的为可选的标记描述
通过pytest_configure hook动态注册标记
def pytest_configure(config):
config.addinivalue_line(
"markers", "env(name): mark test to run only on named environment"
)
给未知标记抛出异常
使用@pytest.mark.name_of_the_mark装饰器应用的未注册标记将始终发出警告,以避免由于键入错误的名称而导致的意外行为。可以通过在pytest.ini文件中注册自定义标记或使用自定义pytest_configure钩子来禁用自定义标记的警告。
当传递--strict marks命令行标志时,使用@pytest.mark.name_of_the_mark装饰器应用的任何未知标记都将触发错误。您可以在项目中通过向addopts添加--strict标记来强制执行此验证:
[pytest]
addopts = --strict-markers
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial
使用自定义标记
import pytest
class TestPractise:
@pytest.mark.sit
def test_sit(self):
print('sit环境测试')
@pytest.mark.uat
def test_uat(self):
print('uat环境测试')
if __name__ == "__main__":
pytest.main(["-v", "-s", "-m sit and not uat"])
以上测试选择sit标记的测试,不选中uat标记的测试
输出如下:
从图片看出运行结果与期望一致~