pytest常用钩子函数

1、什么叫钩子函数

在Pytest框架中,钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码,以实现特定的行为,操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。

如下图:

Pytest的钩子函数遵循一定的命名规则,通常以"pytest"为前缀, 这些钩子函数可以通过编写对应的函数并将其放在 conftest.py 文件中来实现。

pytest 中的钩子函数按功能一共分为 6 类:引导钩子,初始化钩子、用例收集钩子、用例执行钩子、报告钩子、调试钩子。

2、常用的钩子函数

1、pytest_addoption(parser): 当 pytest 命令行解析器被创建时,pytest 将调用这个函数,它将接受一个 parser 参数,可以通过它向解析器中添加自定义的命令行选项。

2、pytest_configure(config): 当 pytest 执行前首次读取配置文件时调用,通常在这里可以对配置进行修改。

3、pytest_unconfigure(config): 在 pytest 执行完成并退出时调用。

4、pytest_generate_tests(metafunc): 当pytest生成测试时,pytest将调用此函数。这是一个非常有用的函数,它可以帮助你动态生成测试。

5、pytest_collection_modifyitems(session, config, items): 这个钩子函数可以修改 pytest 的测试收集结果。你可以通过它添加、删除或者修改 pytest 收集的测试。

6、pytest_runtest_setup(item): 在 pytest 执行测试用例的 setup 阶段时调用。可以在这里添加自定义的 setup 逻辑。

7、pytest_runtest_call(item): 当测试用例被执行时,pytest 将调用此函数。在这个钩子函数中可以添加自定义的逻辑

8、pytest_runtest_teardown(item): 在 pytest 执行测试用例的 teardown 阶段时调用。可以在这里添加自定义的 teardown 逻辑。

9、pytest_runtest_makereport(item, call): 它在测试用例执行完毕并生成测试报告时触发,可以在此处对测试结果进行处理,通过实现该钩子函数来对测试报告进行定制化的处理,例如记录测试用例的执行结果、截图等。

10、pytest_sessionstart(session): 在测试套件开始执行前调用(也就是pytest进程启动后,会调用此钩子函数),可以在此处完成一些初始化操作。

11、pytest_sessionfinish(session, exitstatus): 在测试套件执行结束后调用(也就是pytest进程结束前,会调用此钩子函数,),可以在此钩子函数中执行清理操作或收集报告等。。

12、pytest_terminal_summary(terminalreporter): 在 pytest 执行完成后调用,它将整个测试结果的总结输出到终端上。

13、pytest_collection_finish(session): 当 pytest 集合测试结束时调用,可以在此处对测试用例进行筛选。

14、pytest_collection_modifyitems(session, config, items): 当测试用例收集完成后,会调用此钩子函数,可以通过此钩子函数修改、重排序测试用例。

这些钩子函数可以通过编写对应的函数并将其放在 conftest.py 文件中来实现。例如,如果想要在测试完成后发送一封邮件,可以在 conftest.py 文件中编写一个名为 pytest_sessionfinish 的函数,并在其中调用发送邮件的代码。

python 复制代码
# conftest.py

def pytest_sessionfinish(session, exitstatus):

    # 根据测试结果执行不同的操作
    if exitstatus == 0:
        # 测试通过时记录日志
        log_message = "测试通过,所有测试用例执行成功。"
    else:
        # 测试失败时记录日志
        log_message = "测试失败,部分或全部测试用例执行失败。"

    # 记录日志
    send_email(log_message)

# 模拟发送邮件的函数
def send_email(content):
    print(f"发送邮件:{content}")
相关推荐
测试19988 分钟前
Pytest中实现自动生成测试用例脚本代码
自动化测试·软件测试·python·测试工具·测试用例·pytest·接口测试
丿罗小黑20 小时前
Pytest项目_day04(Python做接口请求)
pytest
丿罗小黑1 天前
Pytest项目_day09(skip、skipif跳过)
pytest
₯㎕星空&繁华2 天前
接口自动化-pytest
运维·经验分享·笔记·自动化·pytest·接口
丿罗小黑3 天前
Pytest项目_day06(requests中Session的用法)
pytest
测试开发技术4 天前
软件测试中,pytest 如何运行多个文件或整个目录?
自动化测试·pytest·接口测试·面试题
鱼骨不是鱼翅7 天前
自动化框架pytest
运维·自动化·pytest
2025年一定要上岸10 天前
【pytest高阶】-2- 内置hook插件扩展机制和定制开发
pytest
2025年一定要上岸12 天前
【pytest高阶】源码的走读方法及插件hook
运维·前端·python·pytest
惜.己13 天前
pytest中使用ordering控制函数的执行顺序
开发语言·python·pytest