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

3 pytest Fixture

3 pytest Fixture

  • 3.1 通过 conftest.py 共享 fixture
  • 3.2 使用 fixture 执行配置及销毁逻辑
  • 3.3 使用 --setup-show 回溯 fixture 的执行过程
  • 3.4 使用 fixture 传递测试数据
  • 3.5 使用多个 fixture
  • 3.6 指定 fixture 作用范围
  • 3.7 使用 usefixtures 指定 fixture
  • 3.8 为常用 fixture 添加 autouse 选项
  • 3.9 为 fixture 重命名
  • 3.10 Fixture 的参数化
  • 3.11 参数化 Tasks 项目中的 fixture

fixture 是在测试函数运行前后,由 pytest 执行的外壳函数,其中代码可定制,主要包括:

  • 定义传入测试中的数据集
  • 配置测试前系统的初始状态
  • 为批量测试提供数据源

请添加图片描述

3.1 通过 conftest.py 共享 fixture

fixture 可放在单独的测试文件中,也可在放在某公共目录下的 conftest.py 文件中供所在及其子目录下的多个测试文件共享

3.2 使用 fixture 执行配置及销毁逻辑

fixture 函数会在测试函数之前运行,但若含 yield,就会在 yield 处停止,转而运行测试函数,测试函数执行完毕后再回到 fixture,继续执行 yield 后面的代码

fixture 中 yield 之前的代码 --> 测试函数 --> fixture 中 yield 之后的代码

  • 即:fixture 中 yield 之前的代码 = setup;fixture 中 yield 之后的代码 = teardown
  • 注意:无论测试过程中发生什么,yield 之后的代码都会被执行

请添加图片描述

3.3 使用 --setup-show 回溯 fixture 的执行过程

使用 --setup-show 选项可展示测试过程中执行的是什么,以及先后顺序
请添加图片描述

3.4 使用 fixture 传递测试数据

除了堆栈跟踪的内容,pytest 还给出了具体引起 assert 异常的函数参数值

  • fixture 作为测试函数的参数,也会被堆栈跟踪并纳入测试报告

在这里插入图片描述
若 assert 异常(或任何类型的异常)就发生在fixture,仍可正确定位到,且报告为 ERROR(而不是 FAIL)
在这里插入图片描述

3.5 使用多个 fixture

请添加图片描述
使用 fixture 的优势在于:用户在编写函数时可以只考虑核心测试逻辑,而无需考虑测试前的准备工作

  • 注释中写 GIVEN/WHEN/ThHEN,fixture 中多写 GIVEN,可增加测试的可读性和可维护性

在这里插入图片描述

3.6 指定 fixture 作用范围

  • fixture 包含一个叫 scope可选参数,用于控制执行配置和销毁逻辑的频率,有4个待选值:
    • function(默认):每个测试函数运行一次
    • class:每个测试类运行一次
    • module:每个模块运行一次
    • session:每次会话运行一次
  • scope 参数是在定义而非调用 fixture 时定义的,即:使用 fixture 的测试函数无法改变其作用范围
  • fixture 只能使用同级别即以上的 fixture,如:类级别的 fixture 可使用类、模块和会话级别的 fixture,但不能使用函数级别的 fixture
    在这里插入图片描述

3.7 使用 usefixtures 指定 fixture

使用 fixture,除了以上在测试函数参数列表中指定 fixture 外,也可以用 pytest.mark.usefixtures('fixture1', 'fixture2') 标记测试函数或类

  • usefixtures 参数列表中的 fixture 为字符串,即需要加引号
  • usefixtures 对测试函数来讲意义不大,但非常适合测试类
  • usefixtures 不能使用 fixture 的返回值,但在测试方法中添加 fixture 参数的方式可以

在这里插入图片描述

3.8 为常用 fixture 添加 autouse 选项

autouse=True 可使作用域内的测试函数都运行该 fixture,而不需要指名调用
在这里插入图片描述

3.9 为 fixture 重命名

可以使用 @pytest.fixture()name 参数对 fixture 重命名

  • 重命名后原名不可用
    在这里插入图片描述
    pytest 的 --fixtures 选项可列举所有可供测试使用的 fixture,包括重命名的
    在这里插入图片描述

3.10 Fixture 的参数化

使用参数化 fixture,每个使用该 fixture 的测试函数都可以被运行多次

  • 未指定 id
    在这里插入图片描述
  • 以列表指定 id
    在这里插入图片描述
  • ids 参数也可以被指定为一个函数,供 pytest 生成 task 标识

3.11 参数化 Tasks 项目中的 fixture

之前 Tasks 项目用的数据库都是 TinyDB,现改为既可使用 TinyDB,也可使用 MongoDB

  1. fixture 装饰器中添加 params=['tiny', 'mongo']
  2. request 添加到 temp_db 参数列表中
  3. 将 db_type 的值设定为 request.param,避免直接使用 ‘tiny’ 或 ‘mongo’

在这里插入图片描述

相关文章:

3 pytest Fixture

3 pytest Fixture 3.1 通过 conftest.py 共享 fixture3.2 使用 fixture 执行配置及销毁逻辑3.3 使用 --setup-show 回溯 fixture 的执行过程3.4 使用 fixture 传递测试数据3.5 使用多个 fixture3.6 指定 fixture 作用范围3.7 使用 usefixtures 指定 fixture3.8 为常用 fixture …...

pinctl 和 gpio子系统驱动

一.设备树中添加pinctl节点模板 1.创建对应的节点 同一个外设的 PIN 都放到一个节点里面,打开 imx6ull-14x14-evk.dts,在 iomuxc 节点 中的“imx6ul-evk”子节点下添加 “pinctrl_test” 节点。添加完成以后如下所示: pinctrl_test:test_g…...

