Pytest:hooks钩子函数

Pytest:hooks钩子函数

  • Bootstrapping hooks 引导钩子
  • Initialization hooks 初始化钩子
  • Collection hooks 测试用例收集钩子
  • Test running (runtest) hooks 测试运行钩子
  • Reporting hooks 测试报告钩子
  • Debugging/Interaction hooks 调试/交互钩子

Pytest的钩子函数可分为6类,分别是: 引导钩子,初始化钩子、用例收集钩子、用例执行钩子、报告钩子、调试钩子。

引导钩子(Session): 在整个测试会话(Session)的生命周期中,用于配置和管理测试执行的环境。这些钩子函数在测试会话启动和结束时执行,可用于设置全局的测试配置、初始化测试环境、清理测试数据等。

初始化钩子(Module): 在每个测试模块(Module)的生命周期中,用于准备测试环境和执行一些初始化操作。这些钩子函数在每个测试模块开始执行之前调用,可用于加载模块级别的测试数据、准备测试环境等。

用例收集钩子(Function和Class): 在收集测试用例时,用于自定义测试用例的收集行为。这些钩子函数在 Pytest 收集测试用例时调用,可以用于过滤测试用例、动态生成测试用例等。

用例执行钩子(Function和Class): 在执行测试用例时,用于控制测试用例的执行流程和行为。这些钩子函数在执行测试用例之前和之后调用,可以用于设置前置条件、后置条件、收集测试结果等。

报告钩子(Session): 在测试会话结束时,用于生成测试报告和记录测试结果。这些钩子函数在测试会话结束时调用,可以用于自定义测试报告的输出格式、记录额外的测试信息等。

调试钩子(Session): 在进行调试时,用于控制测试执行的行为和提供调试信息。这些钩子函数在测试会话期间,通过调试器进行调试时调用,可用于设置断点、输出调试信息等。

详细文档参考pytest官方文档:https://docs.pytest.org/en/latest/reference.html#hooks

Bootstrapping hooks 引导钩子

引导挂钩要求足够早注册的插件(内部和setuptools插件)

● pytest_load_initial_conftests(early_config,parser,args): 在命令行选项解析之前实现初始conftest文件的加载。
● pytest_cmdline_preparse(config,args): (不建议使用)在选项解析之前修改命令行参数。
● pytest_cmdline_parse(pluginmanager,args): 返回一个初始化的配置对象,解析指定的args。
● pytest_cmdline_main(config): 要求执行主命令行动作。默认实现将调用configure hooks和runtest_mainloop。

Initialization hooks 初始化钩子

初始化钩子需要调用插件和conftest.py文件

● pytest_addoption(parser): 注册argparse样式的选项和ini样式的配置值,这些值在测试运行开始时被调用一次。
● pytest_addhooks(pluginmanager): 在插件注册时调用,以允许通过调用来添加新的挂钩
● pytest_configure(config): 许插件和conftest文件执行初始配置。
● pytest_unconfigure(config): 在退出测试过程之前调用。
● pytest_sessionstart(session): 在Session创建对象之后,执行收集并进入运行测试循环之前调用。
● pytest_sessionfinish(session,exitstatus): 在整个测试运行完成后调用,就在将退出状态返回系统之前。
● pytest_plugin_registered(plugin,manager):一个新的pytest插件已注册。

Collection hooks 测试用例收集钩子

● pytest_collection(session): 执行给定会话的收集协议。
● pytest_collect_directory(path, parent): 在遍历目录以获取集合文件之前调用。
● pytest_collect_file(path, parent) 为给定的路径创建一个收集器,如果不相关,则创建“无”。
● pytest_pycollect_makemodule(path: py._path.local.LocalPath, parent) 返回给定路径的模块收集器或无。
● pytest_pycollect_makeitem(collector: PyCollector, name: str, obj: object) 返回模块中Python对象的自定义项目/收集器,或者返回None。在第一个非无结果处停止
● pytest_generate_tests(metafunc: Metafunc) 生成(多个)对测试函数的参数化调用。
● pytest_make_parametrize_id(config: Config, val: object, argname: str) 返回val 将由@ pytest.mark.parametrize调用使用的给定用户友好的字符串表示形式,如果挂钩不知道,则返回None val。
● pytest_collection_modifyitems(session: Session, config: Config, items: List[Item]) 在执行收集后调用。可能会就地过滤或重新排序项目。
● pytest_collection_finish(session: Session) 在执行并修改收集后调用。

Test running (runtest) hooks 测试运行钩子

