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

news2024/11/15 13:52:17

一、定义

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

二、简单实例

使用参数autouser=True

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

def test_example():
    print("Running: 测试函数")

执行结果

使用参数name

    @pytest.fixture(name="test")
    def my_fixture(self):
        print("Setup: 准备测试环境")
        yield
        print("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.param
        print("清理测试环境")

    def test_example(self, test):
        print(f"测试函数,使用的参数是 {test}")

执行结果

使用scope

function

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

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

    def test_example1(self):
        print(f"测试函数")

    def test_example2(self):
        print(f"测试函数")

执行结果

class

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

@pytest.fixture(autouse=True, scope="class")
def my_fixture():
    print(f"准备测试环境")
    yield
    print("清理测试环境")

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"准备测试环境")
    yield
    print("清理测试环境")


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准备测试环境")
    yield
    print("session清理测试环境")


class TestA:
    def test_example1(self):
        print(f"测试函数session")

test_2

@pytest.fixture(autouse=True, scope="module")
def my_fixture():
    print(f"\nmodule准备测试环境")
    yield
    print("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准备测试环境")
    yield
    print("清理测试环境")


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_fixture

def 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.coloradmin.cn/o/2108190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为软件测试笔试真题,抓紧收藏不然就看不到了

软件测试工程师笔试题目 一&#xff0e;填空 1、 系统测试使用&#xff08; C &#xff09;技术, 主要测试被测应用的高级互操作性需求, 而无需考虑被测试应用的内部结构。 A、 单元测试 B、 集成测试 C、 黑盒测试 D、白盒测试 2、单元测试主要的测试技术不包括&#xff08…

11. GIS三维建模工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

CACTER直播预告:畅联海外,高效通邮——解锁海外通邮新路径

在全球化的今天&#xff0c;企业通信的无障碍至关重要。然而&#xff0c;随着企业业务的不断拓展&#xff0c;海外通信的挑战也随之增加。跨国邮件传输的延迟、丢件、甚至安全问题&#xff0c;都可能成为企业国际化道路上的绊脚石。如何确保邮件在全球范围内的高效、安全传输&a…

设计模式1:C#开发中使用创建型的工厂模式和行为型的策略模式

一、接口设计的好处 三大好处&#xff1a;解耦、可复用、可扩展。 二、简单工厂模式 【三要素】能创建具体产品的工厂、抽象产品&#xff08;接口&#xff09;、具体产品 【基本用法】字符串>创建对象>调用其方法 // 产品接口 public interface IProduct {void Opera…

【计组易混淆概念梳理助记】机器字长、指令字长、存储字长、数据通路宽度...各种字长大杂炖,应该如何区分?谁又应该等于谁?

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 所有学过计组的人几乎都有一个烦恼 就是里面的概念无法记住 经典“转头忘” 那究竟是为什么&#xff1f;很显然 因为名词之间没形成结构化 点与点之间无法建立联系 在…

学AI绘画必知!文生图与图生图的基本认知

​ 在AI绘画的学习与使用中&#xff0c;无论是入门小白还是进阶高手&#xff0c;都绕不开两个核心概念&#xff1a;文生图和图生图。 这是所有AI绘画工具的根本操作方法。掌握这两者的基本原理&#xff0c;你便能轻松驾驭大多数AI工具&#xff0c;无论是MidJourney、Stable Dif…

创建makefile来运行其他目录下的makefile

上述makefile运行后&#xff0c;会报错产生结果&#xff1a; 需要一个伪目标all。

街机 SNK NeoGeo 中英文名字与驱动对照表

Part.I 简介 本文列举了街机 NeoGeo 中游戏的中英文名字与其驱动的对照&#xff0c;以帮助诸位更快地找到自己想玩的游戏。 注意&#xff1a;汉化版的街机模拟器 Kawaks 中游戏的中文名字是根据英文直译的&#xff0c;并不是习惯性的中文叫法。比如『三国志』英文名为『Warrio…

【案例67】Npart批量启动服务卡顿严重分析过程

问题现象 通过Npart启动NC服务&#xff0c;发现只启动一个&#xff0c;大概3min左右即可启动成功。但是批量启动服务需要几十分钟才可以把服务启动成功&#xff0c;启动卡在获取“wenjian”图标处。 绕过Npart直接写脚本并行启动相关服务&#xff0c;发现也需要30min 问题分析…

嵌入式OpenHarmony系统的一些特点

大家好,今天主要给大家分享一下,如何使用OpenHarmony,它的一些基本特点。 第一:为5G通讯做准备 OpenHarmony诞生与5G时代,5G不仅可以实现人与人,以及人与物,物与物之间的高速通讯,软件处理速度更快,可以操作的硬件也更多,可以说OpenHarmony是新一代万物互联的操作系…

