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文件)只初始化一次
适用场景:模块级的共享资源,如配置文件、全局缓存

<

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

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

相关文章

工作流引擎Flowable介绍及SpringBoot整合使用实例

Flowable简介 Flowable 是一个轻量级的业务流程管理&#xff08;BPM&#xff09;和工作流引擎&#xff0c;基于 Activiti 项目发展而来&#xff0c;专注于提供高性能、可扩展的工作流解决方案。它主要用于企业级应用中的流程自动化、任务管理和审批流等场景。 Flowable 的核心…

Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)

一、 高斯滤波 边缘检测本身属于锐化操作&#xff0c;对噪点比较敏感&#xff0c;所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后&#xff0c;其实把它们连起来边缘检测就算完了…

用Deepseek写扫雷uniapp小游戏

扫雷作为Windows系统自带的经典小游戏&#xff0c;承载了许多人的童年回忆。本文将详细介绍如何使用Uniapp框架从零开始实现一个完整的扫雷游戏&#xff0c;包含核心算法、交互设计和状态管理。无论你是Uniapp初学者还是有一定经验的开发者&#xff0c;都能从本文中获得启发。 …

JS数组方法

数组方法 一、数组 JavaScript 数组的大小是可调整的&#xff0c;并且可以包含不同 数据类型。&#xff08;当不需要这些特性时&#xff0c;请使用 类型数组。&#xff09; 注&#xff1a;JavaScript 类型数组是类似数组的对象&#xff0c;它提供了一种在内存缓冲区中读取和写…

string 的接口

我们继续来讲解一些常用的string接口。 一.at接口 我们来看一个越界的问题。 我们运行之后发现这是一个断言错误&#xff0c;直接就终止我们的程序了&#xff0c;不能作为异常被捕捉到&#xff0c;但是我们如果不想让程序直接崩溃该怎么办呢&#xff1f; 此时我们就要用到at关键…

2000-2019年各省地方财政行政事业性收费收入数据

2000-2019年各省地方财政行政事业性收费收入数据 1、时间&#xff1a;2000-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政行政事业性收费收入 4、范围&#xff1a;31省 5、指标说明&#xff1a;地方财政行政事业…

Pytorch学习笔记(九)Learning PyTorch - Deep Learning with PyTorch: A 60 Minute Blitz

这篇博客瞄准的是 pytorch 官方教程中 Learning PyTorch 章节的 Deep Learning with PyTorch: A 60 Minute Blitz 部分&#xff0c; 官网链接&#xff1a;https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html 完整网盘链接: https://pan.baidu.com/s/1L9…

Elasticsearch 的搜索功能

Elasticsearch 的搜索功能 建议阅读顺序&#xff1a; Elasticsearch 入门Elasticsearch 搜索&#xff08;本文&#xff09; 1. 介绍 使用 Elasticsearch 最终目的是为了实现搜索功能&#xff0c;现在先将文档添加到索引中&#xff0c;接下来完成搜索的方法。 查询的分类&…

比特币等虚拟货币实时价格使用说明,数字货币价格获取,k线获取,实时价格获取

数据截图 k线数据 websocket 实时价格数据 根据这些数据可以做出自己的产品 获取时间段内的k线数据 在开始之前&#xff0c;你需要知道的知识&#xff1a; 币种缩写英文名币种IDBTCBitcoinbitcoinETHEthereumethereumEOSEOSeosUSDTTethertetherLTCLitecoinlitecoinUSDDol…

初阶7 vector

本章重点 vector的介绍vector的使用vector的模拟实现 1.vector的介绍 vector就类似数据结构中的顺序表 vector是表示可变大小数组的序列容器。 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。 意味着可以采用下标对vector的元素 进行访问&#xff0c;和数…

解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革

前言&#xff1a; DeepSeek 兑现了自己的诺言&#xff0c;开源了一款用于 Hopper GPU 的高效型 MLA 解码核&#xff1a;FlashMLA。 项目地址&#xff1a;https://github.com/deepseek-ai/FlashMLA 1:FlashMLA 是什么呀&#xff1f; MLA是DeepSeek大模型的重要技术创新点&…

scss预处理器对比css的优点以及基本的使用

本文主要在vue中演示&#xff0c;scss的基本使用。安装命令 npm install sass sass-loader --save-dev 变量 SCSS 支持变量&#xff0c;可将常用的值&#xff08;如颜色、字体大小、间距等&#xff09;定义为变量&#xff0c;方便重复使用和统一修改。 <template><…

GPU架构与通信互联技术介绍

文章目录 GPU架构介绍SM 和 Warp Scheduler GPU通信互联技术介绍1、GPUDirectGPUDirect Shared AccessGPUDirect P2PGPUDirect for VideoGPUDirect for RDMARDMAGPUDirect RDMA GPUDirect Storage 2、NVLink & NVSwitchNVLinkNVSwitch 3、应用场景总结 GPU架构介绍 SM 和 …

强化学习与神经网络结合(以 DQN 展开)

目录 基于 PyTorch 实现简单 DQN double DQN dueling DQN Noisy DQN&#xff1a;通过噪声层实现探索&#xff0c;替代 ε- 贪心策略 Rainbow_DQN如何计算连续型的Actions 强化学习中&#xff0c;智能体&#xff08;Agent&#xff09;通过与环境交互学习最优策略。当状态空间或动…

day 16

创建链接文件 软链接&#xff1a;又叫符号链接&#xff0c;类似win的快捷方式&#xff0c;是一种用来建立文件的特殊文件&#xff0c;这个文件里的数据都是建立链接的文件&#xff0c;但是它和建立链接的文件不是一个东西&#xff0c;如果建立链接的文件移动或删除&#xff0c…

fork系统调用

基本概念&#xff1a; 在操作系统里&#xff0c;进程是正在运行的程序的实例。fork() 函数的作用是复制当前进程&#xff0c;生成一个新的进程&#xff0c;这个新进程被称作子进程&#xff0c;而原本的进程则是父进程。这两个进程&#xff08;父进程和子进程&#xff09;会从 …

【leetcode刷题记录】(java)数组 链表 哈希表

文章目录 四、题目之&#xff1a;代码随想录(1) 代码随想录&#xff1a;数组[704. 二分查找](https://leetcode.cn/problems/binary-search/)[27. 移除元素](https://leetcode.cn/problems/remove-element/)暴力解:双指针&#xff1a; [977. 有序数组的平方](https://leetcode.…

在线运行vscode

安装 https://github.com/coder/code-server?utm_sourcesyndication&pubDate20250317 运行前预览脚本 curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run运行脚本 curl -fsSL https://code-server.dev/install.sh | sh其他 可以通过后台服务运行&am…

【Tauri2】002——Cargo.toml和入口文件

目录 前言 正文 toml文件的基础 注释——# Comment 键值对——Key/Value 表——[table] 内联表——Inline Table 数组——Array package和crate Cargo.toml文件 Cargo.toml——dependencies Cargo.toml——lib crate-type main.rs 前言 【Tauri2】001——安装及…

Netty源码—7.ByteBuf原理三

大纲 9.Netty的内存规格 10.缓存数据结构 11.命中缓存的分配流程 12.Netty里有关内存分配的重要概念 13.Page级别的内存分配 14.SubPage级别的内存分配 15.ByteBuf的回收 9.Netty的内存规格 (1)4种内存规格 (2)内存申请单位 (1)4种内存规格 一.tiny&#xff1a;表示从…