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

Pytest之fixture的常见用法

文章目录

  • 1.前言
  • 2.使用fixture执行前置操作
  • 3.使用conftest共享fixture
  • 4.使用yield执行后置操作

1.前言

在pytest中,fixture是一个非常强大和灵活的功能,用于为测试函数提供固定的测试数据、测试环境或执行一些前置和后置操作等,
与setup和teardown类似。

2.使用fixture执行前置操作

示例:

import pytest@pytest.fixture()
def fixture():print('执行前置操作')def test_01(fixture):assert 1==1def test_02():assert 2==2if __name__ == '__main__':pytest.main()

运行结果中可以看到第一条测试用例执行时,输出了“执行前置操作”:
在这里插入图片描述

  • 定义fixture:使用@pytest.fixture装饰器来定义一个fixture函数。

注意测试用例中传递的fixture是将定义好的函数名传过去的

作用域:fixture的作用域决定了它在测试中的生命周期和应用范围,通过scope参数来指定,有以下几种常见的作用域:

  • function(默认):每个测试函数都会调用一次fixture。
  • class:每个测试类中的所有测试方法共享同一个fixture实例,在测试类的所有测试方法执行前创建,执行完后销毁。
  • module:在整个测试模块中只创建一次fixture实例,模块中的所有测试函数和测试类共享。
  • session:在整个测试会话期间只创建一次fixture实例,所有测试模块、测试类和测试函数都共享。

除了之外,可以通过params参数为fixture传递不同的参数值,实现参数化测试。

import pytest@pytest.fixture(params=[1, 2, 3])
def parameter_fixture(request):return request.paramdef test_parameterized(parameter_fixture):print(f"测试参数: {parameter_fixture}")assert parameter_fixture > 0
  • fixture函数中的变量名必须为request。

运行结果:
在这里插入图片描述

如果觉得每次使用fixture函数的时候都需要将fixture函数当参数传入测试用例中比较麻烦,可以在fixture

import pytest@pytest.fixture(autouse = True)
def test_fixture():print('执行前置操作')def test_01():assert 1==1def test_02():assert 2==2if __name__ == '__main__':pytest.main()

运行结果:
在这里插入图片描述

3.使用conftest共享fixture

在 pytest 中,conftest.py 是一个非常重要的文件,它主要用于在多个测试文件之间共享 fixture、钩子函数等,帮助组织和管理测试代码。
使用conftest.py注意事项:

  1. conftest.py为固定写法,不能修改名字
  2. 使用conftest.py文件方法无需倒入
  3. 位于项目的根目录,那么它定义的 fixture 和钩子函数对整个项目的测试文件都有效。
  4. 如果 conftest.py 位于某个子目录下,那么它定义的内容只对该子目录及其子目录下的测试文件有效。

示例:
创建conftest.py文件在根目录下,并输入以下内容

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service@pytest.fixture(scope='session')
def driver():driver = webdriver.Chrome()driver.maximize_window()return driver

创建一个文件测试conftest中fixture函数
代码如下:

import pytestdef test_01(driver):driver.get('https://www.baidu.com/')title = driver.titleassert title == '百度一下,你就知道'def test_02(driver):driver.get('https://www.bilibili.com/')url = driver.current_urlassert url == 'https://www.bilibili.com/'if __name__ == '__main__':pytest.main()

执行结果:
在这里插入图片描述
可以看出fixture函数成功运行了,但是上述代码中虽然有前置获取浏览器驱动的操作,但没有关闭浏览器驱动,虽然会自动关闭,但最好还是自己手动释放一下。如果想要执行后置操作,就需要使用yield

4.使用yield执行后置操作

在 pytest 的 fixture 函数里,yield 关键字用于分隔测试的前置和后置操作。在 yield 之前的代码会在测试用例执行前运行,起到初始化环境、准备数据等前置操作的作用;yield 之后的代码会在测试用例执行完毕后运行,用于清理资源、恢复环境等后置操作。

将conftest.py中代码修改一下:

@pytest.fixture(scope='session')
def driver():driver = webdriver.Chrome()driver.maximize_window()print('打开浏览器')yield driverprint('关闭浏览器')driver.quit()

注意这里是yield driver而不是return driver

  • 当 fixture 函数中使用 return driver 时,函数执行到 return 语句就会立即返回 driver 对象并终止函数的执行,不会再执行 return 语句之后的代码。
  • yield 关键字使 fixture 函数成为一个生成器函数。当执行到 yield driver 时,函数会暂停执行并返回 driver 对象给测试用例使用。当测试用例执行完毕后,fixture 函数会从 yield 语句的下一行继续执行。

再次执行刚才的测试用例
在这里插入图片描述
可以看到有输出语句,说明yield后面的代码被执行到了

相关文章:

Pytest之fixture的常见用法

文章目录 1.前言2.使用fixture执行前置操作3.使用conftest共享fixture4.使用yield执行后置操作 1.前言 在pytest中,fixture是一个非常强大和灵活的功能,用于为测试函数提供固定的测试数据、测试环境或执行一些前置和后置操作等, 与setup和te…...

FFmpeg入门:最简单的视频播放器

FFmpeg入门:最简单的视频播放器 FFmpeg入门第一篇,制作一个简单的MP4视频播放器。 整体流程 话不多说,直接上流程图 视频播放速率控制 这里可以直接看图中的帧率同步模块,可以分为如下几步 获取到当前帧的预期播放时间&…...

GitHub 语析 - 基于大模型的知识库与知识图谱问答平台