RocketMQ消息堆积了怎么解决?

RocketMQ 的消息堆积,一般都是因为客户端本地消费过程中,由于消费耗时过长或消费并发度较小等原因,导致客户端消费能力不足,出现消息堆积的问题。 当线上出现消息堆积的问题时,一般有以下几种方式来解决: 增加消费者…...

C++第十二弹 -- STL之list模拟实现

文章索引 前言模拟实现list1. ListNode节点类2. list的迭代器封装3. 反向迭代器4. list类的模拟实现测试代码 list的反向迭代器总结 前言 通过模拟实现可以让我们更加深刻的理解C底层STL的实现逻辑, 本篇就对list的底层进行模拟实现. 博客主页: 酷酷学!!! 点击关注 共同进步!…...

Destiny of Gods首轮测试正式开启,参与玩家数量突破10万

天神风云,波澜再兴,GameFi链游聚合平台Destiny of Gods首款同名数字卡牌回合制游戏首轮测试定档8月20日20:00(GMT8),现已正式开启! 这是一个由人、游灵和神灵共存的世界,历经蛮荒时期的纷争与信…...

QT聊天室基于Tcp

server.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),server(new QTcpServer(this)) // 给服务器指针对象实例化空间{ui->setupUi(this); }Widget::~Widget() {delete ui; }…...

公开课观后感:密歇根大学python for everyone

从2024年1月17日到2024年8月20日,终于将密歇根大学的python for everyone的python公开课跟完。站在一月份规划的时刻来看,比我想象中花费的时间更多,我当时肯定没有想到要花上整整七个月的时间才能将这个公开课的内容看完,毕竟这个…...

goweb框架-gin

文章目录 Gin框架概览Gin框架的特点Gin框架的安装和基本使用安装基本使用 路由系统路由的基本概念Gin框架路由的特点 Radix Tree(基数树)基数树的定义和原理基数树在Gin框架中的应用节省空间的优化动态路由和通配符处理 路由树的构建注册路由的过程路由树…...

2024年接口测试高频面试题及答案

1. 什么是接口测试? •接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求 •测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系 2. 为什么要做接口…...

ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(8)

接前一篇文章:ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(7) 前边几回分析了笔者在MQTT测试时所遇到的问题: 最终定位到了是由于components\components\tcp_transport\transport_ssl.c的base_poll_write函数中调用的select函数超时返回…...

Linux: 忘记密码的解决方法,passwd

https://www.redhat.com/sysadmin/recover-root-passwd 这里的方法很简单,就是通过console进去,添加一个启动参数,加载sysroot,然后用passwd命令修改密码。这个是RHEL7适用。 https://access.redhat.com/solutions/1192 这个是提…...

36. 有效的数独【 力扣(LeetCode) 】

一、题目描述 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图…...

机器学习中的没有免费午餐定理

嘿,各位机器学习的爱好者们!今天,让我们一起深入探讨机器学习中那个神秘而又重要的概念——没有免费午餐定理。 一、定理引入:探索算法森林的钥匙 在广阔无垠的机器学习领域中,免费午餐定理就如同一把神奇的钥匙&…...

高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?

如果有遗漏,评论区告诉我进行补充 面试官: 使用IOC容器应该注意哪些? 我回答: 1. 理解IOC的基本概念 控制反转:在传统的编程模式中,程序会主动控制依赖关系的创建和管理。而在IoC容器中,这种控制权被反转给了容器本身。程序员只需要声明…...

LLM训练推理相关概念

1. 有监督微调(Supervised Fine-Tuning)与指令微调(Instruction Fine-Tuning)对模型参数的影响 **有监督微调(Supervised Fine-Tuning, SFT)和指令微调(Instruction Fine-Tuning, Instruct-Tun…...

IP in IP 协议

IP in IP 是一种多重IP协议,即:客户机可以发送一个IP协议内部在嵌套一个IP协议到某个特定的主机上,在由具体的主机作为路由进行转发的协议。 例如: IP in IP帧协议结构为,第一层为发送到IP in IP 路由主机的报文&…...

DAY2: HTTP请求报文和响应报文是怎样的,有哪些常见的字段?| HTTP有哪些请求方式?| GET请求和POST请求的区别

目录 HTTP请求报文和响应报文是怎样的,有哪些常见的字段? 请求报文 响应报文 HTTP有哪些请求方式? GET请求和POST请求的区别 HTTP请求报文和响应报文是怎样的,有哪些常见的字段? HTTP报文分为请求报文和响应报文…...

线性代数:每日一题1/特征值与相似对角化

设A, B 为二阶矩阵,且 AB BA , 则“A有两个不相等的特征值”是“B可对角化"的() A. 充分必要条件 B. 充分不必要条件 C.必要不充分条件 D.既不充分也不必要条件 知识点: 特征向量与特征值的关系 相似矩阵的定义和性质 n阶…...

Android UI:PopupWindow:API

文章目录 类操作 对PopupWindow的操作 创建PopupWindow对象的操作添加并显示PopupWindow的操作移除PopupWindow的操作更新PopupWindow的操作显示内容的相关操作 布局的相关操作进入退出动画的相关操作 Transition设置进入动画的相关操作Transition设置退出动画的相关操作XML设置…...

什么是DevUI?

DevUI是面向企业中后台产品的开源前端解决方案,其设计价值观基于"高效、开放、可信、乐趣"四种自然与人文相结合的理念,旨在为设计师、前端开发者提供标准的设计体系,并满足各类落地场景,是一款企业级开箱即用的产品。 …...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

Go语言多线程问题

打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Vue ③-生命周期 || 脚手架

生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...