pytest教程-46-钩子函数-pytest_sessionstart
领取资料,咨询答疑,请➕wei: June__Go
上一小节我们学习了pytest_report_testitemFinished钩子函数的使用方法,本小节我们讲解一下pytest_sessionstart钩子函数的使用方法。
pytest_sessionstart 是 Pytest 提供的一个钩子函数,它在创建 Session 对象之后、执行收集测试用例之前调用。这个钩子可以用来执行一些全局的初始化操作,比如设置日志、初始化数据库连接等。
以下是一个具体的使用示例:
首先,在你的项目中创建一个 conftest.py 文件(如果还没有的话)。这个文件通常位于你的测试目录下,并且是 Pytest 用来收集钩子函数的地方。
然后,在 conftest.py 文件中定义 pytest_sessionstart 钩子函数:
# conftest.pydef pytest_sessionstart(session):# 这里可以执行一些全局的初始化操作print("Session is starting...")# 例如,设置日志import logginglogging.basicConfig(level=logging.INFO)# 或者初始化数据库连接# db_connection = create_db_connection()# session.db_connection = db_connection
在这个例子中,我们使用 logging 模块来设置日志记录。你也可以在这里执行其他任何需要在测试开始前完成的初始化任务。
当你运行 Pytest 时,pytest_sessionstart 钩子函数会被自动调用。如果你需要在测试结束后执行一些清理工作,可以使用 pytest_sessionfinish 钩子函数。
请注意,如果你在 conftest.py 中定义了 pytest_sessionstart 钩子,那么它将在整个测试会话开始时执行一次。如果你需要在每个测试文件开始前执行某些操作,你可能需要使用 pytest_collection_start 钩子。
当然,让我们创建一个更复杂的 pytest_sessionstart 钩子示例。在这个示例中,我们将执行以下操作:
- 设置日志记录。
- 创建一个全局的数据库连接。
- 初始化一个测试数据准备服务。
- 打印一条启动消息。
首先,确保你已经安装了 pytest 和 pytest-xdist(如果你打算并行运行测试)。如果没有安装,可以通过以下命令安装:
pip install pytest pytest-xdist
然后,在你的项目根目录下创建 conftest.py 文件,并添加以下代码:
# conftest.pyimport logging
import threading
import time
import sqlite3# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 全局数据库连接
class DatabaseConnection:def __init__(self):self.connection = sqlite3.connect('test.db')self.cursor = self.connection.cursor()def close(self):self.cursor.close()self.connection.close()def __enter__(self):return self.cursordef __exit__(self, exc_type, exc_val, exc_tb):self.connection.commit()if exc_type:self.connection.rollback()# 初始化数据库连接
def setup_database():db = DatabaseConnection()db.cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER)''')db.commit()db.close()# 测试数据准备服务
class TestDataService:def __init__(self):self.data_prepared = threading.Event()def prepare_data(self):# 模拟数据准备过程time.sleep(2)logging.info("Test data prepared.")self.data_prepared.set()def wait_for_data(self):self.data_prepared.wait()# 初始化测试数据服务
def pytest_sessionstart(session):logging.info("Session is starting...")# 设置数据库setup_database()# 初始化测试数据服务test_data_service = TestDataService()prepare_thread = threading.Thread(target=test_data_service.prepare_data)prepare_thread.start()session._test_data_service = test_data_service # 将服务实例保存到 session 对象中# 等待数据准备完成test_data_service.wait_for_data()logging.info("Session is ready to run tests.")
在这个示例中,我们首先定义了一个 DatabaseConnection 类来管理数据库连接。然后,我们创建了一个 TestDataService 类,它有一个 prepare_data 方法来模拟数据准备过程,并且使用一个线程来执行这个准备过程。我们还在 pytest_sessionstart 钩子中调用了这些初始化方法,并等待数据准备完成。
现在,当你运行 Pytest 时,pytest_sessionstart 钩子将被调用,并且会执行上述的初始化操作。这样,你就可以在测试用例中使用准备好的数据了。
请注意,这个示例假设你正在使用 SQLite 数据库,并且你的测试数据准备过程是同步的。在实际应用中,你可能需要根据你的具体需求调整数据库连接和数据准备逻辑。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei: June__Go

相关文章:
pytest教程-46-钩子函数-pytest_sessionstart
领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_report_testitemFinished钩子函数的使用方法,本小节我们讲解一下pytest_sessionstart钩子函数的使用方法。 pytest_sessionstart 是 Pytest 提供的一个钩子函数,…...
Windows内核函数 - ASCII字符串和宽字符串
本章介绍了Windows内核中字符串处理函数、文件读写函数、注册表读写函数。这些函数是DDK提供的运行时函数,他们比标准C语言的运行时函数功能更丰富。普通的C语言运行时库是不能在内核模式下使用的,必须使用DDK提供的运行时函数。 和应用程序一样…...
从零开始学习MySQL 事务处理
事务处理与ACID特性 事务是数据库操作的基本单元,它确保一组操作要么全部成功,要么全部失败,以此来维护数据库的一致性。这四个字母缩写ACID代表了事务的四大特性: 原子性(Atomicity)**:事务被…...
字符数组以及字符串相关的几个函数
一.字符数组 1.定义:格式如下 char a[10]; //此处就表示定义了一个长度为10的字符数组 2.引用: 也和其余的数组一样,是下标引用。 3.初始化: 如下代码为字符数组初始化的几种情况: int main() {char arr[5] {…...
AOP面向切面编程
1,注入依赖 <!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</grou…...
C# WinForm —— 15 DateTimePicker 介绍
1. 简介 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 dtp 开头Format设置显示时间的格式,包含Long: Short: Time: Custom:采用标准的时间格式 还是 自定义的格式CustomFormat自定…...
SpringBoot中六种批量更新Mysql 方式效率对比
SpringBoot中六种批量更新Mysql 方式效率对比 先上结论吧,有空可以自测一下,数据量大时运行一次还时挺耗时的 效率比较 小数据量时6中批量更新效率不太明显,根据项目选择合适的即可,以1万条为准做个效率比较,效率从高到低一次排名如下 replace into和ON DUPLICATE KEY效率最…...
【SpringBoot】SpringBoot整合jasypt进行重要数据加密
📝个人主页:哈__ 期待您的关注 目录 📕jasypt简介 🔥SpringBoot使用jasypt 📂创建我需要的数据库文件 📕引入依赖 🔓配置数据库文件(先不进行加密) 🌙创…...
【Go语言入门学习笔记】Part1.梦开始的地方
一、前言 经过一系列的学习,终于有时间来学习一些新的语言,Go语言在现在还是比较时髦的,多一个技能总比不多的好,故有时间来学一下。 二、配置环境 按照网络中已有的配置方法配置好,本人采用了Jetbrain的Goland&#…...
数据特征降维 | 主成分分析(PCA)附Python代码
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术和探索性数据分析方法,用于从高维数据中提取出最重要的特征并进行可视化。 PCA的基本思想是通过线性变换将原始数据投影到新的坐标系上,使得投影后的数据具有最大的方差。这些新的坐标轴称为主成分…...
当服务实例出现故障时,Nacos如何处理?
当服务实例出现故障时,Nacos的应对策略 在微服务架构日益盛行的今天,服务之间的稳定性与可靠性成为了我们架构师们不得不面对的重要课题。尤其是在面对服务实例出现故障时,如何确保整个系统的稳定运行,成为了我们首要考虑的问题。…...
遥感数据集制作(Potsdam数据集为例):TIF图像转JPG,TIF标签转PNG,图像重叠裁剪
文章目录 TIF图像转JPGTIF标签转PNG图像重叠裁剪图像重命名数据集转COCO格式数据集转VOC格式 遥感图像不同于一般的自然图像,由于波段数量、图像位深度等原因,TIF图像数据不能使用简单的格式转换方法。本文以Potsdam数据集为例,制作能够直接用…...
根据web访问日志,封禁请求量异常的IP,如IP在半小 时后恢复正常则解除封禁
在网络安全日益受到重视的今天,如何有效防范恶意流量和攻击成为了每个网站管理员必须面对的问题。恶意流量不仅会影响网站的正常运行,还可能导致服务器崩溃,给网站带来不可估量的损失。为了应对这一问题,我们特别推出了一款实用的…...
2.go语言初始(二)
本篇博客涉及到go 的基础数据类型、 go 语言中的运算符、转义字符、格式化输出、字符串操作 go 语言中的运算符 在 go 语言中,基本数据类型主要包括以下几类:整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型(byte…...
MQTT对比HTTP
吞吐量:根据3G网络的测量结果,MQTT的吞吐量比HTTP快93倍。这意味着在相同的网络条件下,MQTT能够更有效地传输数据,从而在处理大量数据或实时数据传输时具有更高的效率。架构与模式:MQTT基于发布/订阅模型,提…...
暴力数据结构之二叉树(堆的相关知识)
1. 堆的基本了解 堆(heap)是计算机科学中一种特殊的数据结构,通常被视为一个完全二叉树,并且可以用数组来存储。堆的主要应用是在一组变化频繁(增删查改的频率较高)的数据集中查找最值。堆分为大根堆和小根…...
死锁调试技巧:工作线程和用户界面线程
有人碰到了一个死锁问题,找到我们想请我们看看,这个是关于应用程序用户界面相关的死锁问题。 我也不清楚他为什么会找上我们,可能是因为我们经常会和窗口管理器打交道吧。 下面,我们来看看死锁的两个线程。 >> 请移步至 …...
蓝桥杯-外卖店优先级(简单写法)
“饱了么”外卖系统中维护着 N 家外卖店,编号 1∼N。 每家外卖店都有一个优先级,初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订…...
VueRouter使用总结
VueRouter 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。在使用 VueRouter 时,开发者可以定义路由映射规则,并在 Vue 组件中通过编程式导航或声明式导航的方式控制页面的跳转和展示。以下是 VueRouter 使用的…...
Flink checkpoint 源码分析- Checkpoint snapshot 处理流程
背景 在上一篇博客中我们分析了代码中barrier的是如何流动传递的。Flink checkpoint 源码分析- Checkpoint barrier 传递源码分析-CSDN博客 最后跟踪到了代码org.apache.flink.streaming.runtime.io.checkpointing.CheckpointedInputGate#handleEvent 现在我们接着跟踪相应…...
AI Agent 与传统AI区别:从被动响应到主动执行
AI Agent 与传统AI区别:从被动响应到主动执行📝 本章学习目标:本章是入门认知部分,帮助零基础读者建立对AI Agent的初步认知。通过本章学习,你将全面掌握"AI Agent 与传统AI区别:从被动响应到主动执行…...
基于单片机的婴儿看护系统设计
一、摘要 本课论文构思并实现了一种基于STM32F103C8T6单片机的智能婴儿看护系统婴儿看护系统,该系统致力于为婴儿提供全方位的监测与智能婴儿看护系统化的照护服务。它巧妙地融合了DHT11温湿度传感器、声音传感器以及液体传感器,这些传感器协同工作&…...
Redis 内存淘汰与过期策略
引言Redis 作为内存数据库,内存资源有限,必须妥善处理内存占用问题。本文梳理两种核心机制:淘汰策略决定内存达到上限时如何移除数据,涵盖 noeviction、LRU、LFU 等多种算法及其实现细节;过期策略(惰性删除…...
风冷机房温湿度数据采集解决方案
对部分气候干旱的地区来说,使用风冷技术对数据机房进行冷却是比较合适的方案,但高能耗问题仍需要避免与管控,要求环境温湿度与散热效率进行合理分配。对此,物通博联提供温湿度数据采集到机房管理平台的解决方案。 需求如下 温湿度…...
欧洲发布Euro-Office引发OnlyOffice强烈抗议
欧洲企业Ionos和Nextcloud联合推出了Euro-Office,这是基于OnlyOffice云办公套件的分支版本,专为对数字主权有顾虑的组织而设计,此举引发了原开发商的愤怒回应。几天前,以德国自托管云服务商Nextcloud为首的"欧洲企业和社区组…...
MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践
MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践 1. 引言:当AI走进放射科,我们如何相信它? 想象一下,一位放射科医生每天要面对上百张X光片,每一张都需要仔细查看、分析、撰写报告。长时间高…...
Qwen2.5-14B-Instruct开源模型落地:像素剧本圣殿短视频脚本批量生成
Qwen2.5-14B-Instruct开源模型落地:像素剧本圣殿短视频脚本批量生成 1. 项目概述 像素剧本圣殿(Pixel Script Temple)是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它将顶尖的AI推理能力与8-Bit复古美学完美融合,…...
2026网盘风云再起:告别“传不动”,这两款不限速良心网盘实测解析
近些年,网盘市场经历了一轮又一轮的洗牌。从早年各大云盘陆续关停,到后来现有网盘部分服务全面转向收费模式,甚至对非会员进行严苛的网速阉割。用户常常面临「存不下、传不动、下不来」的窘境。 如今已是2026年,网盘市场看似被少…...
AGV如何选合适的传感器
一、AGV传感器的三大功能块几乎所有AGV都可以把传感器分成三类:1)导航/定位传感器:用来“知道自己在哪、怎么走” 2)本体/运动传感器:用来“知道自己怎么动的” 3)避障/安全传感器:用来“不撞人…...
Linux实时查看CUDA显卡使用情况的常用命令详解
在 Linux 系统中,你可以使用以下几个常用命令来实时查看 CUDA 显卡的情况:1. nvidia-smi 命令nvidia-smi(NVIDIA System Management Interface)是 NVIDIA 提供的一个命令行工具,它可以实时显示 NVIDIA GPU 的状态信息&…...
