pytest教程-36-钩子函数-pytest_collection_start

领取资料,咨询答疑,请➕wei:  June__Go

上一小节我们学习了pytest_unconfigure钩子函数的使用方法,本小节我们讲解一下pytest_collection_start钩子函数的使用方法。

pytest_collection_start(session) 是一个 pytest 钩子函数,它在开始收集测试用例之前被调用。这个钩子可以用来执行一些测试前的准备工作,比如设置测试环境、初始化数据库连接等。以下是如何使用这个钩子函数的具体方法和代码示例:

首先,你需要在你的项目中创建或编辑 conftest.py 文件。这个文件位于你的测试目录下,pytest 会自动加载这个文件中的钩子函数。

然后,在 conftest.py 文件中定义 pytest_collection_start 钩子函数:

# conftest.pydef pytest_collection_start(session):# 在这里执行你的测试前准备工作print("Collection is starting...")# 例如,初始化数据库连接# 这里只是一个示例,你需要根据实际情况来编写代码import some_database_modulesession.db_connection = some_database_module.connect_to_database()# 或者设置一些全局变量session.global_variable = "This is a global variable set during collection"

在这个例子中,我们在钩子函数中打印了一条消息,表示测试用例的收集即将开始。然后,我们模拟了一个数据库连接的初始化过程,并将连接对象存储在 session 对象中。这样,在后续的测试中,我们可以通过 session.db_connection 来访问数据库连接。同时,我们还设置了一个全局变量 global_variable

请注意,session 对象是一个 pytest 会话对象,它包含了当前测试会话的信息。你可以在这个对象上设置属性,以便在测试过程中的其他钩子函数或测试用例中访问。

最后,运行你的测试,pytest 会自动调用 pytest_collection_start 钩子函数,并执行你定义的代码。例如:

pytest

这样,每当 pytest 开始收集测试用例时,都会执行你在 pytest_collection_start 钩子中定义的代码。这为你提供了一个在测试开始之前执行自定义逻辑的机会。

当然,让我们通过一个更复杂的示例来展示 pytest_collection_start 钩子函数的使用方法。在这个示例中,我们将模拟一个场景,其中我们需要在测试开始前加载配置文件、初始化日志系统,并为所有测试用例设置一个共享的测试数据。

首先,确保你的项目中有一个 conftest.py 文件。然后,添加以下代码:

# conftest.pyimport os
import json
import logging
from some_config_module import load_config  # 假设这是一个加载配置的模块# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def pytest_collection_start(session):# 打印开始收集测试用例的信息logging.info("Starting test collection...")# 加载配置文件config_path = os.path.join(os.path.dirname(__file__), 'config.json')if not os.path.exists(config_path):logging.error("Configuration file not found at path: %s", config_path)session.exitstatus = 1  # 设置退出状态,表示配置文件加载失败returntry:with open(config_path, 'r') as config_file:config_data = json.load(config_file)session.config = config_data  # 将配置数据存储在 session 对象中except json.JSONDecodeError as e:logging.error("Failed to decode configuration file: %s", e)session.exitstatus = 1  # 设置退出状态,表示配置文件解析失败return# 初始化测试数据session.test_data = {'user': 'test_user','password': 'test_password'}# 其他初始化操作...

在这个示例中,我们首先设置了日志系统,以便在测试过程中记录重要信息。然后,我们尝试加载一个名为 config.json 的配置文件。如果配置文件不存在或无法解析,我们将记录错误信息,并设置 session.exitstatus 为 1,这将导致 pytest 停止执行后续的测试。

如果配置文件加载成功,我们将配置数据存储在 session.config 中,这样在其他钩子函数或测试用例中就可以访问这些配置信息。同时,我们还创建了一个名为 session.test_data 的字典,用于存储所有测试用例共享的测试数据。

请注意,some_config_moduleconfig.json 是假设存在的模块和文件,你需要根据你的项目实际情况来替换它们。此外,session.exitstatus 是一个 pytest 提供的属性,用于设置测试会话的退出状态。如果设置为非零值,pytest 会提前终止测试执行。

现在,当你运行测试时,pytest_collection_start 钩子函数会被调用,执行上述的初始化操作。这为所有测试用例提供了一个准备就绪的环境。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python_4-对象序列化操作

文章目录 Python中对象数据持久化操作模块学习笔记marshal模块优点缺点使用示例保存数据到文件从文件读取数据 shelve模块优点缺点使用示例保存数据到文件从文件读取数据 总结 Python中对象数据持久化操作模块学习笔记 在Python中,数据持久化指的是将程序中的数据结…

秋招后端开发面试题 - JVM垃圾回收算法

目录 JVM垃圾回收算法前言面试题垃圾收集有哪些算法,各自的特点?说一下新生代的区域划分?Minor GC/Young GC、Major GC/Old GC、Mixed GC、Full GC?Minor GC/Young GC 什么时候触发?什么时候会触发 Full GC&#xff1f…

程序员做知识付费,做大纲时要注意那些点?

大纲的注意点 本节我们将讨论制作大纲时的要点。由于大家对大纲的制作已有一定了解,因此我们不会全面展开,而是聚焦于一些关键注意事项与大家分享。 条理性 最关键的一点是大纲必须具备清晰的条理性。如果大纲在逻辑结构上不够清晰,无论其他…

