侧边栏壁纸
博主头像
一朵云的博客博主等级

拥抱生活,向阳而生。

  • 累计撰写 108 篇文章
  • 累计创建 28 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

pytest -- hook 钩子介绍及使用

一朵云
2023-11-28 / 0 评论 / 0 点赞 / 698 阅读 / 5706 字

pytest hook钩子介绍及使用

hook 钩子

简介:

​ ​ hookpytest 提供的一种插件机制,允许你监听或修改 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 生成测试报告前 截图、日志收集
0

评论区