pytest教程-37-钩子函数-pytest_collection_finish

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

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

pytest_collection_finish(session) 是一个 pytest 钩子函数,它在所有测试用例收集完成后被调用。这个钩子可以用来执行一些测试后的清理工作,比如关闭数据库连接、清理临时文件等。以下是如何使用这个钩子函数的具体方法和代码示例:

首先,确保你的项目中有一个 conftest.py 文件。然后,在 conftest.py 文件中定义 pytest_collection_finish 钩子函数:

# conftest.pyimport logging# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def pytest_collection_finish(session):# 打印测试用例收集完成的信息logging.info("Test collection has finished.")# 关闭数据库连接# 假设在 pytest_collection_start 钩子中已经建立了数据库连接if hasattr(session, 'db_connection'):session.db_connection.close()logging.info("Database connection closed.")# 清理临时文件# 假设我们在测试过程中创建了一些临时文件temp_files = ['temp_file1.txt', 'temp_file2.txt']for file_name in temp_files:try:os.remove(file_name)logging.info(f"Temporary file {file_name} removed.")except OSError as e:logging.error(f"Failed to remove temporary file {file_name}: {e}")# 其他清理操作...

在这个示例中,我们首先设置了日志系统,以便在测试过程中记录重要信息。然后,在 pytest_collection_finish 钩子函数中,我们首先打印了一条消息,表示测试用例的收集已经完成。

接下来,我们检查 session 对象是否有一个名为 db_connection 的属性,这个属性假设是在 pytest_collection_start 钩子中创建的数据库连接。如果有,我们就关闭这个连接,并记录关闭操作的信息。

此外,我们还模拟了一个清理临时文件的过程。我们定义了一个临时文件列表 temp_files,然后遍历这个列表,尝试删除每个文件。如果文件删除成功,我们记录一条信息;如果删除失败,我们记录错误信息。

请注意,这个示例中的数据库连接关闭和临时文件清理都是假设的操作,你需要根据你的项目实际情况来实现这些功能。hasattr 函数用于检查 session 对象是否有特定的属性,这是一种安全的方式来避免属性不存在时抛出 AttributeError

现在,当你运行测试时,pytest_collection_finish 钩子函数会在所有测试用例收集完成后被调用,执行上述的清理操作。这有助于确保测试环境在测试结束后保持干净。

我们再通过一个更复杂的示例来展示 pytest_collection_finish 钩子函数的使用方法。在这个示例中,我们将模拟一个场景,其中我们需要在测试用例收集完成后执行一些复杂的清理工作,包括关闭多个资源、清理日志文件、以及执行一些最终的验证。

首先,确保你的项目中有一个 conftest.py 文件。然后,在 conftest.py 文件中定义 pytest_collection_finish 钩子函数:

# conftest.pyimport logging
import os
import shutil
from some_database_module import close_database_connection  # 假设这是一个关闭数据库连接的函数
from some_file_module import delete_files  # 假设这是一个删除文件的函数# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def pytest_collection_finish(session):# 打印测试用例收集完成的信息logging.info("All test cases have been collected and are ready for execution.")# 关闭数据库连接if 'db_connection' in session:close_database_connection(session['db_connection'])logging.info("Database connection has been closed.")# 清理日志文件log_files = ['log1.log', 'log2.log']  # 假设我们在测试过程中生成了一些日志文件for log_file in log_files:try:os.remove(log_file)logging.info(f"Log file {log_file} has been deleted.")except OSError as e:logging.error(f"Failed to delete log file {log_file}: {e}")# 执行最终的验证# 假设我们有一个验证函数来确保所有资源都已被正确清理try:assert verify_resources_are_cleaned(), "Some resources were not cleaned up properly."logging.info("All resources have been verified and cleaned up."except AssertionError as e:logging.error(f"Validation failed: {e}")# 清理临时目录temp_dir = 'temp_directory'  # 假设我们在测试过程中创建了一个临时目录try:shutil.rmtree(temp_dir)logging.info(f"Temporary directory {temp_dir} has been removed.")except OSError as e:logging.error(f"Failed to remove temporary directory {temp_dir}: {e}")# 其他清理操作...# 假设的资源清理验证函数
def verify_resources_are_cleaned():# 这里应该包含实际的资源清理验证逻辑# 为了示例,我们假设所有资源都已清理return True# 假设的临时目录清理函数
def cleanup_temp_directory():# 这里应该包含实际的临时目录清理逻辑# 为了示例,我们假设临时目录已经不存在pass

