pytest中@pytest.fixture常用顺序function

ytest中@pytest.fixture用法讲解

    • 1、测试函数开始之前
    • 2、执行测试函数:
    • 3、测试函数结束后:

备注:内容来自chatGPT

在 pytest 中,@pytest.fixture 是一个非常强大的功能,用于设置测试所需的环境和状态。它可以通过 scope 参数控制其生命周期。以下是 scope=“function” 时的执行顺序以及一些详细解释。

scope 的类型

pytest.fixture 的 scope 参数可以有以下几种取值:

  • function:每个测试函数都会调用该 fixture。
  • class:每个测试类的实例共享该 fixture。
  • module:每个模块内的测试共享该 fixture。
  • session:整个测试会话共享该 fixture。
scope="function" 的执行顺序

当 scope 设置为 function 时,fixture 的执行顺序如下:

1、测试函数开始之前

@pytest.fixture 装饰器定义的 fixture 会在测试函数执行前被调用。
如果 fixture 依赖于其他 fixture,依赖的 fixture 会被先执行。

2、执行测试函数:

  • 一旦 fixture 被调用,控制流会转到被测试的函数。
  • 测试函数运行时,可以直接使用 fixture 的返回值。

3、测试函数结束后:

测试函数执行完毕后,fixture 代码中的清理代码会被执行(如果定义了 yield,则在 yield 后的代码会执行)。
图示
这里用文字描述一下顺序,图形化展示比较复杂,但我可以用一种更直观的方式来解释:

+-------------------+
|  Fixture Setup    | <--- 执行 @pytest.fixture 定义的代码
|  (setup code)     |
+-------------------+
         |
         V
+-------------------+
|   Test Function    | <--- 执行测试函数
|  (test code)      |
+-------------------+
         |
         V
+-------------------+
|  Fixture Teardown  | <--- 执行清理代码
|  (teardown code)   |
+-------------------+

例子
下面是一个示例,展示了如何使用 @pytest.fixture:

```bash
import pytest

@pytest.fixture(scope="function")
def sample_fixture():
    # setup code
    print("Setting up fixture")
    yield "data"  # 这里是 fixture 的返回值
    # teardown code
    print("Tearing down fixture")

def test_one(sample_fixture):
    print(f"Test One: {sample_fixture}")

def test_two(sample_fixture):
    print(f"Test Two: {sample_fixture}")

执行示例
运行上述代码时,你会看到以下输出,表明了执行顺序:

```python
Setting up fixture
Setting up fixture
Test One: data
Tearing down fixture
Setting up fixture
Test Two: data
Tearing down fixture

总结
scope=“function” 的 fixture 每个测试函数都会独立执行一次。

  • 在执行测试之前会先执行 setup 代码,测试执行后再执行 teardown 代码。
  • 如果有多个 fixture 互相依赖,pytest 会自动处理它们的执行顺序。

希望这能帮助你更好地理解 pytest.fixture 的执行顺序!如果你还有其他问题或者需要更详细的解释,随时告诉我。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang笔记_day08

Go面试题&#xff08;一&#xff09; 1、空切片 和 nil 切片 区别 空切片&#xff1a; 空切片是指长度和容量都为0的切片。它不包含任何元素&#xff0c;但仍然具有切片的容量属性。在Go语言中&#xff0c;可以使用内置的make函数创建一个空切片&#xff0c;例如&#xff1a;…

活体人脸识别技术总结及实践

文章目录 1、背景2、人脸反伪装技术2.1 活体人脸识别常见模式2.2 学术上反伪装研究 3、工程实现3.1 Silent-Face3.2 Silent-Face模型转rknn3.3 Silent-Face模型的限制 1、背景 1.1 什么是活体检测&#xff1f; 在人脸识别之前&#xff0c;先判断一下屏幕前摄像头捕捉到的人脸是…

三、语法分析,《编译原理》(本科教学版),第2版

文章目录 一、Antlr-v4 设计语法分析器1.1 Cymbol.g41.1 antlr-v4 代码实现1.2 二义性1.2.1 悬空的else1.2.2 运算符结合性带来的二义性1.2.3 运算符的优先级带来的二义性 1.3 函数调用图1.4 walker 的 时机1.5 ParseTreeWalker 与 Listener 二、上下文无关法2.1 定义2.2 语义2…

Nginx超简洁知识:负载均衡-反向代理,动静分离,配置文件

首先介绍一下为什么需要nginx&#xff1f; 在低并发场景下&#xff08;也就是用户量特别少的情况下&#xff09;&#xff0c;我们只需要部署一台服务器就能满足用户数量少的需求。 但是如果用户量逐渐增多&#xff0c;只有一台服务器是不够的。于是我们需要部署多台服务器。 …

【算法】归并排序概念及例题运用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

linux链接、目标文件全解析

内容目录 内容目录 链接 1. 静态链接2. 目标文件3. 可重定位目标文件4. 符号和符号表5. 符号解析 5.1 链接器如何解析多重定义的符号5.2 与静态库链接5.3 链接器如何使用静态库来解析引用 6. 重定位 6.1 重定位条目 - 6.2 重定位符号引用 6.2.1 重定位PC相对引用6.2.2 重定位…

计算机系统的层次