【2024数模国赛赛题思路公开】国赛D题第二套思路丨附可运行代码丨无偿自提

2024年国赛D题解题第二套思路 【问题分析】 D题为投弹命中概率分析问题&#xff0c;有三种情况可以实现成功命中&#xff0c;并且可以发现这三种情况是互不重叠的&#xff0c;故实际投弹命中率可以表示为三种情况概率的累加&#xff0c;通过最后分析概率函数对投弹落点平面坐…

微信小程序rpx和px关系

微信小程序中使用了自定义的尺寸单位 rpx&#xff08;responsive pixel&#xff09;&#xff0c;这是一种相对单位&#xff0c;用于适配不同屏幕尺寸的设备。rpx 的设计目的是为了让开发者能够更容易地写出跨屏幕尺寸的应用&#xff0c;而不需要为每个屏幕尺寸单独写一套样式。…

为什么这么多物联网项目都失败了?

甚至超过 50% 的智慧布署&#xff0c;在概念阶段停滞不前&#xff0c;这让一些真正有前途的物联网项目都失败了。 这些严峻的数字可能令人费解&#xff0c;尤其是因为它们仍然没有阻止行业参与物联网技术&#xff0c;因为投资者越来越意识到&#xff0c;物联网提供了最激烈的竞…

Origin2024中如何添加误差带?直观查看数据的变化范围

误差线是通常用于统计或科学绘图中&#xff0c;本期给大家分享Origin中绘制带填充区的误差带图&#xff0c;可以直观显示数据的变化范围&#xff0c;填充区域也可以增加视觉效果和美观性 操作步骤&#xff1a; 1、打开Origin2024软件&#xff0c;然后在Book1中输入如下示例数…

[PS]Photoshop 2024下载安装教程附软件包百度网盘分享链接地址

Photoshop 2024下载安装教程&#xff1a; Photoshop是一款修图软件&#xff0c;可以是目前位置最全的修图软件。是图片设计师必备的技能。 如何安装PS? 可以通过网盘链接获取&#xff1a;https://pan.baidu.com/s/1er557ksNcOOqj7zfpi5Lhg?pwdrzo0 提取码&#xff1a;rzo0…

Vue3.0项目实战(三)——大事件管理系统首页 layout 架子与文章分类的实现

目录 1. 首页 layout 架子 [element-plus 菜单] 1.1 基本架子拆解 2. 登录访问拦截 2.1 需求 2.2 vue3 和 vue2 中的 Vue-Router 区别 3. 用户基本信息获取&渲染 4. 退出功能 [element-plus 确认框] 5. 文章分类页面 - [element-plus 表格] 5.1 基本架子 - PageCo…

《佛脚闪卡watch》——Apple Watch上的高效学习助手

在快节奏的生活环境中&#xff0c;时间管理成为了学习成功的关键因素之一。**《佛脚闪卡watch》**是一款专为Apple Watch设计的应用程序&#xff0c;旨在帮助学生和自学者更高效地利用碎片时间进行学习。无论是等待公交、散步还是短暂休息&#xff0c;您都可以随时随地进行复习…

除谷歌翻译外,好用的翻译工具推荐!

翻译工具的存在方便了我们阅读跨语种的文件&#xff0c;跨文化交流变得前所未有的便捷。今天&#xff0c;就让我们一起来探索包括谷歌翻译的几款深受用户喜爱的翻译工具吧&#xff01; 福昕在线翻译 直达链接&#xff1a; https://fanyi.pdf365.cn/ 福昕在线翻译是一款专注…

一、VSCode安装IDF5.3

目录 一、VSCode安装1、下载/安装 VSCode2、VSCode 的设置 二、VSCode安装IDF插件1、安装 IDF2、切换 IDF 版本3、从本地创建例程4、从服务器创建例程 一、VSCode安装 1、下载/安装 VSCode 下载地址&#xff1a;https://code.visualstudio.com/ 点击下载按钮。 下载安装 根据…

【 EI国际推荐会议 | 早鸟优惠 | 征稿启事】2025年计算机视觉、模式识别与检测国际会议(ICVPRD 2025)

Advanced Algorithms | Image Processing Technologies Oct. 25 - 26, 2025 ChongqingChina | 重庆中国 2025年计算机视觉、模式识别与检测国际会议&#xff08;ICVPRD 2025&#xff09; 会议官网&#xff1a;https://www.ic-vprd.org/ 会议时间&#xff1a;2025年10月25-2…