Pytest精通指南(06)Fixture scope作用域详解

news2024/11/24 6:03:58

文章目录

      • 前言
      • Scope 作用域
      • 写在测试用例函数文件
      • 写在`conftest.py`文件
      • 作用域总结
      • 验证默认作用域
      • 验证执行顺序遵循
      • 验证类中的fixture作用域
      • 验证重名fixture作用域


请添加图片描述

前言

从前文中,我们已经知道固件(fixture)的概念、原理、作用域,并且举出很多自定义的前后夹具;

本文不再赘述这些,将继续深入讲解固件(fixture)的作用域(scope)参数

Scope 作用域

固件(fixture) 的作用域决定了其被调用的频率和生命周期;

主要分为两部分:

  • 写在测试用例函数文件中

  • 写在conftest.py文件中conftest.pypytest特有且固定的py模块

写在测试用例函数文件

表示被@pytest.fixture标记的函数的作用域

属性描述
function默认值, 对于每个测试用例(函数或方法),fixture 会在其执行前被调用一次
class对于每个测试类,fixture 会在所有测试用例执行前被调用一次
module对于每个Python模块,fixture 会在该模块中的所有测试用例执行前被调用一次
package对于整个Python包,fixture会在该包中的所有测试用例执行前被调用一次
session对于整个测试,会话中的所有模块、包和测试函数中只调用一次

写在conftest.py文件

如果fixture写在conftest.py文件中,作用则略有不同;主要体现在测试用例的可见性重用性

属性描述
function每一个测试文件中的所有测试用例执行前都会执行一次conftest文件中的fixture
class每一个测试文件中的测试类执行前都会执行一次conftest文件中的fixture
module每一个测试文件执行前都会执行一次conftest文件中的fixture
package当前目录下所有测试py文件执行前执行一次conftest文件中的fixture
session所有测试py文件执行前执行一次conftest文件中的fixture

作用域总结

  • scope参数的默认值function
  • 作用域执行顺序遵循session > package > module > class > function
  • 模块和类中的fixture优先级:当模块和类中有同名的 fixture 时,类的 fixture 会优先被使用。这是因为类的 fixture 是局部的,而模块的 fixture 是全局的。

验证默认作用域


import pytest


@pytest.fixture
def setup_teardown_per_test():
    print("\n前置")
    yield
    print("\n后置")


def test_example1(setup_teardown_per_test):
    assert 1 == 1


def test_example2(setup_teardown_per_test):
    assert 2 == 2


class TestCase01:

    def test_02_a(self):
        print("正在执行 test_02_a 函数...")

    def test_02_b(self):
        print("正在执行 test_02_b 函数...")

请添加图片描述

验证执行顺序遵循

import pytest


@pytest.fixture(autouse=True, scope="function")
def fun():
    print("---fixture : function-前")
    yield
    print("---fixture : function-后")


@pytest.fixture(autouse=True, scope="class")
def fun2():
    print("---fixture : class-前")
    yield
    print("---fixture : class-后")


@pytest.fixture(autouse=True, scope="module")
def fun3():
    print("---fixture : module-前")
    yield
    print("---fixture : module-后")


@pytest.fixture(autouse=True, scope="package")
def fun4():
    print("---fixture : package-前")
    yield
    print("---fixture : package-后")


@pytest.fixture(autouse=True, scope="session")
def fun5():
    print("---fixture : session-前")
    yield
    print("---fixture : session-后")


def test_a():
    print("--------------test_a")


def test_b():
    print("--------------test_b")


class Test01Scope:
    def test_c(self):
        print("--------------test_c")

    def test_d(self):
        print("--------------test_d")

请添加图片描述

验证类中的fixture作用域

import pytest


def test_a():
    print("--------------test_a")


def test_b():
    print("--------------test_b")


