pytest中mark的使用
在pytest中,mark(标记)是用于对测试用例进行分类、筛选或附加元数据的重要功能。以下是其核心使用方法:
1. 基本标记定义与使用
注册标记:在pytest.ini中预先定义标记(避免运行时警告):
[pytest]
markers =smoke: 冒烟测试用例slow: 执行耗时较长的用例
标记测试函数/类:
@pytest.mark.smoke
def test_login():assert True@pytest.mark.slow
class TestPerformance:def test_response_time(self):assert True
2. 常用内置标记
跳过测试:
@pytest.mark.skip(reason="功能暂未完成")
def test_unimplemented():pass
预期失败:
@pytest.mark.xfail(reason="已知兼容性问题")
def test_legacy_feature():assert False
3. 参数化标记(数据驱动)
@pytest.mark.parametrize("input,expected", [(1, 2), (3, 4)])
def test_add_one(input, expected):assert input + 1 == expected
4. 自定义标记的筛选
命令行执行特定标记的测试:
pytest -m "smoke" # 只运行冒烟测试
pytest -m "not slow" # 排除耗时用例
pytest -m "smoke or slow" # 组合逻辑
5. 动态添加标记
通过钩子函数动态标记(如根据执行时间):
def pytest_collection_modifyitems(items):for item in items:if "api" in item.nodeid:item.add_marker(pytest.mark.api)
注意事项:
未注册的自定义标记会触发警告,需在pytest.ini中声明。
标记支持继承(类标记会应用到所有方法)。
可通过pytest --markers查看所有可用标记。