在这个示例中,我们首先设置了日志系统,以便在测试过程中记录重要信息。然后,在 pytest_collection_finish 钩子函数中,我们首先打印了一条消息,表示所有测试用例已经收集完成。

我们检查 session 对象是否有一个名为 db_connection 的属性,并调用 close_database_connection 函数来关闭数据库连接。我们还定义了一个 log_files 列表,用于存储需要删除的日志文件。我们遍历这个列表,尝试删除每个文件,并记录操作结果。

接下来,我们定义了一个 verify_resources_are_cleaned 函数,用于验证所有资源是否已经被正确清理。这个函数应该包含实际的资源清理验证逻辑。在这个示例中,我们假设所有资源都已清理。

最后,我们尝试删除一个名为 temp_directory 的临时目录。这个目录应该在测试过程中被创建,现在我们需要在测试结束后清理它。

请注意,这个示例中的数据库连接关闭、日志文件清理、资源验证和临时目录清理都是假设的操作,你需要根据你的项目实际情况来实现这些功能。这个示例展示了如何在测试用例收集完成后执行一系列复杂的清理工作。

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

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

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

相关文章

03_Redis

文章目录 Redis介绍安装及使用redis的核心配置数据结构常用命令stringlistsethashzset(sortedset) 内存淘汰策略Redis的Java客户端JedisRedisson Redis 介绍 Redis是一个NoSQL数据库。 NoSQL: not only SQL。表示非关系型数据库(不支持SQL标准语法)。 …

Java特性之设计模式【享元模式】

一、享元模式 概述 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式 享元模式尝试重用现有的同类对…

简述前后端分离架构案例

Hello , 这里是小恒不会java 。今晚1点写写关于RESTful接口的使用案例,本文会通过django原生js前后端分离的案例简单讲解。本文带你认识一下简化版的前后端分离架构 代码 本文案例代码在GitHub上 https://github.com/lmliheng/fontend前后端分离 先说说什么是前后…

GateWay检查接口耗时

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency>创建一个LogTimeGateWayFilterFactory类&#xff0c;可以不是这个名字但是后面必须是x…

【高校科研前沿】中国科学院地理资源所钟帅副研究员研究组博士生朱屹东为一作在Top期刊发文:从潜力到利用:探索西藏风能资源开发的技术路径优化布局

01 文章简介 论文名称&#xff1a;From potential to utilization: Exploring the optimal layout with the technical path of wind resource development in Tibet&#xff08;从潜力到利用:探索西藏风能资源开发的技术路径优化布局&#xff09; 文章发表期刊&#xff1a;《…

【Pytorch】2.TensorBoard的运用

什么是TensorBoard 是一个可视化和理解深度爵溪模型的工具。它可以通过显示模型结构、训练过程中的指标和图形化展示训练的效果来帮助用户更好地理解和调试他们的模型 TensorBoard的使用 安装tensorboard环境 在终端使用 conda install tensorboard通过anaconda安装 导入类Sum…

蛋白质/聚合物防污的机器学习(材料基因组计划)

前言&#xff1a;对于采用机器学习去研究聚合物的防污性能&#xff0c;以及或者其他性质。目前根据我的了解我认为最困难的点有三条&#xff1a; 其一&#xff1a;数据&#xff0c;对于将要训练的数据必须要有三点要求&#xff0c;1.数据要多&#xff0c;也就是大数据&#xff…

电子取证平航杯的复现

闻早起部分&#xff1a; 一、闻早起的windows10电脑 &#xff08;1&#xff09;.“闻早起”所使用的笔记本电脑使用何种加密程式&#xff1f; 1.在EFI文件中找到加密程式 &#xff08;2&#xff09; 教徒“闻早起”所使用的笔记本电脑中安装了一款还原软件&#xff0c;其版本…

寻找最佳App分发平台:小猪APP分发脱颖而出

在当今移动应用市场日益饱和的环境下&#xff0c;选择一个合适的App分发平台对于开发者来说至关重要。这不仅关系到应用能否快速触达目标用户&#xff0c;还直接影响到品牌的塑造与市场份额的争夺。本文将深入探讨几大关键因素&#xff0c;帮助开发者判断哪个App分发平台最适合…