语析 - 基于大模型的知识库与知识图谱问答平台 GitHub 地址:https://github.com/xerrors/Yuxi-Know 📝 项目概述 语析是一个强大的问答平台,结合了大模型 RAG 知识库与知识图谱技术,基于 Llamaindex VueJS FastAPI Neo4j 构…...

Linux《基础开发工具(上)》

在之前的篇章当中我们已经了解了Linux当中基本的指令以及相关的知识,那么接下来在本篇当中就开始学基本的开发工具,在此我们一共要了解6大开发工具,在此将这些工具的学习分为上中下篇,在本篇当中我们首先要来学习的是yun以及vim,一…...

【考试大纲】初级信息系统运行管理员考试大纲

目录 引言一、考试要求1、 考试说明2、 考试要求3、 本考试设置的科目包括:二、考试范围考试科目1:信息系统基础知识(初级)考试科目2:信息系统运行管理(应用技术)引言 最新的信息系统运行管理员考试大纲出版于 2018 年 9 月,本考试大纲基于此版本整理。 一、考试要求…...

《每天搞懂一道Hard》之数独终结者(LeetCode 37)

📌《每天搞懂一道Hard》之数独终结者(LeetCode 37) 🔗原题链接:https://leetcode.com/problems/sudoku-solver/ 今天我们来解剖一个经典回溯算法问题——数独求解器!这道题在算法面试中出现频率高达35%&a…...

LangChain原理解析及开发实战指南(2025年最新版)

一、LangChain核心架构解析 1.1 框架设计理念 LangChain是基于提示工程(Prompt Engineering)构建的LLM应用开发框架,其核心思想是通过模块化组件实现大语言模型与业务系统的无缝对接。该框架采用分层设计: 接口层:统一对接OpenAI、DeepSee…...

YoloV8改进策略:Block改进|CBlock,Transformer式的卷积结构|即插即用

摘要 论文标题: SparseViT: Nonsemantics-Centered, Parameter-Efficient Image Manipulation Localization through Spare-Coding Transformer 论文链接: https://arxiv.org/pdf/2412.14598 官方GitHub: https://github.com/scu-zjz/SparseViT 这段代码出自SparseViT ,代码如…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file

ngx_open_file 定义在src/os/unix/ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access)#define NGX_FILE_RDONLY O_RDONLY #define NGX_FILE_WRONLY O_WRONLY #de…...

测试金蝶云的OpenAPI

如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中,我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧! 2. 下载所需的SDK文件 2.1 获取SDK 首先&…...

C语言408考研先行课第一课:数据类型

由于408要考数据结构……会有算法题…… 所以,需要C语言来进行一个预备…… 因为大一贪玩,C语言根本没学进去……谁能想到考研还用得到呢?【手动doge(bushi) 软件用的是Clion,可以自行搜索教程下载使用。…...

11天 -- Redis 中跳表的实现原理是什么?Redis 的 hash 是什么?Redis Zset 的实现原理是什么?

Redis 中跳表的实现原理是什么? Redis 中的跳表(Skip List)是一种基于有序链表的高效数据结构,通过在链表上增加多级索引来提高数据的查找效率。以下是 Redis 中跳表的实现原理: 1. 基本概念 节点结构:跳…...

单细胞分析(19)—— 单细胞转录组基因集评分方法

下面是每种基因集评分方法的原理介绍代码示例,适用于R语言和Python两种主流生信分析环境。可以直接应用于单细胞转录组(scRNA-seq)数据分析中。 🔬 单细胞转录组基因集评分方法(附代码示例) 在单细胞RNA测…...

010 rocketmq批量消息

文章目录 批量消息BatchProducer.javaBatchConsumer.java 批量消息 批量发送可以提⾼发送性能,但有⼀定的限制: topic 相同 waitStoreMsgOK 相同 (⾸先我们建设消息的iswaitstoremsgoktrue(默认为true), 如果没有异常,我们将始终收到"O…...

JavaWeb后端基础(3)

原打算把Mysql操作数据库的一些知识写进去,但是感觉没必要,要是现在会的都是简单的增删改查,所以,这一篇,我直接从java操作数据库开始写,所以这一篇大致就是记一下JDBC、MyBatis、以及SpringBoot的配置文件…...

Oracle数据库基础入门(三): DQL 深入解析与实践

在 Oracle 数据库的知识体系中,数据查询语言(DQL)无疑是最为常用且关键的部分之一。对于 Java 全栈开发者而言,熟练掌握 DQL 不仅能高效地从数据库中获取所需数据,更是构建强大后端应用的基石。通过 DQL,我…...

P9231 [蓝桥杯 2023 省 A] 平方差

P9231 [蓝桥杯 2023 省 A] 平方差 - 洛谷 题目描述 给定 L,R,问 L≤x≤R 中有多少个数 x 满足存在整数 y,z 使得 xy2−z2。 输入格式 输入一行包含两个整数 L,R,用一个空格分隔。 输出格式 输出一行包含一个整数满足题目给定条件的 x 的数量。 输…...

贪心算法 求解思路

贪心算法简介 贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点,做一个当时(看起来是)最佳的选择。这种启发式策略并不是总能产生出最优解,但它常常能给出最优解。 在实际设计贪心算法时&#xff0…...

2025/2/25,字节跳动后端开发一面面经

一、双方简单自我介绍 面试官先自我介绍,之后属于面试官看简历过程,基本不听。 二、实习中遇到最难的事情,怎么解决的 主要问的还是实习中做过的项目,项目难点在哪里(自己参与的地方),面对困难是怎么思考,怎么实际操作解决的。 三、项目实现细节 掌握自己项目的实…...

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统,适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起&#xff0c;为了跨网段推流&#xff0c;千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...