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 钩子示例。在这个示例中,我们将执行以下操作:

  1. 关闭之前打开的数据库连接。
  2. 清理测试期间创建的临时文件。
  3. 发送测试结果的电子邮件通知。
  4. 打印一条详细的结束消息,包括测试执行的总时间。

首先,确保你的 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

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

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

相关文章

自然语言处理通用框架BERT原理解读

相关代码见文末 1.概述 问题背景: 传统Seq2Seq模型的局限性: 早期的机器翻译和文本生成任务常采用基于循环神经网络(RNN)的序列到序列(Seq2Seq)模型,这类模型在处理长序列时容易遇到梯度消失/爆炸问题,导致训练效率低,难以捕捉长期依赖。 RNN网络的问题: RNN及其变…

中国农业大学:学硕11408复试线上涨40分,今年还会持续涨吗?中国农业大学计算机考研考情分析!

中国农业大学(China Agricultural University),简称“中国农大”,坐落于中国首都北京,由中华人民共和国教育部直属,中央直管副部级建制,水利部、农业部和北京市共建,位列国家“双一流…

【PostgreSQL支持中文的全文检索插件(zhparser)】

PostgreSQL本身是支持全文检索的,提供两个数据类型(tsvector,tsquery),并且通过动态检索自然语言文档的集合,定位到最匹配的查询结果。其内置的默认的分词解析器采用空格进行分词,但是因为中文的词语之间没…

Vue3:分类管理综合案例实现

