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.hqwc.cn/news/670537.html

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

相关文章

BEV下统一的多传感器融合框架 - FUTR3D

BEV下统一的多传感器融合框架 - FUTR3D 引言 在自动驾驶汽车或者移动机器人上,通常会配备许多种传感器,比如:光学相机、激光雷达、毫米波雷达等。由于不同传感器的数据形式不同,如RGB图像,点云等,不同模态…

java-函数式编程-函数对象

定义 什么是合格的函数?无论多少次执行函数,只要输入一样,输出就不会改变 对象方法的简写 其实在类中,我们很多参数中都有一个this,被隐藏传入了 函数也可以作为对象传递,lambda就是很好的例子 函数式接口中…

微搭低代码入门05文件的上传和下载

目录 1 创建数据源2 创建应用3 创建页面4 设置导航功能5 文件上传6 文件下载总结 小程序中,我们通常会有文件的上传和下载的需,在微搭中,文件是存放在云存储中,每一个文件都会有一个唯一的fileid,我们本篇就介绍如何通…

如何将视频转换成gif表情包?超简单的方法分享

把视频中的片段截取制作成gif动画表情包是现在网络中常见的制作图片的一种方法。Gif表情包能够调节聊天中的氛围,快速有趣的传递信息。也因为gif动图兼容性高、体积小便于分享所以在现在的网络中非常的收欢迎。接下来,小编就给大家分享一下怎么把视频转g…

供应链|经典论文解读:(s,S) 策略在动态库存下的最优性

文章考虑了具有订购成本(由单位成本加上重新订购成本组成)的动态库存问题。具体而言,对于每个时期,系统在中期开始是做出一系列采购决策——这些采购有助于库存的积累,并在随后的周期被需求所消耗。每时期系统会产生各…

什么是PXE

文章目录 在局域网内搭建PXE服务器PXE 启动组件PXE的优点实验一、搭建PXE服务器,实现远程部署CentOS系统环境准备server关闭防火墙安装组件准备 Linux 内核、初始化镜像文件及PXE引导文件配置启用TFTP 服务配置启动DHCP服务准备CentOS 7 安装源配置启动菜单文件 Cli…

面试笔记——JVM组成

基本介绍 JVM: Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 使用JVM的好处: 一次编写,到处运行自动内存管理,垃圾回收机制 JVM的组成及运行流程: 程序计数器 程序计数器&a…

手动交互式选点提取三维点云轮廓边界线 附python代码

一种新的三维点云轮廓边界提取方案: 1 手动选择一个边界或者其附近的点 2 自动搜索临近区域,并找到附近的平面和进行平面分割 3 提取平面的交点 4 该交点就是点云的轮廓边界点,把它往两边延展,就是完整的点云轮廓边界 import open3d as o3d import numpy as np import …

[激光原理与应用-92]:振镜的光路图原理

目录 一、振镜的光路 二、振镜的工作原理 2.1 概述 2.2 焊接头 2.3 准直聚焦头-直吹头 2.4 准直聚焦头分类——按应用分 2.4.1 准直聚焦头分类——功能分类 2.4.2 准直聚焦头镜片 2.4.3 振镜焊接头 2.4.4 振镜分类: 2.4.5 动态聚焦系统演示(素…

AtCoder Regular Contest 176(ARC176)A、B

题目:AtCoder Regular Contest 176 - tasks 官方题解:AtCoder Regular Contest 176 - editorial 参考:atcoder regular 176 (ARC176) A、B题解 A - 01 Matrix Again 题意 给一个nn的方格,给出m个坐标(x,y)m,在方格中…

一个简单的仓库出入库管理软件的流程是什么样的?有哪些功能?

身为仓库文员,我深知仓库管理对于公司运营的重要性。仓库是公司物资的中转站,其管理的好坏直接关系到公司的运营效率和成本控制。然而,传统的仓库管理方式往往存在着效率低下、易出错等问题,为了解决这些问题,我们需要…

stm32f103zet6_DAC_1_介绍

STM32微控制器系列的DAC(数字到模拟转换器)功能是其片上外设之一,用于将数字信号转换为模拟信号。DAC在许多应用中都非常有用,例如音频输出、模拟信号生成、闭环控制系统中作为模拟输出等。 STM32微控制器的DAC功能特点包括&…