当前位置: 首页 > article >正文

Pytest的Fixture使用

概述

Pytest中的Fixture可以使得测试代码高度复用,同时对资源进行安全的管理,以及在复杂的测试场景用进行灵活的组合。

概念

  • Fixture:可重用的函数,用@pytest.fixture来进行装饰,用于为测试提供数据、环境或者服务
  • 作用域:控制Fixture的生命周期,默认是function,可设置为classmodulesessionpackage
  • 依赖注入:通过测试函数的参数列表,自动获取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 非聚簇索引聚簇索引的优缺点非聚簇索引的优缺点 创建索引常见索引分为&#xff1a;主键索引InnoDB主键索引的生成过程&#xff08;1&#xff09;初始化&#xf…...

计算机网络高频(三)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 用户端 在如今这个快节奏的时代中&#xff0c;个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而&#xff0c;如何设定…...

HTTP 1.0和2.0 有什么区别?

HTTP 1.0和HTTP 2.0是互联网中用于数据传输的重要协议&#xff0c;两者在功能和性能上有显著差异。 以下是它们的主要区别&#xff1a; HTTP 1.0 的特点&#xff1a; 单一连接&#xff1a;每个请求需要独立连接&#xff0c;导致高延迟和资源浪费。文本传输&#xff1a;使用文…...

部署高可用PostgreSQL14集群

目录 基础依赖包安装 consul配置 patroni配置 vip-manager配置 pgbouncer配置 haproxy配置 验证 本文将介绍如何使用Patroni、Consul、vip-manager、Pgbouncer、HaProxy组件来部署一个3节点的高可用、高吞吐、负载均衡的PostgresSQL集群&#xff08;14版本&#xff09;&…...

JavaScript 对事件的反应机制

JavaScript 对事件的反应机制 JavaScript 对事件的反应机制是网页实现用户交互的核心&#xff0c;主要通过事件监听与处理函数实现对用户行为的响应。以下是关键要点解析&#xff1a; 一、事件机制基础 1. 事件的定义 事件是用户或浏览器在页面上的动作&#xff08;如点击、…...

Vue3中keep-alive缓存组件应用场景。

文章目录 一、KeepAlive是什么&#xff1f;二、基本使用1.例子2.keep-alive使用 三、其他属性3.1 包含/排除3.2 最大缓存实例数3.3 缓存实例的生命周期 总结 一、KeepAlive是什么&#xff1f; 是一个内置组件&#xff0c;它的功能是在多个组件间动态切换时缓存被移除的组件实例…...

Pythonload JSON文件需要手动关闭吗?

在Python中使用 json 模块加载JSON文件时&#xff0c;通常不需要手动关闭文件。 例如&#xff0c;使用以下方式加载JSON文件&#xff1a; import json with open(data.json, r) as f: data json.load(f) 在上述代码中&#xff0c;使用 with 语句打开文件&#xff0c;它会在代码…...

SCI论文阅读指令(特征工程)

下面是一个SCI论文阅读特征工程V3.0&#xff0c;把指令输入大模型中&#xff0c;并上传PDF论文&#xff0c;就可以帮你快速阅读论文。 优先推荐kimi&#xff0c;当然DeepSeek、QwQ-32B等大语言模型也可以。测试了一下总结的还不错&#xff0c;很详细。 请仔细并深入地阅读所提…...

CosyVoice2在Windows系统上本地部署的详细步骤

CosyVoice2在Windows系统上本地部署的详细步骤&#xff1a; 下载源码并初始化&#xff1a; 确保你的设备上安装了Git。打开命令提示符&#xff08;cmd&#xff09;&#xff0c;执行以下命令来克隆仓库&#xff1a;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是华为开发的一款用于海思芯片设备的刷机和调试工具&#xff0c;可对搭载海思芯片的机顶盒、智能电视等设备进行固件烧录、参数配置等操作。以下为你详细介绍&#xff1a; 功能用途 固件烧录&#xff1a;这是HiTool最主要的功能之一。它能够将下载好的适配固件文件烧录到…...

探秘 C++ 双星系统模型:实现快速值切换

在软件开发的世界里&#xff0c;有时我们会遇到需要频繁在两个值之间进行切换的场景。为了高效地处理这类情况&#xff0c;我们可以设计一个专门的类来实现这个功能。今天&#xff0c;我们就来详细介绍一个用 C 实现的双星系统模型类 Turner&#xff0c;它能够帮助我们轻松地在…...

AI 生成内容(AIGC):从文本到视频的完整流程

近年来&#xff0c;AI 生成内容&#xff08;AIGC, AI-Generated Content&#xff09; 迅速发展&#xff0c;从文本、图片到音频、视频&#xff0c;AI 在创意内容生成方面展现出了惊人的能力。AIGC 不仅提升了内容创作效率&#xff0c;还降低了成本&#xff0c;使得普通用户也能…...

使用VS2022编译CEF

前提 选择编译的版本 CEF自动编译&#xff0c;在这里可以看到最新的稳定版和Beta版。 从这里得出&#xff0c;最新的稳定版是134.0.6998.118&#xff0c;对应的cef branch是6998。通过这个信息可以在Build requirements查到相关的软件配置信息。 这里主要看Windows下的编译要…...

WebMvcConfigurer 的 addResourceLocations

在 Spring Boot 的 addResourceLocations 方法中&#xff0c;file: 是一个 URL 前缀&#xff0c;用于指示资源的位置是本地文件系统路径。以下是详细解释&#xff1a; 一、file: 的作用 file: 是 Java 中用于表示本地文件系统的 URL 前缀。它告诉 Spring Boot&#xff0c;资源…...

Pytorch学习笔记(八)Learn the Basics - Save and Load the Model

这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Save and Load the Model 部分。 官网链接&#xff1a;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的响应压缩功能基于智能协商机制&#xff0c;需同时满足以下条件方可触发&#xff1a; 客户端支持&#xff1a;请求头包含Accept-Encoding: gzip/deflate数据量阈值&#xff1a;响应体大小超过预设值&#xff08;默认2KB&…...

常考计算机操作系统面试习题(三上)

目录 1. 为何要引入与设备的无关性&#xff1f;如何实现设备的独立性&#xff1f; 2. 页面置换先进先出算法 3. 页面置换先进先出算法&#xff0c;4个页框 4. 进程优先级调度算法 5. 短作业优先调度策略 6. 平均内存访问时间计算 7. 页式存储和段式存储的物理地址计算 …...

MATLAB 绘制空间分布图 方法总结

方法一&#xff1a;用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)★

命令模式&#xff08;Command Pattern&#xff09; 如果任务有多个复杂的操作&#xff0c;可以使用命令模式将任务的操作封装为命令对象。这些命令对象可以在需要时按顺序执行&#xff0c;方便管理任务执行的逻辑和回滚操作。 示例&#xff1a; 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部署 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;部署 &#xff08;三&#xff09;参数 &#xff08;四&#xff09;错误问题 &#xff08;五&#xff09;Xinference配置Text-embedding模型 &#xff08;六&#xff09;Xinference配…...

Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;智慧城市APP医疗信息模块 主要内容&#xff1a;医疗信息模块原型设计与交互 应用场景&#xff1a;医疗信息行业 案例展示&#xff1a; 案例视频&…...

缓存设计模式

缓存设计模式&#xff08;Cache Design Pattern&#xff09;是一种用于存储和管理频繁访问数据的技术&#xff0c;旨在提高系统性能、降低数据库或后端服务的负载&#xff0c;并减少数据访问延迟。以下是几种常见的缓存设计模式&#xff0c;并用 Python Redis 进行示例代码实现…...