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)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式 享元模式尝试重用现有的同类对…

ffmpeg7.0 flv支持hdr

ffmpeg7.0 flv支持hdr 自从ffmpeg6.0应用enhance rtmp支持h265/av1的flv格式后,7.0迎来了flv的hdr能力。本文介绍ffmpeg7.0如何支持hdr in flv。 如果对enhance rtmp如何支持h265不了解,推荐详解Enhanced-RTMP支持H.265 1. enhance rtmp关于hdr 文档…

简述前后端分离架构案例

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

Go中如何将io.Writer转换成字符串(将两个管道连接的exec.Command输出的标准输出获取成字符串)

假设我们需要在Go中运行下面的命令: PS -A | grep wget这里需要写成两个exec.Command,如下,第一个命令为cmd,第二个为cmd2: cmd : exec.Command("PS", "-A") cmd2 : exec.Command("grep&qu…

Leetcode 第396场周赛 问题和解法

问题 有效单词 有效单词需要满足以下几个条件: 至少包含3个字符。 由数字0-9和英文大小写字母组成。(不必包含所有这类字符。) 至少包含一个元音字母。 至少包含一个辅音字母。 给你一个字符串word。如果word是一个有效单词,则…

Spring扩展点(三)Spring常用内置工具类

Spring常用内置工具类 Base64UtilsFileCopyUtilsFileSystemUtilsReflectionUtilsResourceUtilsStringUtilsAopUtilsMethodInvokingBean(简洁反射调用,指定类的指定方法,将其声明为Bean即可在 afterPropertiesSet 阶段触发反射方法调用)ReflectionUtils&a…

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…

车道线检测交通信号识别车辆实时检测

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言车道线检测机器学习前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对车道线检测&交通信号识别&…

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

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

Retrofit使用举例, Android Gradle 知识,RxJava和接口回调,Activity与Fragmen关系

目录 Retrofit使用举例 Android Gradle 知识 1. Gradle Wrapper​编辑 2. 构建文件 3. 依赖管理

电子取证平航杯的复现

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

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

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

SAP系统简介,接口的调用方式,以及各个方式的比较

SAP系统是一套企业资源规划&#xff08;ERP&#xff09;软件&#xff0c;由德国SAP公司开发。SAP的全名是“System Applications and Products in Data Processing”&#xff08;数据处理中的系统、应用与产品&#xff09;。SAP系统旨在帮助企业管理和整合公司的关键业务流程。…

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…

leetcode 1652.拆炸弹

这道题没有什么明确的做法&#xff0c;我们其实可以根据数组的思想来做。 一般来说是一个循环数组的话&#xff0c;我们可以用while来处理。 如果循环次数很少&#xff0c;我们可以用一种思想&#xff0c;那就是把原先的数组再复制一份放在后面&#xff0c;这样就相当于是循环…