Pytest-@pytest.fixture夹具篇(一)

news/2024/9/16 16:02:38/ 标签: pytest

一、定义

在Python的pytest测试框架中,@pytest.fixture是一个(不是唯一)装饰器,用于定义一个测试夹具。

二、简单实例

使用参数autouser=True

@pytest.fixture(autouse=True)
def my_fixture():print("Setup: 准备测试环境")yieldprint("Teardown: 清理测试环境")def test_example():print("Running: 测试函数")

执行结果

使用参数name

    @pytest.fixture(name="test")def my_fixture(self):print("Setup: 准备测试环境")yieldprint("Teardown: 清理测试环境")def test_example(self,test):print("测试函数")

执行结果

使用参数params和ids

pytest 中,ids 通常与 params 参数一起使用,以便为每个参数化测试提供标识符。params 提供了参数化的值,而 ids 为这些值提供了可读的标识符

class TestWebsite:@pytest.fixture(name="test", params=["a", "b", "c"], ids=["id_a", "id_b", "id_c"])def my_fixture(self, request):print(f"准备测试环境,使用参数 {request.param}")yield request.paramprint("清理测试环境")def test_example(self, test):print(f"测试函数,使用的参数是 {test}")

执行结果

使用scope

function

函数级别,默认值。每个测试函数都会调用一次夹具

class TestWebsite:@pytest.fixture(autouse=True, scope="function")def my_fixture(self):print(f"准备测试环境")yieldprint("清理测试环境")def test_example1(self):print(f"测试函数")def test_example2(self):print(f"测试函数")

执行结果

class

类级别。夹具的设置代码在第一个测试方法执行前运行一次,清理代码在最后一个测试方法执行后运行一次

@pytest.fixture(autouse=True, scope="class")
def my_fixture():print(f"准备测试环境")yieldprint("清理测试环境")class TestA:def test_example1(self):print(f"测试函数")def test_example2(self):print(f"测试函数")class TestB:def test_example1(self):print(f"测试函数")def test_example2(self):print(f"测试函数")

运行结果

module

模块级别。夹具在同一个模块中的所有测试函数之间共享

@pytest.fixture(autouse=True, scope="module")
def my_fixture():print(f"准备测试环境")yieldprint("清理测试环境")class TestA:def test_example1(self):print(f"测试函数")def test_example2(self):print(f"测试函数")class TestB:def test_example1(self):print(f"测试函数")def test_example2(self):print(f"测试函数")

运行结果

session

会话级别。整个测试会话中只创建一次夹具示例

演示该参数需要两个Python文件。

test_1

@pytest.fixture(autouse=True, scope="session")
def my_fixture():print(f"\nsession准备测试环境")yieldprint("session清理测试环境")class TestA:def test_example1(self):print(f"测试函数session")

test_2

@pytest.fixture(autouse=True, scope="module")
def my_fixture():print(f"\nmodule准备测试环境")yieldprint("module清理测试环境")class TestA:def test_example1(self):print(f"测试函数module")

运行结果

可以看到module级别的作用域只能在当前模块生效,而session级别的作用域,在整个会话都生效

package

包级别。这个作用域在 pytest 3.5 版本中引入,用于跨越多个模块和会话共享夹具实例,需要导入夹具。

这里使用两个不同的模块演示。

test_1

#!/usr/bin/env python
# -*- coding: utf-8 -*-import pytest@pytest.fixture(scope="package")
def package_fixture():print(f"\n准备测试环境")yieldprint("清理测试环境")def test_example1(package_fixture):print(f"测试函数test_1")

test_2

#!/usr/bin/env python
# -*- coding: utf-8 -*-import pytest
from .test_1 import package_fixturedef test_example1(package_fixture):print(f"测试函数test_2")

运行结果

三、源码解读

注释解读:对照行

纯中文