class Test01Scope:
    def test_c(self):
        print("--------------test_c")

    def test_d(self):
        print("--------------test_d")

    @pytest.fixture(autouse=True, scope="function")
    def fun(self):
        print("---fixture : function-前")
        yield
        print("---fixture : function-后")

    @pytest.fixture(autouse=True, scope="class")
    def fun2(self):
        print("---fixture : class-前")
        yield
        print("---fixture : class-后")

    @pytest.fixture(autouse=True, scope="module")
    def fun3(self):
        print("---fixture : module-前")
        yield
        print("---fixture : module-后")

    @pytest.fixture(autouse=True, scope="package")
    def fun4(self):
        print("---fixture : package-前")
        yield
        print("---fixture : package-后")

    @pytest.fixture(autouse=True, scope="session")
    def fun5(self):
        print("---fixture : session-前")
        yield
        print("---fixture : session-后")

请添加图片描述

验证重名fixture作用域

import pytest
 
def test_a():
    print("--------------test_a")
 
def test_b():
    print("--------------test_b")
 
 
@pytest.fixture(autouse=True, scope="function")
def fun():
    print("---fixture : function-前")
    yield
    print("---fixture : function-后")
 
 
@pytest.fixture(autouse=True, scope="class")
def fun2():
    print("---fixture : class-前")
    yield
    print("---fixture : class-后")
 
 
@pytest.fixture(autouse=True, scope="module")
def fun3():
    print("---fixture : module-前")
    yield
    print("---fixture : module-后")
 
 
@pytest.fixture(autouse=True, scope="package")
def fun4():
    print("---fixture : package-前")
    yield
    print("---fixture : package-后")
 
 
@pytest.fixture(autouse=True, scope="session")
def fun5():
    print("---fixture : session-前")
    yield
    print("---fixture : session-后")
 
class Test01Scope:
    def test_c(self):
        print("--------------test_c")
 
    def test_d(self):
        print("--------------test_d")
 
    @pytest.fixture(autouse=True, scope="function")
    def fun(self):
        print("---fixture : function-前(类中)")
        yield
        print("---fixture : function-后(类中)")
 
    @pytest.fixture(autouse=True, scope="class")
    def fun2(self):
        print("---fixture : class-前(类中)")
        yield
        print("---fixture : class-后(类中)")
 
    @pytest.fixture(autouse=True, scope="module")
    def fun3(self):
        print("---fixture : module-前(类中)")
        yield
        print("---fixture : module-后(类中)")
 
    @pytest.fixture(autouse=True, scope="package")
    def fun4(self):
        print("---fixture : package-前(类中)")
        yield
        print("---fixture : package-后(类中)")
 
    @pytest.fixture(autouse=True, scope="session")
    def fun5(self):
        print("---fixture : session-前(类中)")
        yield
        print("---fixture : session-后(类中)")

请添加图片描述

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

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

相关文章

TMS320F280049 EPWM模块--PC子模块(5)

下图是PC子模块和其他子模块的联系图。可以看出,PC接收DB的输出,然后处理后给到TZ。 下图是PC子模块的内部框图。可以看到: 1)PC子模块功能可以被bypass; 2)one shot和divider的时钟是epwm时钟的8分频&am…

秋招数据库学习2(20240408-20240412共10道)

由于感觉数据库难度可能暂时面试用不到,就先不刷啦 20240408 1.从不订购的客户 SELECT Name AS Customers FROM Customers C LEFT JOIN Orders O ON C.Id O.CustomerId WHERE CustomerId is nullselect customers.name as Customers from Customers wher…

购物车实现

目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一:存储到数据库 性能存在瓶颈方式二:前端本地存储 localstorage在浏览器中存储 key/value 对,没有过期时间。s…

什么是电子巡查系统?

电子巡检系统,通常又被叫做设备巡检系统,一种利用现代化技术进行设备管理和维护的系统。 通过结合软件应用程序、移动设备和云端服务,设备巡检系统能够实现对设备的全面监测、定位和记录。它使得设备管理人员能够轻松地安排、执行和跟踪设备…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿,用于记录和管理个人、机构或组织的联系方式,如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

数据结构(算法)