初二的孩子怎么沟通和教育,这个教育方法家长必看

初中生正值“身心聚变”时期,其中初二学生尤为明显,美国心理学家霍林沃斯称之为“心理性断乳期”。他们希望别人把他们看成“大人”,希望别人信任尊重他们。为此,家长应当积极配合学校工作,针对这种思想,采…

PHP基于B/S版 医院不良事件管理系统源码vscode+laravel8医院如何加强不良事件上报系统的管理 AEMS系统源码

PHP基于B/S版 医院不良事件管理系统源码vscodelaravel8医院如何加强不良事件上报系统的管理 AEMS系统源码 医院安全(不良)事件管理AEMS系统AEMS采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要…

快速编写测试用例(超详细~)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 当你学会了如何设计测试用例之后,接下来便是开始用例…

设计模式设计原则

设计原则 前言:了解设计模式之前,一定要先理解什么设计原则,只有这样才能悟透设计模式的根本。 快速入口 工厂模式单例模式 1.何为设计? 按哪一种思路或者标准来实现的功能;功能相同,可以有不同设计的方…

黑马苍穹外卖

sky-pojo子模块内容 Entity:实体,通常和数据库中的表对应DTO:数据传输对象,通常用于程序中各层之间传递数据(eg:前端返回的json数据,后端要接收,并且转化为java对象,此时…

QtConcurrent::run操作界面ui的注意事项(1)

先说结论:QtConcurrent::run启动的耗时处理函数,不允许处理ui界面对象,如控件,如进度条等等! QtConcurrent::run非常好用,胜过QThead的两种方式(run和moveToThread),例如…

拆炸弹(Lc1652)——模拟

你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之…

ERP系统电子文件归档和电子档案管理规范

ERP系统电子文件归档和电子档案管理规范 1 范围 本文件描述了企业资源计划(ERP)系统形成电子文件归档和电子档案管理的方法。 本文件适用于企业资源计划(ERP)系统(含采购、销售、物料、生产计划、质量、设备、项目…

使用C#和EF Core实现高效的SQL批量插入

在软件开发中,批量插入数据是一个常见的需求,特别是在数据迁移、初始化数据库或进行大量数据处理时。Entity Framework Core (EF Core) 是一个流行的.NET对象关系映射器(ORM),它简化了数据库操作,但在进行大…

Linux CPU 飙升 排查五步法

排查思路-五步法 1. top命令定位应用进程pid 找到最耗时的CPU的进程pid top2. top-Hp[pid]定位应用进程对应的线程tid 找到最消耗CPU的线程ID // 执行 top -Hp [pid] 定位应用进程对应的线程 tid // 按shift p 组合键,按照CPU占用率排序 > top -Hp 111683.…

用wordpress建跨境电商独立站的5大优势

免费和开源 WordPress是一个免费的开源内容管理系统,用户可以自由下载、安装和使用,无需支付版权费用或订阅费用。开源特性也意味着用户可以根据自己的需求修改和定制代码,或者使用其他开发者提供的插件和主题来扩展和美化网站。 易用和灵活…

探索Vue 3.0中的v-html指令

探索Vue 3.0中的v-html指令 一、什么是v-html指令?1、 在Vue 3.0中使用v-html2、 注意事项 二、结语 一、什么是v-html指令? Vue.js作为一款流行的JavaScript框架,不断地演进着。随着Vue 3.0的发布,开发者们迎来了更加强大和灵活…

CMS清理流程及问题

CMS(Concurrent Mark Sweep,并发标记清除)收集器是以获取最短回收停顿时间为目标的收集器(追求低停顿),它在垃圾收集时使得用户线程和GC线程并发执行,因此在垃圾收集过程中用户也不会感到明显的卡顿。从名字…

SparkSQL编程入口和模型与SparkSQL基本编程

SparkSQL编程入口和模型 SparkSQL编程模型 主要通过两种方式操作SparkSQL,一种就是SQL,另一种为DataFrame和Dataset。 1)SQL:SQL不用多说,就和Hive操作一样,但是需要清楚一点的是,SQL操作的是表&#xf…

为什么很多人不推荐你用JWT?

为什么很多人不推荐你用JWT? 如果你经常看一些网上的带你做项目的教程,你就会发现 有很多的项目都用到了JWT。那么他到底安全吗?为什么那么多人不推荐你去使用。这个文章将会从全方面的带你了解JWT 以及他的优缺点。 什么是JWT? 这个是他的官网JSON…

Linux学习(一)-- 简单的认识

目录 1. Linux的诞生 2.Linux发行版 拓展: (1)什么是Linux系统的内核? (2)什么是Linux系统发行版? 1. Linux的诞生 Linux创始人: 林纳斯 托瓦兹 Linux 诞生于1991年,作者上大学…

2×24.5W、内置 DSP、低失真、高信噪比、I2S 输入 D 类音频功率放大器,完美替换TPA5805,晶豪,致盛,

ANT3825 是一款高集成度、高效率的双通道数字 输入功放。供电电压范围在 5V~18V,数字接口 电源支持 3.3V 或 1.8V。双通道 BTL 模式下输出 功率可以到 224.5W(4Ω,16V,THDN1%), 单通道 PBTL 模式下可以输出 37W&#x…