● pytest_runtestloop(session: Session) 执行主运行测试循环(收集完成后)。
● pytest_runtest_protocol(item: Item, nextitem: Optional[Item]) 对单个测试项目执行运行测试协议。
● pytest_runtest_logstart(nodeid: str, location: Tuple[str, Optional[int], str]) 在运行单个项目的运行测试协议开始时调用。
● pytest_runtest_logfinish(nodeid: str, location: Tuple[str, Optional[int], str])在为单个项目运行测试协议结束时调用。
● pytest_runtest_setup(item: Item) 调用以执行测试项目的设置阶段。
● pytest_runtest_call(item: Item) 调用以运行测试项目的测试(调用阶段)。
● pytest_runtest_teardown(item: Item, nextitem: Optional[Item]) 调用以执行测试项目的拆卸阶段。
● pytest_runtest_makereport(item: Item, call: CallInfo[None]) 被称为为_pytest.reports.TestReport测试项目的每个设置,调用和拆卸运行测试阶段创建一个。
● pytest_pyfunc_call(pyfuncitem: Function) 调用基础测试功能。

Reporting hooks 测试报告钩子

● pytest_collectstart(collector: Collector) 收集器开始收集。
● pytest_make_collect_report(collector: Collector) 执行collector.collect()并返回一个CollectReport。
● pytest_itemcollected(item: Item) 我们刚刚收集了一个测试项目。
● pytest_collectreport(report: CollectReport) 收集器完成收集。
● pytest_deselected(items: Sequence[Item]) 要求取消选择的测试项目,例如按关键字。
● pytest_report_header(config: Config, startdir: py._path.local.LocalPath) 返回要显示为标题信息的字符串或字符串列表,以进行终端报告。
● pytest_report_collectionfinish(config: Config, startdir: py._path.local.LocalPath, items: Sequence[Item]) 返回成功完成收集后将显示的字符串或字符串列表。
● pytest_report_teststatus(report: Union[CollectReport, TestReport], config: Config) 返回结果类别,简写形式和详细词以进行状态报告。
● pytest_terminal_summary(terminalreporter: TerminalReporter, exitstatus: ExitCode, config: Config) 在终端摘要报告中添加一个部分。
● pytest_fixture_setup(fixturedef: FixtureDef[Any], request: SubRequest) 执行夹具设置执行。
● pytest_fixture_post_finalizer(fixturedef: FixtureDef[Any], request: SubRequest) 在夹具拆除之后但在清除缓存之前调用,因此夹具结果fixturedef.cached_result仍然可用(不是 None)
● pytest_warning_captured(warning_message: warnings.WarningMessage, when: Literal[‘config’, ‘collect’, ‘runtest’], item: Optional[Item], location: Optional[Tuple[str, int, str]]) (已弃用)处理内部pytest警告插件捕获的警告。
● pytest_warning_recorded(warning_message: warnings.WarningMessage, when: Literal[‘config’, ‘collect’, ‘runtest’], nodeid: str, location: Optional[Tuple[str, int, str]]) 处理内部pytest警告插件捕获的警告。
● pytest_runtest_logreport(report: TestReport) 处理项目的_pytest.reports.TestReport每个设置,调用和拆卸运行测试阶段产生的结果。
● pytest_assertrepr_compare(config: Config, op: str, left: object, right: object) 返回失败断言表达式中的比较的说明。
● pytest_assertion_pass(item: Item, lineno: int, orig: str, expl: str) (实验性的)在断言通过时调用。

Debugging/Interaction hooks 调试/交互钩子

用于特殊报告或与异常交互

● pytest_internalerror(excrepr: ExceptionRepr, excinfo: ExceptionInfo[BaseException]) 要求内部错误。返回True以禁止对将INTERNALERROR消息直接打印到sys.stderr的回退处理。
● pytest_keyboard_interrupt(excinfo: ExceptionInfo[Union[KeyboardInterrupt, Exit]]) 要求键盘中断。
● pytest_exception_interact(node: Union[Item, Collector], call: CallInfo[Any], report: Union[CollectReport, TestReport]) 在引发可能可以交互处理的异常时调用。
● pytest_enter_pdb(config: Config, pdb: pdb.Pdb) 调用了pdb.set_trace()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/585005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源AI智能名片商城小程序:深度解读IMC(IP、MarTech、Content)视角

在数字化浪潮中,私域流量的运营已成为企业不可或缺的增长引擎。而开源AI智能名片商城小程序,则是以一种全新的视角——IMC(IP、MarTech、Content),为企业打开私域流量运营的新篇章。今天,我们就来一起深入解…

Leetcode-17.04. 消失的数字

面试题 17.04. 消失的数字 - 力扣(LeetCode)https://leetcode.cn/problems/missing-number-lcci/ 目录 面试题 17.04. 消失的数字 - 力扣(LeetCode) 题目 解题(注释) 第一种方法 第二种方法 第三种方法 题目 数组nums包含…

【GAMES 101】图形学入门——着色(Shading)

