pytest教程-47-钩子函数-pytest_sessionfinish
领取资料,咨询答疑,请➕wei: June__Go
上一小节我们学习了pytest_sessionstart钩子函数的使用方法,本小节我们讲解一下pytest_sessionfinish钩子函数的使用方法。
pytest_sessionfinish 钩子函数在 Pytest 测试会话结束时调用,无论测试是成功还是失败。这个钩子可以用来执行一些清理工作,比如关闭数据库连接、删除临时文件、发送测试报告等。
以下是一个具体的使用示例,我们将在测试会话结束时关闭之前打开的数据库连接,并打印一条结束消息。
首先,确保你的 conftest.py 文件中已经定义了 DatabaseConnection 类和相关的初始化逻辑,如前面示例所示。
然后,在 conftest.py 文件中添加 pytest_sessionfinish 钩子函数:
# conftest.py# ... 其他代码 ...# 假设 session 对象在 pytest_sessionstart 钩子中被赋值给了 _test_data_service
# 我们需要在 pytest_sessionfinish 钩子中访问它以执行清理工作def pytest_sessionfinish(session):# 打印测试会话结束的消息logging.info("Session is finishing...")# 关闭数据库连接if hasattr(session, '_test_data_service') and session._test_data_service:# 假设 session._test_data_service 是我们在 pytest_sessionstart 中创建的# 包含了数据库连接的实例session._test_data_service.close()# 执行其他清理工作,例如删除临时文件等# 打印完成消息logging.info("Session has finished.")
在这个示例中,我们在 pytest_sessionfinish 钩子中检查 session 对象是否有一个名为 _test_data_service 的属性。这个属性是在 pytest_sessionstart 钩子中设置的,它包含了我们在测试会话开始时创建的数据库连接实例。然后,我们调用 close 方法来关闭数据库连接。
请注意,这个示例假设你在 pytest_sessionstart 钩子中已经创建了一个数据库连接,并且将其保存在了 session 对象的 _test_data_service 属性中。如果你的实现方式不同,你可能需要相应地调整这个钩子函数。
现在,当你运行 Pytest 测试时,pytest_sessionfinish 钩子将在测试会话结束时被调用,执行数据库连接的关闭操作。这样,你就可以确保所有的资源在使用后都被正确地清理。
好的,让我们创建一个更复杂的 pytest_sessionfinish 钩子示例。在这个示例中,我们将执行以下操作:
- 关闭之前打开的数据库连接。
- 清理测试期间创建的临时文件。
- 发送测试结果的电子邮件通知。
- 打印一条详细的结束消息,包括测试执行的总时间。
首先,确保你的 conftest.py 文件中已经定义了 DatabaseConnection 类和相关的初始化逻辑,如前面的示例所示。我们还将使用 smtplib 发送电子邮件通知,所以请确保你已经安装了 pytest-xdist(如果你打算并行运行测试)。
然后,在 conftest.py 文件中添加 pytest_sessionfinish 钩子函数:
# conftest.pyimport logging
import os
import shutil
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import time# ... 其他代码 ...# 假设我们有一个全局变量来跟踪测试开始时间
start_time = time.time()def pytest_sessionfinish(session):# 计算并打印测试执行的总时间end_time = time.time()elapsed_time = end_time - start_timelogging.info(f"Session finished. Total time: {elapsed_time:.2f} seconds")# 关闭数据库连接if hasattr(session, '_test_data_service') and session._test_data_service:session._test_data_service.close()# 清理临时文件temp_dir = 'temp_test_files'if os.path.exists(temp_dir):shutil.rmtree(temp_dir)logging.info(f"Removed temporary directory: {temp_dir}")# 发送测试结果的电子邮件通知def send_email(subject, body):# 设置你的电子邮件服务器和账户信息sender_email = "your_email@example.com"receiver_email = "receiver@example.com"password = "your_password"smtp_server = "smtp.example.com"smtp_port = 587# 创建邮件内容msg = MIMEMultipart()msg['From'] = sender_emailmsg['To'] = receiver_emailmsg['Subject'] = subjectmsg.attach(MIMEText(body, 'plain'))# 发送邮件server = smtplib.SMTP(smtp_server, smtp_port)server.starttls()server.login(sender_email, password)server.sendmail(sender_email, receiver_email, msg.as_string())server.quit()# 假设我们有一个函数来获取测试结果的摘要test_results_summary = get_test_results_summary() # 这个函数需要你自己实现subject = "Test Session Results"body = f"Test session has finished.\n\n{test_results_summary}"send_email(subject, body)# 打印完成消息logging.info("Session cleanup completed.")
在这个示例中,我们首先计算并记录了测试执行的总时间。然后,我们关闭了在 pytest_sessionstart 钩子中创建的数据库连接,并清理了测试期间创建的临时文件。我们还创建了一个 send_email 函数来发送测试结果的电子邮件通知。这个函数使用了 smtplib 库来连接到 SMTP 服务器并发送邮件。最后,我们调用 send_email 函数并传递测试结果的摘要。
请注意,这个示例中的 get_test_results_summary 函数是一个假设的函数,你需要根据你的测试框架和需求来实现它。此外,你需要提供有效的电子邮件服务器信息、账户信息和接收者邮箱地址。
现在,当你运行 Pytest 测试时,pytest_sessionfinish 钩子将在测试会话结束时被调用,执行上述的清理和通知工作。这样,你就可以确保所有的资源在使用后都被正确地清理,并且测试结果能够及时通知到相关人员。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei: June__Go