综合案例 实现分类管理功能 路由 在main.js中引入router 访问根路径’/后跳转到布局容器 加载布局容器后重定向到’/nav/manage’ 加载我们需要的组件 这样可以在布局容器中切换功能模块时,只对需要修改的组件进行重新加载 const router createRouter({history: create…

APP封装后防止破解的全方位策略

移动应用开发完成后,封装(编译打包)是发布前的重要步骤。然而,一旦APP发布,就可能面临被逆向工程破解的风险,从而导致源代码泄露、数据被盗取等严重后果。 本文将介绍一系列实用的策略和技术,帮…

邦注科技 工业冷水机的风冷和水冷的区别介绍

工业冷水机在工业生产中扮演着重要角色,特别是在需要精确控制温度的应用中。风冷式冷水机和水冷式冷水机是两种常见的类型,它们之间存在一些显著的区别。 热交换的来源不同: 风冷式冷水机:热交换的来源是气体。它采用空气冷却方…

STL——vector容器【动态数组】

vector基本概念 功能&#xff1a;vector数据结构和数组非常相似&#xff0c;也成为单端数组 头文件&#xff1a;<vector> vector与普通数组的区别&#xff1a;不同之处在于数组是静态空间&#xff0c;而vector可以动态扩展 动态扩展&#xff1a; 并不是在原空间之后续…

代理IP与网络隐私

随着科技的发展&#xff0c;越来越多的人开始享受网络的便利&#xff0c;人们逐步在社交媒体上分享自己的生活。这些公开信息是可以被所有人浏览观看的&#xff0c;但是也会存在部分隐私信息我们并不想要被人知晓&#xff0c;这就牵扯到网络隐私保护问题。 代理IP对于网络隐私保…

链接表存储图(C++注释详解): 构建表 深度优先遍历 (DFS)

链接表的结构体单元: #define size 100 typedef struct node {int idx;//下一个节点的索引int wt;//权重, 也可根据实际情景存储边的信息struct node* next; }Node; Node* hd[size]; // 存储图的邻接表 链接表的的构建: int main() {int n, m;cin >> n >> m; //…

【2024系统架构设计】回顾历史,查缺补漏篇 ③

前言 hello,大家好: 💡💡💡 我们一起来备考软考高级系统架构设计师吧,本专栏提供综合知识、案例科目、论文(论点和部分示例范文)等内容,包括知识点总结和记忆小妙招哦。 🚀🚀🚀 可以减少资料查找和收集的时间,提高效率,我们一起集中精力学习干货吧! 💡…

iOS 创建pch文件

1.参考链接&#xff08;xcode8添加方法&#xff0c;之前的跟这个差不多&#xff09;&#xff1a; 参考链接 2.自我总结&#xff1a; &#xff08;1&#xff09;创建pch文件: 注意点&#xff1a;1&#xff09;注意选中所有的targets&#xff08;看图明义&#xff09; 2&…

Android系统不同版本存储权限

一、Android存储简介 Android系统分为内部存储和外部存储 从Android6.0开始不断在更新存储&#xff08;读写&#xff09;权限&#xff0c;除了在AndroidManifest.xml文件里声明&#xff0c;app运行时也要动态申请使用对应的权限 提醒&#xff1a;应用私有存储不需要动态申请权…

基于Java的飞机大战游戏的设计与实现(论文 + 源码)

关于基于Java的飞机大战游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89313362 基于Java的飞机大战游戏的设计与实现 摘 要 现如今&#xff0c;随着智能手机的兴起与普及&#xff0c;加上4G&#xff08;the 4th Generation mobile communication &#x…

欧拉公式的讲解

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#张亿&#xff0c;今天呐&#xff0c;学的是欧拉公式 在不同的学科中有着不同的含义和应用。在复变函数中&#xff0c;欧拉公式表述为e^(ix)(cos xisin x)&#xff0c;其中e是自然对数的底&#xff0c;i是虚数单位&#x…

Java 自然排序和比较器排序区别?Comparable接口和Comparator比较器区别?

注&#xff1a;如果你对排序不理解&#xff0c;请您耐心看完&#xff0c;你一定会明白的。文章通俗易懂。建议用idea运行一下案例。 1&#xff09;自然排序和比较器排序的区别&#xff1f; 自然排序是对象本身定义的排序规则&#xff0c;由对象实现 Comparable 接口&#xff…

Tomcat无法连通的调试方法1-service方式无法连通

作者&#xff1a;私语茶馆 1.局域网Tomcat服务不通 组网如下&#xff1a; 问题&#xff1a; Tomcat Server 服务方式启动后&#xff0c;无法访问&#xff0c;但命令行方式启动可以。IP地址都在同网段或不同网段现象都一样。 2.Tomcat 服务安装与调试 在Windows下&#xff0c;…

计算机系列之排序算法

20、排序算法 1、直接插入排序&#xff08;这里以从小到大排序为例&#xff09; ◆要注意的是&#xff0c;前提条件是前i-1个元素是有序的&#xff0c;第i个元素依次从第i-1个元素往前比较&#xff0c;直到找到一个比第i个元素值小的元素&#xff0c;而后插入&#xff0c;插入…

表现层设计模式_1.MVC模式

1.MVC模式三个核心模块 MVC是一种目前广泛流行的软件设计模式。近年来&#xff0c;随着Java EE的成熟&#xff0c;MVC成为了Java EE平台上推荐的一种设计模式。MVC强制性地把一个应用的输入、处理、输出流程按照视图、控制、模型的方式进行分离&#xff0c;形成了控制器…

有关登录安全,测试人该知道些什么?

作为测试&#xff0c;给我们一个关键词“登录”&#xff0c;我们可能想到的用例设计更多的是什么用户名、密码校验是否合法、是否为空、是否正确等等之类的场景。 但在如今信息化的时代&#xff0c;“登录安全”已经是一个很热门且普遍的的话题了&#xff0c;今天给大家简单分…

基于国产LoRa的智慧农业解决方案--ASR6601、SX1278

我国《数字乡村发展战略纲要》明确指出“要推进农业数字化转型”&#xff0c;加快推广云计算、大数据、物联网、人工智能在农业生产经营管理中的运用。 然而&#xff0c;目前我国的农业数字化转型还面临着诸多挑战。我国整体农业机械化程度和自动化控制水平仍然较低。由于农田面…