标记一个夹具工厂函数的装饰器。这个装饰器可以用来定义一个夹具函数,无论是否带有参数。稍后可以通过引用夹具函数的名称来调用它:测试模块或类可以使用 ``pytest.mark.usefixtures(fixturename)`` 标记。测试函数可以直接使用夹具名称作为输入参数,在这种情况下,从夹具函数返回的夹具实例将被注入。夹具可以通过 ``return`` 或 ``yield`` 语句向测试函数提供它们的值。当使用 ``yield`` 时,``yield`` 语句后的代码块将作为清理代码执行,无论测试结果如何,并必须恰好产生一次。:param scope:这个夹具共享的范围;可以是 ``"function"``(默认)、``"class"``、``"module"``、``"package"`` 或 ``"session"`` 之一。这个参数也可以是一个可调用的,它接收 ``(fixture_name, config)`` 作为参数,并必须返回上述值之一的 ``str``。有关更多信息,请参见文档中的 :ref:`dynamic scope`。:param params:一个可选的参数列表,它将导致夹具函数的多次调用以及所有使用它的测试。当前的参数可以在 ``request.param`` 中获取。:param autouse:如果为 True,则对于可以看到它的所有测试,夹具函数将被激活。如果为 False(默认值),需要显式引用才能激活夹具。:param ids:每个参数对应的一组 ID,以便它们是测试 ID 的一部分。如果没有提供 ids,它们将根据参数自动生成。:param name:夹具的名称。这默认为装饰函数的名称。如果夹具在定义它的模块中使用,夹具的函数名称将被请求夹具的函数参数遮蔽;解决这个问题的一个方法是将装饰函数命名为 ``fixture_<fixturename>``,然后使用 ``@pytest.fixture(name='<fixturename>')``。

http://www.ppmy.cn/news/1522761.html

相关文章

html导航栏logo

设置顶部logo <link rel"shortcut icon" href"图片路径" type"image/x-icon"> 显示效果&#xff1a; 这样设置可以是本地的&#xff0c;也可以是在线的。

【数学建模学习手册】python基本入门使用

本专栏内容为&#xff1a;数学建模原理 记录学习数学建模 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;数学建模 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学…

极米科技:走出舒适圈,推动数据架构现代化升级 | OceanBase 《DB大咖说》

《DB 大咖说》第 13 期&#xff0c;邀请到了极米科技软件与创新产品线高级架构师施刘凡来进行分享。 在小红书平台上&#xff0c;“是否应将家里的电视升级为投影仪&#xff1f;”这一话题激发了上百万篇笔记的分享与推荐&#xff0c;反映出年轻群体对投影仪的偏好。随着手机、…

【Linux】理解Linux中的软链接与硬链接

文章目录 理解Linux中的软链接与硬链接1. 什么是硬链接&#xff1f;示例&#xff1a; 2. 什么是软链接&#xff1f;示例&#xff1a; 3. 软链接与硬链接的对比4. 何时使用软链接与硬链接&#xff1f; 理解Linux中的软链接与硬链接 在Linux文件系统中&#xff0c;软链接&#x…

Android UI绘制流程

UI绘制流程&#xff0c;Activity、Dialog、PopupWindow等 -- android系统的事件分发流程分为很多部分&#xff1a; Native层 –> ViewRootImpl层 –> DecorView层 –> Activity层 –> ViewGroup层 –> View层。 其实Toast窗口和Activity、Dialog、PopupWindow有…

Java 中 `==` 和 `equals()` 的区别详解

在 Java 编程中&#xff0c; 和 equals() 是两种常用于比较变量和对象的方法。尽管它们都可以用来比较&#xff0c;但它们的作用和使用场景是不同的。本文将深入探讨它们之间的区别&#xff0c;并通过示例解释如何正确使用它们。 1. 操作符 什么是 &#xff1f; 是 Java 中的…

24并发设计模式——线程池模式

一、线程池模式介绍 线程池模式&#xff08;Thread Pool Pattern&#xff09;是一种并发设计模式&#xff0c;用于管理和循环使用线程资源以处理大量任务。它旨在提高系统性能和资源利用率&#xff0c;特别是在需要频繁创建和销毁线程的环境中。 1、线程池模式结构图 线程池管…

wmv怎么转换成视频mp4?简单的几种视频格式转换方法

wmv怎么转换成视频mp4&#xff1f;在数字媒体日益普及的今天&#xff0c;我们经常会遇到需要转换视频格式的情况。wmv格式&#xff0c;由微软开发&#xff0c;广泛用于Windows平台上播放视频。尽管wmv格式在Windows系统中表现优异&#xff0c;但其兼容性在其他操作系统或设备上…