定义:将不同材质内容应用于不同物体对象上的过程。着色只考虑着色点的存在,不考虑其他物体的遮挡等,因此不考虑阴影处理 一些前期内容的定义: 着色点(Shading Point)观测方向(Viewer Directio…

vue 脚手架 创建vue3项目

创建项目 命令:vue create vue-element-plus 选择配置模式:手动选择模式 (上下键回车) 选择配置(上下键空格回车) 选择代码规范、规则检查和格式化方式: 选择语法检查方式 lint on save (保存就检查) 代码文件中有代码不符合 l…

抄表自动化的实现与优势

1.界定与简述 抄表自动化是一种当代关键技术,致力于取代传统的手动式抄表方法,通过远程数据数据采集解决,完成电力工程、水、气等公用事业电力仪表的全自动载入。这一系统利用先进的感应器、物联网技术(IoT)设备及数据数据分析工具&#xff…

西圣全新磁吸无线充电宝强势上线:打开充电新方式,摆脱续航焦虑

在移动互联时代,智能手机、平板电脑等电子设备已经成为我们生活不可或缺的一部分。但随之而来的是电池续航问题的困扰,用户往往需要在户外、旅途或日常生活中频繁地充电。为了解决这一问题,充电宝作为便携式的移动充电设备,已经成…

leetCode61. 旋转链表

leetCode61. 旋转链表 题目思路:见如图所示 代码展示 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* Li…

触发器的启用和禁用

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在 Oracle 数据库中,所创建的触发器可以根据情况,灵活修改它的状态,使其有效或者无效,即启用或者禁用。 其语法格式如下所示。…

Mac好用又好看的终端iTerm2 + oh-my-zsh

Mac好用又好看的终端iTerm2 1. iTerm2的下载安装2. oh-my-zsh的安装2.1 官网安装方式2.2 国内镜像源安装方式 3. oh-my-zsh配置3.1 存放主题的路径3.2 存放插件的路径3.3 配置文件路径 1. iTerm2的下载安装 官网下载: iTerm2 2. oh-my-zsh的安装 oh-my-zsh是一…

Spirng 当中 Bean的作用域

Spirng 当中 Bean的作用域 文章目录 Spirng 当中 Bean的作用域每博一文案1. Spring6 当中的 Bean的作用域1.2 singleton 默认1.3 prototype1.4 Spring 中的 bean 标签当中scope 属性其他的值说明1.5 自定义作用域,一个线程一个 Bean 2. 总结:3. 最后: 每…

使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B

2024年4月18日,meta开源了Llama 3大模型[1],虽然只有8B[2]和70B[3]两个版本,但Llama 3表现出来的强大能力还是让AI大模型界为之震撼了一番,本人亲测Llama3-70B版本的推理能力十分接近于OpenAI的GPT-4[4],何况还有一个4…

React的路由

1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候,path 对应的组件会在页面中进行渲染 2. 创建路由开发环境 # 使用CRA创建项目 npm create-react-app react-router-pro# 安装最新的ReactRouter包 npm i react-ro…

人工智慧时代的引擎:揭开机器人核心零部件的奥秘

机器人核心零部件技术现状及趋势 工业机器人是我国制造业的“顶冠明珠”,在机器人核心零部件的研发制造上,我国在很多方面已经接近国际顶尖水平,但一些核心技术仍无法满足复杂高端领域应用需求,如精密减速器的传动精度与寿命间竞争…

「玻尔曾孙」领衔!超辐射原子,重塑全球精准测时——

超辐射原子能够帮助我们以前所未有的精度测量时间。在哥本哈根大学最近的一项研究中,研究人员开发了一种新的测量时间间隔(秒)的方法,这种方法克服了目前最先进原子钟面临的一些限制。 这一成就有望在多个领域产生深远影响&#x…

C语言进阶|双链表

✈链表的分类 链表的结构非常多样,以下情况组合起来就有8种(2x22)链表结构: 虽然有这么多的链表的结构,但是我们实际中最常用还是两种结构:单链表和双向带头循环链表 1.无头单向非循环链表:结构简单&…

[iOS]使用CocoaPods发布公开库

1.检查库名是否已被占用 选择库名时,尽量选择具有描述性并且独特的名字,这不仅可以避免命名冲突,还可以帮助用户更好地理解库的用途和功能。 在实际创建和发布 CocoaPods 库之前,确实应该检查库名是否已经被占用,以避…

文献速递:深度学习医学影像心脏疾病检测与诊断---利用深度学习进行动态心脏PET的自动帧间患者运动校正

Title 题目 Automatic Inter-frame Patient Motion Correction for Dynamic Cardiac PET Using Deep Learning 利用深度学习进行动态心脏PET的自动帧间患者运动校正 01 文献速递介绍 OSITRON正电子发射断层扫描(PET)心肌灌注成像已被证明相较于其他…

基于SkyEye运行Android——应用最为广泛的移动设备操作系统

01.Android简介 Android(安卓)是一种基于Linux内核(不包含GNU组件)的开源操作系统,最初由安迪鲁宾开发,主要支持手机。2005年8月由Google收购注资;2007年11月,Google与84家硬件制造…

SpringCloud项目打包的镜像下载成功后docker ps找不到

一、问题: 当我们项目打包发布成镜像时,在docker 下载运行镜像后,docker ps找不到下载的镜像 但是docker ps -a可以查看。打印日志docker logs 容器id 遇到错误信息 "no main manifest attribute, in app.jar",这意味…
最新文章