Whisper、Voice Engine推出后,训练语音大模型的高质量数据去哪里找?

近期&#xff0c;OpenAI 在语音领域又带给我们惊喜&#xff0c;通过文本输入以及一段 15 秒的音频示例&#xff0c;可以生成既自然又与原声极为接近的语音。值得注意的是&#xff0c;即使是小模型&#xff0c;只需一个 15 秒的样本&#xff0c;也能创造出富有情感且逼真的声音。…

【driver4】锁,错误码,休眠唤醒,中断,虚拟内存,tasklet

文章目录 1.互斥锁和自旋锁选择&#xff1a;自旋锁&#xff08;开销少&#xff09;的自旋时间和被锁住的代码执行时间成正比关系2.linux错误码&#xff1a;64位系统内核空间最后一页地址为0xfffffffffffff000~0xffffffffffffffff&#xff0c;这段地址是被保留的&#xff0c;如果…

全球260多个国家的年通货膨胀率数据集(1960-2021年)

01、数据简介 全球年通货膨胀率是指全球范围内&#xff0c;在一年时间内&#xff0c;物价普遍上涨的比率。这种上涨可能是由于货币过度供应、需求过热、成本上升等原因导致的。通货膨胀率是衡量一个国家或地区经济状况和物价水平的重要指标&#xff0c;通常以消费者价格指数&a…

深度学习之DCGAN

目录 须知 转置卷积 DCGAN 什么是DCGAN 生成器代码 判别器代码 补充知识 LeakyReLU&#xff08;x&#xff09; torch.nn.Dropout torch.nn.Dropout2d DCGAN完整代码 运行结果 图形显示 须知 在讲解DCGAN之前我们首先要了解转置卷积和GAN 关于GAN在这片博客中已经很…

数据结构——链表专题2

文章目录 一、返回倒数第k 个节点二、链表的回文结构三、相交链表 一、返回倒数第k 个节点 原题链接&#xff1a;返回倒数第k 个节点 利用快慢指针的方法&#xff1a;先让fast走k步&#xff0c;然后fast和slow一起走&#xff0c;直到fast为空&#xff0c;最后slow指向的结点就…

BGP路由控制实验

1、按照需求配置IP地址&#xff0c;R1和R4配置环回口模拟业务网段&#xff0c;R2、R3、R4配置Loopback0口地址作为OSPF的Router-id和IBGP邻居地址。 2、AS 200 内部配置OSPF&#xff0c;仅用于实现BGP的TCP可达&#xff0c;不允许宣告业务网段。 3、配置BGP&#xff0c;R1和R…

数据结构学习/复习8--树与二叉树的概念与基本性质练习

一、树 1.概念 2.树的表示 二、二叉树 1.二叉树的概念 2.与性质相关的题

OpenHarmony实战开发-如何使用Web组件加载页面

页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景&#xff0c;包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。 页面加载过程中&#xff0c;若涉及网络资源获取&#xff0c;需要配置ohos.permission.INTERNET网络访问权限。 加载网络页面…

如何在一个高并发的应用中进行调试和测试!

在一个高并发的应用中进行调试和测试是一项挑战性的工作&#xff0c;因为它涉及到了系统性能、资源竞争、同步机制以及潜在的并发编程错误等多个方面。下面我会详细解释如何在高并发环境中进行调试和测试&#xff0c;并提供相应的策略和技术。 1. 单元测试 在多线程环境下&…

从线索到成交:HubSpot全渠道销售流程的精准打磨

在当今数字化时代&#xff0c;企业面临着越来越复杂的市场环境和激烈的竞争压力。在这样的背景下&#xff0c;如何利用科技手段提升营销和销售效率&#xff0c;拓展客户获客渠道&#xff0c;成为了企业发展的关键之道。作为HubSpot合作伙伴&#xff0c;我们深谙全渠道营销与销售…

multipass launch失败:launch failed: Remote ““ is unknown or unreachable.

具体问题情况如下&#xff1a; C:\WINDOWS\system32>multipass launch --name my-vm 20.04launch failed: Remote "" is unknown or unreachable.​C:\WINDOWS\system32>multipass lsNo instances found.​C:\WINDOWS\system32>multipass startlaunch fail…