pytest hook钩子介绍及使用
hook 钩子
简介:
hook 是 pytest
提供的一种插件机制,允许你监听或修改 pytest 的行为,而无需修改源码。
你可以通过编写 conftest.py
文件,定义特定的钩子函数,来实现对 pytest 流程的扩展。
pytest 钩子常用函数:
①、pytest_collection_modifyitems(session, config, items)
修改收集到的测试项(如加标记、排序、过滤)
def pytest_collection_modifyitems(session, config, items):
for item in items:
print(f"[收集测试] {item.name}")
②、pytest_runtest_protocol(item, nextitem)
单个测试用例执行流程的入口。
pytest_runtest_protocol(item, nextitem):
print(f"[执行测试入口] {item.name}")
③、pytest_runtest_setup(item)
在每个测试用例开始执行前调用。
# conftest.py
def pytest_runtest_setup(item):
print(f"[开始测试] {item.name}")
④、pytest_runtest_teardown(item, nextitem)
在每个测试用例执行结束后调用。
def pytest_runtest_teardown(item, nextitem):
print(f"[结束测试] {item.name}")
⑤、pytest_runtest_call(item)
在测试用例实际执行时调用(即测试函数体执行时)。
def pytest_runtest_call(item):
print(f"[执行测试] {item.name}")
⑥、pytest_runtest_logreport(report)
在每次测试用例生成报告时调用,可以用来记录测试结果。
def pytest_runtest_logreport(report):
if report.failed:
print(f"[失败] 测试用例: {report.nodeid}")
elif report.passed:
print(f"[成功] 测试用例: {report.nodeid}")
⑦、pytest_sessionstart(session)
在整个测试会话开始时调用,适合做一些初始化工作。
def pytest_sessionstart(session):
print("[测试会话开始]")
⑧、pytest_sessionfinish(session, exitstatus)
在整个测试会话结束时调用,适合做一些清理或生成报告的工作。
def pytest_sessionfinish(session, exitstatus):
print(f"[测试会话结束] 退出码: {exitstatus}")
⑨、pytest_generate_tests(metafunc)
用于动态生成参数化测试用例,常用于数据驱动测试。
def pytest_generate_tests(metafunc):
if "user" in metafunc.fixturenames:
metafunc.parametrize("user", ["Alice", "Bob", "Charlie"])
测试用例:
def test_user(user):
print(f"测试用户: {user}")
⑩、pytest_addoption(parser)
和 pytest_configure(config)
用于添加自定义命令行参数,并在配置加载时使用。
def pytest_addoption(parser):
parser.addoption("--env", action="store", default="test", help="测试环境: dev/test/prod")
def pytest_configure(config):
env = config.getoption("--env")
print(f"[环境设置] 当前环境: {env}")
使用方式:
pytest --env=dev
⑪、pytest_runtest_makereport(item, call)
生成测试报告,可用于截图、日志收集
def pytest_runtest_makereport(item, call):
print(f"生成报告:{item.name}")
总结:
Hook 类型 | 调用时机 | 用途 |
---|---|---|
pytest_collection_modifyitems |
测试用例收集 | 自定义重试策略 |
pytest_runtest_setup |
测试用例执行前 | 日志记录、初始化 |
pytest_runtest_call |
测试函数执行时 | 插桩、监控 |
pytest_runtest_teardown |
测试用例执行后 | 清理资源 |
pytest_runtest_logreport |
测试报告生成时 | 结果记录 |
pytest_sessionstart |
整体测试开始时 | 初始化环境 |
pytest_sessionfinish |
整体测试结束时 | 生成报告、清理 |
pytest_addoption / pytest_configure |
命令行参数处理 | 自定义参数 |
pytest_generate_tests |
参数化测试 | 动态生成测试数据 |
pytest_runtest_makereport |
生成测试报告前 | 截图、日志收集 |
评论区