Pytest的Fixture使用
概述
Pytest中的Fixture可以使得测试代码高度复用,同时对资源进行安全的管理,以及在复杂的测试场景用进行灵活的组合。
概念
- Fixture:可重用的函数,用
@pytest.fixture来进行装饰,用于为测试提供数据、环境或者服务 - 作用域:控制Fixture的生命周期,默认是
function,可设置为class、module、session、package - 依赖注入:通过测试函数的参数列表,自动获取Fixture的实例,无需手动调用
一、基础用法
我们来创建一个demo
import pytest
import psycopg2#连接数据库
def create_db_connection():return psycopg2.connect(dbname="mydatabase",user="myuser",password="mypassword",host="localhost",port="5432")# 定义一个fixture,用于创建数据库连接
@pytest.fixture
def database_connection():conn = create_db_connection() # 初始化资源yield conn # 测试使用阶段conn.close() # 清理资源# 测试函数,使用fixture获取数据库连接
def test_query_data(database_connection): # 通过参数注入result = database_connection.execute("SELECT * FROM users")assert len(result) > 0
通过这个demo,实现了定义fixture来进行数据库连接并且进行关闭数据库的操作,在测试函数里,用参数注入来进行调用即可。在后面如果需要使用数据库,可以直接继续复用,同时保证了每次都关闭数据库的行为,来达到资源清理,防止下次访问时出错。
二、yield的作用
在上述的例子当中,出现了一个yield,这个yield是干什么的呢?它在里面充当了一个资源管理的角色,以下是它的一个 主要功能作用:
- 初始化:yield之前的代码用于创建测试需要的资源(数据库连接,文件,API等),上述代码中的连接数据库操作
- 资源提供:yield返回的值(上述demo中的conn),将资源传递给测试函数
- 清理:yield之后的代码用于资源清理(上述demo中的conn.close()),在测试函数使用完成后会执行该操作
通过yield,我们可以保证在测试无论是否成功的情况下,都会执行清理操作,在进行数据库操作或者文件处理时,可以让资源清理不占用,让后续的测试可以继续进行。
注意:一个Fixture只能有一个yield
三、Fixture的作用域
Fixture中的scope参数指定作用域,分别是:
1、 function
每个测试函数运行前初始化,结束后清理
适用场景:需要完全隔离的独立资源,如临时文件,数据库事务等
2、class
每个测试类中只初始化一次,类内所有方法共享同一实例,类里只初始化一次
适用场景:类内共享资源,如数据库连接,API客户端
3、module
每个测试模块(.py文件)只初始化一次
适用场景:模块级的共享资源,如配置文件、全局缓存
<
相关文章:
Pytest的Fixture使用
概述 Pytest中的Fixture可以使得测试代码高度复用,同时对资源进行安全的管理,以及在复杂的测试场景用进行灵活的组合。 概念 Fixture:可重用的函数,用@pytest.fixture来进行装饰,用于为测试提供数据、环境或者服务作用域:控制Fixture的生命周期,默认是function,可设置…...
【MySQL | 六、索引特性(进一步理解)】
目录 索引的理解索引的作用MySQL与磁盘的IOPage单个Page的分类多个Page的组织B树的特点 B树和B树的区别聚簇索引 VS 非聚簇索引聚簇索引的优缺点非聚簇索引的优缺点 创建索引常见索引分为:主键索引InnoDB主键索引的生成过程(1)初始化…...
计算机网络高频(三)UDP基础
计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…...
【测试开发】OKR 小程序端黑盒测试报告
【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中,个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而,如何设定…...
HTTP 1.0和2.0 有什么区别?
HTTP 1.0和HTTP 2.0是互联网中用于数据传输的重要协议,两者在功能和性能上有显著差异。 以下是它们的主要区别: HTTP 1.0 的特点: 单一连接:每个请求需要独立连接,导致高延迟和资源浪费。文本传输:使用文…...
部署高可用PostgreSQL14集群
目录 基础依赖包安装 consul配置 patroni配置 vip-manager配置 pgbouncer配置 haproxy配置 验证 本文将介绍如何使用Patroni、Consul、vip-manager、Pgbouncer、HaProxy组件来部署一个3节点的高可用、高吞吐、负载均衡的PostgresSQL集群(14版本)&…...
JavaScript 对事件的反应机制
JavaScript 对事件的反应机制 JavaScript 对事件的反应机制是网页实现用户交互的核心,主要通过事件监听与处理函数实现对用户行为的响应。以下是关键要点解析: 一、事件机制基础 1. 事件的定义 事件是用户或浏览器在页面上的动作(如点击、…...
Vue3中keep-alive缓存组件应用场景。
文章目录 一、KeepAlive是什么?二、基本使用1.例子2.keep-alive使用 三、其他属性3.1 包含/排除3.2 最大缓存实例数3.3 缓存实例的生命周期 总结 一、KeepAlive是什么? 是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例…...
Pythonload JSON文件需要手动关闭吗?
在Python中使用 json 模块加载JSON文件时,通常不需要手动关闭文件。 例如,使用以下方式加载JSON文件: import json with open(data.json, r) as f: data json.load(f) 在上述代码中,使用 with 语句打开文件,它会在代码…...
SCI论文阅读指令(特征工程)
下面是一个SCI论文阅读特征工程V3.0,把指令输入大模型中,并上传PDF论文,就可以帮你快速阅读论文。 优先推荐kimi,当然DeepSeek、QwQ-32B等大语言模型也可以。测试了一下总结的还不错,很详细。 请仔细并深入地阅读所提…...
CosyVoice2在Windows系统上本地部署的详细步骤
CosyVoice2在Windows系统上本地部署的详细步骤: 下载源码并初始化: 确保你的设备上安装了Git。打开命令提示符(cmd),执行以下命令来克隆仓库:git clone --recursive https://github.com/FunAudioLLM/CosyVo…...
鸿蒙入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)
文章大纲 引言一、AppStorage 应用全局的UI状态存储1、StorageProp和StorageLink装饰器建立联系2、StorageProp2.1、StorageProp使用规则2.2、StorageProp变量的传递/访问规则2.3、StorageProp支持的观察变化2.4、StorageProp 值初始化和更新 3、StorageLink3.1、StorageLink使…...
RabbitMQ 核心组件及功能详解
RabbitMQ 是一个开源的消息代理和队列服务器,其核心架构由以下关键组件构成: 一、核心组件架构 #mermaid-svg-mIHqbpvVt25Kpyl0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mIHqbpvVt25Kpyl0 .error-icon{fil…...
海思烧录工具HITool电视盒子刷机详解
HiTool是华为开发的一款用于海思芯片设备的刷机和调试工具,可对搭载海思芯片的机顶盒、智能电视等设备进行固件烧录、参数配置等操作。以下为你详细介绍: 功能用途 固件烧录:这是HiTool最主要的功能之一。它能够将下载好的适配固件文件烧录到…...
探秘 C++ 双星系统模型:实现快速值切换
在软件开发的世界里,有时我们会遇到需要频繁在两个值之间进行切换的场景。为了高效地处理这类情况,我们可以设计一个专门的类来实现这个功能。今天,我们就来详细介绍一个用 C 实现的双星系统模型类 Turner,它能够帮助我们轻松地在…...
AI 生成内容(AIGC):从文本到视频的完整流程
近年来,AI 生成内容(AIGC, AI-Generated Content) 迅速发展,从文本、图片到音频、视频,AI 在创意内容生成方面展现出了惊人的能力。AIGC 不仅提升了内容创作效率,还降低了成本,使得普通用户也能…...
使用VS2022编译CEF
前提 选择编译的版本 CEF自动编译,在这里可以看到最新的稳定版和Beta版。 从这里得出,最新的稳定版是134.0.6998.118,对应的cef branch是6998。通过这个信息可以在Build requirements查到相关的软件配置信息。 这里主要看Windows下的编译要…...
WebMvcConfigurer 的 addResourceLocations
在 Spring Boot 的 addResourceLocations 方法中,file: 是一个 URL 前缀,用于指示资源的位置是本地文件系统路径。以下是详细解释: 一、file: 的作用 file: 是 Java 中用于表示本地文件系统的 URL 前缀。它告诉 Spring Boot,资源…...
Pytorch学习笔记(八)Learn the Basics - Save and Load the Model
这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Save and Load the Model 部分。 官网链接:https://pytorch.org/tutorials/beginner/basics/saveloadrun_tutorial.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m …...
正则表达式基本语法和Java中的简单使用
先来个例子 public static final Pattern CHINESE_PATTERN Pattern.compile("[\\u4e00-\\u9fa5]"); / 检测字符串是否包含汉字 String text "Hello 世界"; boolean hasChinese CHINESE_PATTERN.matcher(text).find(); // 返回 true// 提取所有汉字 Mat…...
Mysql 回表查询,什么是回表查询,如何拒绝sql查询时的回表问题
文章目录 1. 什么是回表(回表查询)2. 如何减少回表3. 使用案例3.1 问题分析3.2 避免回表查询3.3 开始优化前言: 在继续讲解专栏内容之前,先学习几个概念,以便更好了解: 什么是聚簇索引什么是回表查询这篇文章详细分析 回表查询。聚簇索引的理解可以进入这篇文章:什么是聚…...
Spring Boot响应压缩配置与优化
一、核心工作机制 1.1 自动协商触发条件 Spring Boot的响应压缩功能基于智能协商机制,需同时满足以下条件方可触发: 客户端支持:请求头包含Accept-Encoding: gzip/deflate数据量阈值:响应体大小超过预设值(默认2KB&…...
常考计算机操作系统面试习题(三上)
目录 1. 为何要引入与设备的无关性?如何实现设备的独立性? 2. 页面置换先进先出算法 3. 页面置换先进先出算法,4个页框 4. 进程优先级调度算法 5. 短作业优先调度策略 6. 平均内存访问时间计算 7. 页式存储和段式存储的物理地址计算 …...
MATLAB 绘制空间分布图 方法总结
方法一:用mapshow函数 figure(1); hold on %% 添加陆地 land shaperead(landareas); mapshow(landareas.shp, FaceColor, [1 1 1], EdgeColor, [0.3 0.3 0.3],FaceAlpha,0)%% 添加站点 for i 1:size(mycmap,1)mapshow(lon(label i),lat(label i),displaytype,po…...
Maven工具学习使用(三)——坐标和依赖
坐标元素 Maven坐标是通过一些元素定义的,元素包括groupId、artifactId、version、packaging、classifier groupId:定义当前Maven项目隶属的实际项目。Maven项目和实际项目不是一对一的关系。一个实际的项目对应的Maven模块可能会有很多,比如SpringFramework。groupId不应…...
命令模式(Command Pattern)★
命令模式(Command Pattern) 如果任务有多个复杂的操作,可以使用命令模式将任务的操作封装为命令对象。这些命令对象可以在需要时按顺序执行,方便管理任务执行的逻辑和回滚操作。 示例: class Command { public:virtu…...
深度学习论文: Image Segmentation Using Text and Image Prompts
深度学习论文: Image Segmentation Using Text and Image Prompts Image Segmentation Using Text and Image Prompts PDF: https://arxiv.org/abs/2503.10622v1 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/…...
Docker+Ollama+Xinference+RAGFlow+Dify+Open webui部署及踩坑问题
目录 一、Xinference部署 (一)简介 (二)部署 (三)参数 (四)错误问题 (五)Xinference配置Text-embedding模型 (六)Xinference配…...
Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧城市APP医疗信息模块 主要内容:医疗信息模块原型设计与交互 应用场景:医疗信息行业 案例展示: 案例视频&…...
缓存设计模式
缓存设计模式(Cache Design Pattern)是一种用于存储和管理频繁访问数据的技术,旨在提高系统性能、降低数据库或后端服务的负载,并减少数据访问延迟。以下是几种常见的缓存设计模式,并用 Python Redis 进行示例代码实现…...