目录 计算机系统的层次ISA&#xff08;指令集体系结构&#xff09; 计算机系统的层次 计算机硬件是基础指令集体系结构&#xff1a;将硬件的功能封装从指令供软件使用操作系统&#xff1a;提供人机交互界面、提供服务功能的内核例程语言处理系统&#xff1a; 语言处理程序&…

群晖通过 Docker 安装 GitLab

Docker 配置容器步骤都是大同小异的&#xff0c;可以参考&#xff1a; 群晖通过 Docker 安装 Gitea-CSDN博客 1. 在 Docker 文件夹中创建 GitLab&#xff0c;并创建子文件夹 2. 设置权限 3. 打开 Docker 应用&#xff0c;并在注册表搜索 gitlab-ce 4. 选择 gitlab-ce 映像运行…

什么是不同类型的微服务测试?

大家好&#xff0c;我是锋哥。今天分享关于【什么是不同类型的微服务测试&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 什么是不同类型的微服务测试&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 微服务架构中的测试可以分为多种类…

多尺度建模:从理论到实践的深入探讨

#1024程序员节 | 征文# 引言 在现代科学与工程中&#xff0c;很多现象和过程在不同的空间和时间尺度上展现出复杂性。因此&#xff0c;能够有效地进行多尺度建模&#xff0c;已经成为了许多领域&#xff08;如物理、生物、工程、环境科学等&#xff09;研究的一个重要方向。本…

vue后台管理系统从0到1(5)

文章目录 vue后台管理系统从0到1&#xff08;5&#xff09;完善侧边栏修改bug渲染header导航栏 vue后台管理系统从0到1&#xff08;5&#xff09; 接上一期&#xff0c;我们需要完善我们的侧边狼 完善侧边栏 我们在 element 组件中可以看见&#xff0c;这一个侧边栏是符合我们…

【操作系统】06.进程控制

一、进程创建 1.1 认识fork函数 在linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核将 分配新的内存块和内核数据结构…

Aspose.PDF功能演示:使用 JavaScript 从 PDF 中提取文本

在数据提取、业务文档自动化和文本挖掘方面&#xff0c;使用 JavaScript 从PDF中提取文本非常有用。它允许开发人员自动执行从 PDF 收集信息的过程&#xff0c;从而显著提高处理大量文档的生产力和效率。在这篇博文中&#xff0c;我们将学习如何使用 JavaScript 从 PDF 中提取文…

人工智能的未来应用与发展前景

随着人工智能&#xff08;AI&#xff09;技术的快速进步&#xff0c;我们正亲历着它在各行各业中带来的巨大变革。无论是医疗、企业管理&#xff0c;还是日常生活&#xff0c;AI 技术都在改变着我们的工作和生活方式。那么&#xff0c;人工智能的应用前景究竟如何&#xff1f;它…

【消息队列】RabbitMQ实现消费者组机制

目录 1. RabbitMQ 的 发布订阅模式 2. GRPC 服务间的实体同步 2.1 生产者服务 2.2 消费者服务 3. 可靠性 3.1 生产者丢失消息 3.2 消费者丢失消息 3.3 RabbitMQ 中间件丢失消息 1. RabbitMQ 的 发布订阅模式 https://www.rabbitmq.com/tutorials/tutorial-three-go P 生…

winUI3 c++ 入门 2、 样式

目录 一、winUI3 基本概念及样式 1、边距 2、如何使用样式 1)、布局控件内定义样式 2)、APP.xmal定义全局样式 3)、单独的样式文件 3.1)、新增字典资源 xmal 3.2)、在里面设置样式 3.3)、引用样式 3、更多样式修改 1)、修改默认属性 2)、修改所有的默认颜色…

垃圾收集器与内存分配机制(一)

目录 一、为什么我们要去了解垃圾收集和内存分配 二、对象已死&#xff1f; 1. 引用计数算法 2. 可达性分析算法 3. 再谈引用 4. 生存还是死亡 5. 回收方法区 三、垃圾收集算法 1. 简介 2. 分代收集理论 2.1. 弱分代/强分代假说 2.2. 前面两代假说的缺陷 3. 标记-清…

智能去毛刺:2D视觉引导机器人如何重塑制造业未来

机器人技术已经深入到各个工业领域中&#xff0c;为制造业带来了前所未有的变革。其中&#xff0c;2D视觉引导机器人技术以其精准、高效的特点&#xff0c;在去毛刺工艺中发挥着越来越重要的作用。本文将为您介绍2D视觉引导机器人技术的基本原理及其在去毛刺工艺中的应用&#…

blender 理解 积木组合 动画制作 学习笔记

一、学习blender视频教程链接 案例2&#xff1a;积木组合_动画制作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?vd_sourced0ea58f1127eed138a4ba5421c577eb1&p10&spm_id_from333.788.videopod.episodes 二、说明 之前已经学习了如何制作积木组…

20 Shell Script输入与输出

标出输入、标准输出、错误输出 一、程序的基本三个IO流 一&#xff09;文件描述符 ​ 任何程序在Linux系统中都有3个基本的文件描述符 ​ 比如: ​ cd/proc/$$/fd ​ 进入当前shell程序对于内核在文件系统的映射目录中: [rootlocalhost ~]# cd /proc/$$/fd [rootlocalhos…