相关文章:
pytest教程-47-钩子函数-pytest_sessionfinish
领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_sessionstart钩子函数的使用方法,本小节我们讲解一下pytest_sessionfinish钩子函数的使用方法。 pytest_sessionfinish 钩子函数在 Pytest 测试会话结束时调用,…...
如何使用Python下载哔哩哔哩(Bilibili)视频字幕
在本文中,我将向大家展示如何使用Python下载哔哩哔哩(Bilibili)视频的字幕。通过这个方法,你可以轻松地获取你喜欢的视频的字幕文件,方便学习和交流。 准备工作 在开始之前,我们需要安装一些必要的库&…...
IP代理网络协议介绍
在IP代理页面上,存在HTTP/HTTPS/Socks5三种协议。它们都是客户端与服务器之间交互的协议。 HTTP HTTP又称之为超文本传输协议,在因特网使用范围广泛。它是一种请求/响应模型,客户端向服务器发送请求,服务器解析请求后对客户端作出…...
渗透相关面试+流量分析
文章目录 简单自我介绍上一个工作的主要内容Hvv的分组和流程你在hvv/攻防演练中取得了哪些成绩? 二、渗透相关面试题基础端口号以及入侵方式OSI七层协议响应状态码都有哪些?**WAF和IPS的区别**盲注是什么?java内存马类型**内存马有几种类型**…...
Shell之高效文本处理命令
目录 一、排序命令—sort 基本语法 常用选项 二、去重命令—uniq 基本语法 常用选项 三、替换命令—tr 基本语法: 常用选项 四、裁剪命令—cut 基本语法: 常用选项 字符串分片 五、拆分命令—split 基本语法: 六、 文件…...
u3d的ab文件注意事项
//----------------LoadAllAB.cs--------------------- using System.Collections;using UnityEngine;namespace System.IO{public class LoadAllAB : MonoBehaviour{ //读取本地string path "Assets/Actors/lznh/ab/animation/t_bl/";// Use this for initiali…...
Go微服务开源框架kratos的依赖注入关系总结
该文章为学习开源微服务框架kratos的学习笔记!官方文档见:简介 | Kratos Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。 一、Kratos 项目结构简介 通过 Kratos 工具生成的 Go工程化项目模板如下: applicati…...
Linux 第三十二章
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…...
手机号码的正则表达式
手机号码的正则表达式会根据不同的国家/地区有所不同,因为每个国家/地区都有自己特定的手机号码格式。但是,我可以为你提供一个通用的正则表达式模板,并给出一些具体国家/地区的例子。 通用模板 一个基本的手机号码正则表达式模板可能如下所…...
机器学习入门介绍
各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 目录 三大方向机器学习产生的原因机器如何学习…...
一文说通用户故事点数是什么?
一文说通用户故事点数是什么? 第26期:一文说通用户故事点数是什么? 用户故事点数是一种采用相对估算法进行估算的一种工具,一般采用斐波那契数列表征用户故事里说的大小,采用0 1 2 3 5 8 13这样的一些数字来表征用户…...
GAME101-Lecture07学习
前言 今天主要讲shading(着色)。在讲着色前,要先讲图形中三角形出现遮挡问题的方法(深度缓存或缓冲)。 先采样再模糊错误:对信号的频谱进行翻译(在这期间会有频谱的混叠)ÿ…...
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
看到这句话的时候证明:此刻你我都在努力~ 加油陌生人~ 个人主页: Gu Gu Study 专栏:一步一步了解Java 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努…...
ICSE docker related research
ICSE 2024 Empirical Study of the Docker Smells Impact on the Image Size Docker 气味对镜像大小影响的实证研究 Docker 是一种广泛采用的打包和部署应用程序的工具,它利用 Dockerfile 来构建镜像。然而,创建最佳的 Dockerfile 可能具有挑战性&…...
【C++】学习笔记——多态_1
文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承,那组合又是什么?下面这种情况就是…...
C++map容器关联式容器
Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的࿰…...
TS-抽象类和静态成员
目录 1,抽象类1,为什么需要抽象类2,抽象成员3,设计模式-模板模式 2,静态成员1,什么是静态成员2,设计模式-单例模式 1,抽象类 1,为什么需要抽象类 有时,某个…...
SharePoint 使用renderListDataAsStream方法查询list超过5000时的数据
问题: 当SharePoint List里的数据超过5000时,如果使用常用的rest api去获取数据,例如 await this.sp.web.lists.getByTitle(Document Library).rootFolder.files.select(*, listItemAllFields).expand(listItemAllFields).filter(listItemA…...
2024042001-计算机网络 - 物理层
计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向,分为以下三种通信方式: 单工通信:单向传输半双工通信:双向交替传输全双工通信:双向同时传输 带通调制 模拟信号…...
通过java将数据导出为PDF,包扣合并单元格操作
最近项目中需要将查询出来的表格数据以PDF形式导出,并且表格的形式包含横向行与纵向列的单元格合并操作,导出的最终效果如图所示: 首先引入操作依赖 <!--导出pdf所需包--><dependency><groupId>com.itextpdf</groupId&…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