总结,建议看EXCEL的《算法》页签,不然感觉有点乱 备注原理/步骤时间复杂度空间复杂度串的应用模式匹配简单/暴力O(mn) KMP  O(mn) 树的应用树哈夫曼树1、带权路径长度WPL 2、外部排序-最佳归并树1、哈夫曼树的度,只有0和m(m叉…

Linux——十个槽位,RWX

Linux——RWX 十个槽位 - 表示文件 d 表示文件夹 l 表示软链接 r权,针对文件可以查看文件内容 针对文件夹,可以查看文件夹内容,如ls命令 w权,针对表示可以修改此文件 针对文件夹,可以在文件夹内&#…

深入理解k8s kube-proxy

1、概述 我觉得只要大家知道kube-proxy是用来配置网络规则的而不是转发流量的,真正的流量由iptables/ipvs来转发就可以了。 网络是k8s的一个关键部分。理解k8s中网络组件如何工作可以帮助更好的设计和配置我们的应用。 kube-proxy就是K8s网络的核心组件。它把我们…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处,是节点中有且只有一个开始节点和终端节点。按这种关系,可以把它们的所有…

选择正确的Go Module Path

最近我在查看项目代码时,注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法,相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为module path,但这…

使用快捷回复软件的好处

在现代的客服工作中,尤其是店铺大促期间,咨询量的激增往往让客服人员应接不暇。即使打字速度再快,也难以跟上源源不断的客流。想应对这样的情况,快捷回复软件就非常适合客服人员了。 以我个人正在使用的客服宝为例,我想…

(Java)数据结构——图(第五节)Kruskal的实现最小生成树(MST)

前言 本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。 Kruskal算法(Kruskal的实现原理) Kruskal算法的原理: 就是每次取最小的边,看看是不是与已经选择的构成回路&#x…

面向对象设计原则实验“依赖倒置原则”

高层模块不应该依赖于低层模块。二者都应该依赖于抽象。抽象不应该依赖于细节。细节应该依赖于抽象。 (开闭原则、里氏代换原则和依赖倒转原则的三个实例很相似,原因是它之间的关系很紧密,在实现很多重构时通常需要同时使用这三个原则。开闭…

计算机网络-TCP断开连接阶段错误应对机制

连接断开阶段 四次挥手机制:TCP连接的断开需要四次挥手,这是因为双方都需要独立地关闭数据传输。第二次和第三次挥手不能合并,因为在回复第二次挥手的时候,可能还有数据没有接收完成,所以需要先回复ACK报文&#xff0c…

css面试题---场景应用

1、实现一个三角形 css一般用border属性实现三角形。 div {width: 0;height: 0;border: 100px solid;border-color: orange blue red green; } // 三角形一 div {width: 0;height: 0;border-top: 50px solid red;border-right: 50px solid transparent;border-left: 50px soli…

竞赛 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…

免费HTTPS证书在线申请

申请HTTPS证书的流程如下: 1. 确定证书类型: - 根据你的网站用途(如个人博客、企业官网、电商、金融等)和信任级别要求,选择适合的证书类型,如DV(域名验证)、OV(组织验证…

[论文笔记] Pai-megatron Qwen1.5-14B-CT 后预训练 踩坑记录

1. 模型权重转换报错 hf2mcore_1.5_v2.py 报错为: /mnt/cpfs/kexin/dlc_code/qwen1.5/PAI-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen/hf2mcore_1.5_v2.py 正确文件替换如下,更改了477行,删除了 args.hidden_size 这个维度,在tp>1时也支持转换: eli…

如何将h5网页打包成iOS苹果IPA文件

哈喽,大家好呀,淼淼又来和大家见面啦,最近有很多小伙伴都被难住了,是什么问题给他们都难住了呢,许多小伙伴都说想要把h5网页打包成iOS苹果IPA文件,但是却不知道具体怎么操作,是怎么样的一个流程…

强化学习的数学框架:马尔科夫决策过程 MDP

文章目录 1. 什么是马尔科夫过程2. 强化学习与MDP的关系3. 价值函数的贝尔曼方程[^1]3.1 状态价值函数的贝尔曼方程3.2 动作价值函数的贝尔曼方程3.3 价值函数递推关系的转换 4. 最优价值函数5. MDP计算最优值函数实例[^2] 1. 什么是马尔科夫过程 马尔科夫过程(Mar…