1.作用
- 给用例分类
- 筛选执行哪些用例
- 钩子函数读取标记
- 控制用例行为(跳过、超时、顺序等)
2.给用例打自定义标签
2.1 pytest.ini注册
python
[pytest]
markers =
mytag: 自定义标签
device: 设备标签
module: 模块标签
2.2 在测试用例上使用
python
import pytest
# 打标记
@pytest.mark.mytag("示波器")
@pytest.mark.device("采集设备")
def test_1():
assert 1 == 1
@pytest.mark.module("登录模块")
def test_2():
assert 1 == 1
2.3执行时筛选
python
# 只执行带 mytag 的用例
pytest -m mytag
# 执行带 device 或 module 的
pytest -m "device or module"
# 不执行 mytag
pytest -m "not mytag"
2.4钩子函数获取
python
# conftest.py
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
# 获取标记 @pytest.mark.mytag(xxx)
tags = []
for marker in item.iter_markers(name="mytag"):
tags.extend(marker.args)
print(f"用例:{item.nodeid}")
print(f"标记内容:{tags}")
print(f"结果:{report.outcome}")
2.5 pytest自带标记:跳过,参数化
python
# 跳过用例
@pytest.mark.skip("暂不执行")
# 条件跳过
@pytest.mark.skipif(sys.version_info < (3,8), reason="版本太低")
# 预期失败
@pytest.mark.xfail
# parametrize 参数化
@pytest.mark.parametrize("a,b", [(1,2), (3,4)])