为什么我选择这款PR剪辑软件?打工人亲测好用!

现在大家都爱看短视频和Vlog&#xff0c;要是你会剪辑视频&#xff0c;那可就牛了。不管是出去玩拍的视频&#xff0c;还是工作需要&#xff0c;都能派上用场。我就是个爱旅行、爱剪辑的发烧友&#xff0c;今天给你们推荐三款特别好用的视频剪辑软件&#xff0c;尤其是PR剪辑&a…

Android 串口数据分包处理

/* class PacketHandler { private static final byte PACKET_START 0x79; // 假设包的开始标记为0x79 private static final byte PACKET_END 0x0D; // 假设包的结束标记为0x0D private static ByteArrayOutputStream buffer new ByteArrayOutputStream();public static v…

【前端】中断请求的方式

一 使用 Axios 和取消令牌 1.步骤: 初始化取消源,创建CancelToken const source axios.CancelToken.source();传递cancelToken, 发起请求 axios.get(/api/data, {cancelToken: source.token });触发取消请求 source.cancel(操作被取消);判断错误是否由于取消请求操作引起…

Vue.js 组件化开发:父子组件通信与组件注册详解

Vue.js 组件化开发&#xff1a;父子组件通信与组件注册详解 简介&#xff1a; 在 Vue.js 的开发中&#xff0c;组件是构建应用的重要基础。掌握组件的创建与使用&#xff0c;尤其是父子组件的通信和组件的注册与命名&#xff0c;是开发中不可或缺的技能。本文将详细探讨这些内容…

【前端】CSS控制style样式失效

在CSS中&#xff0c;可以通过几种方式控制或禁用特定的style样式。 使用all: unset来重置所有可继承的属性&#xff0c;并清除所有的样式&#xff1a; .element {all: unset;} 使用inherit值来使属性获取其父元素的值&#xff1a; .element {color: inherit;font-size: inh…

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物&#xff0c;今天我们实现一下人物实现移动和跳起&#xff0c;依次点击&#xff0c;我们准备创建一个C#文件 创建好我们点击进去&#xff0c;就会跳转到我们的Vision Studio&#xff0c;然后输入这些代码 using UnityEngine;public class M…

Vue 使用接口返回的背景图片和拼图图片进行滑动拼图验证

一、背景 前两天发了一篇 vue-monoplasty-slide-verify 滑动验证码插件使用及踩坑_vue-monoplasty-slide-verify 引用后不显示-CSDN博客 这两天项目又需要通过接口校验&#xff0c;接口返回了背景图片和拼图图片&#xff0c;于是在网上找了一篇帖子&#xff0c;vue 图片滑动…

Apache Ignite 在处理大规模数据时有哪些优势和局限性?

Apache Ignite 在处理大规模数据时的优势和局限性可以从以下几个方面进行分析&#xff1a; 优势 高性能&#xff1a;Ignite 利用内存计算的优势&#xff0c;实现了极高的读写性能&#xff0c;通过分布式架构&#xff0c;它可以将数据分散到多个节点上&#xff0c;从而实现了并…

JavaEE-HTTPHTTPS

目录 HTTP协议 一、概念 二、http协议格式 http请求报文 http响应报文 URL格式 三、认识方法 四、认识报头 HTTP响应中的信息 HTTPS协议 对称加密 非对称加密 中间人攻击 解决中间人攻击 HTTP协议 一、概念 HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤…

2024华为OD机试真题-反射计数Python-C卷D卷-200分

2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 题目解析 代码 题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则…

分布式部署①

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 1. 需要部署的服务 Nacos 理论上,应…

仕考网:事业编面试全流程介绍

1.进入考场 工作人员会检查考生的身份证、准考证以及随身携带物品&#xff0c;可以带食物和水 2.进入候考室 进入候考室&#xff0c;工作人员会再次确认考生信息 3.抽签 考生到齐后&#xff0c;工作人员会组织考生抽签&#xff0c;登记抽签序号、信息确认、发放号码牌 4.…