当前位置: 首页 > news >正文

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 的函数,并在其中调用发送邮件的代码。

# conftest.pydef pytest_sessionfinish(session, exitstatus):# 根据测试结果执行不同的操作if exitstatus == 0:# 测试通过时记录日志log_message = "测试通过,所有测试用例执行成功。"else:# 测试失败时记录日志log_message = "测试失败,部分或全部测试用例执行失败。"# 记录日志send_email(log_message)# 模拟发送邮件的函数
def send_email(content):print(f"发送邮件:{content}")

http://www.lryc.cn/news/338142.html

相关文章:

  • .Net <% %>
  • 【C语言__编译和链接__复习篇2】
  • Jmeter —— 自动录制脚本
  • 使用python互相转换AVI、MP4、GIF格式视频文件
  • 11 Php学习:函数
  • 查询电脑用户名和组信息
  • 【Godot4.2】CanvasItem绘图函数全解析 - 9.绘制表格
  • 部署HDFS集群(完全分布式模式、hadoop用户控制集群、hadoop-3.3.4+安装包)
  • TCP协议简单总结
  • 【Qt 实现录音】
  • python:算法竞赛入门之一
  • 【大数据与云计算】虚拟机安装Linux
  • 从零开始编写一个cmake构建脚本
  • pringboot2集成swagger2出现guava的FluentIterable方法不存在
  • 进程线程的关系
  • 一些 VLP 下游任务的相关探索
  • 【opencv】示例-pca.cpp PCA图像重建演示
  • C语言中的编译和链接
  • 如何将三方库集成到hap包中——通过IDE集成cmak构建方式的C/C++三方库
  • Towards Street-Level Client-Independent IP Geolocation(2011年)(第二部分)
  • 软件测试过程和测试生命周期
  • python-study-day1
  • 【Apache2】彻底删除 Apache2 服务器
  • C#:成绩等级转换
  • 每日OJ题_01背包③_力扣494. 目标和(dp+滚动数组优化)
  • vue3+element plus图片预览点击按钮直接显示图片的预览形式
  • GAMS104 现代游戏引擎 2
  • spring boot学习第十七篇:OAuth2概述及使用GitHub登录第三方网站
  • 基于springboot的电影评论网站系统源码数据库
  • javaScript手写专题——实现instanceof/call/apply/bind/new的过程/继承方式