Pytest之fixture的常见用法

文章目录

  • 1.前言
  • 2.使用fixture执行前置操作
  • 3.使用conftest共享fixture
  • 4.使用yield执行后置操作

1.前言

在pytest中,fixture是一个非常强大和灵活的功能,用于为测试函数提供固定的测试数据、测试环境或执行一些前置和后置操作等,
与setup和teardown类似。

2.使用fixture执行前置操作

示例:

import pytest@pytest.fixture()
def fixture():print('执行前置操作')def test_01(fixture):assert 1==1def test_02():assert 2==2if __name__ == '__main__':pytest.main()

运行结果中可以看到第一条测试用例执行时,输出了“执行前置操作”:
在这里插入图片描述

  • 定义fixture:使用@pytest.fixture装饰器来定义一个fixture函数。

注意测试用例中传递的fixture是将定义好的函数名传过去的

作用域:fixture的作用域决定了它在测试中的生命周期和应用范围,通过scope参数来指定,有以下几种常见的作用域:

  • function(默认):每个测试函数都会调用一次fixture。
  • class:每个测试类中的所有测试方法共享同一个fixture实例,在测试类的所有测试方法执行前创建,执行完后销毁。
  • module:在整个测试模块中只创建一次fixture实例,模块中的所有测试函数和测试类共享。
  • session:在整个测试会话期间只创建一次fixture实例,所有测试模块、测试类和测试函数都共享。

除了之外,可以通过params参数为fixture传递不同的参数值,实现参数化测试。

import pytest@pytest.fixture(params=[1, 2, 3])
def parameter_fixture(request):return request.paramdef test_parameterized(parameter_fixture):print(f"测试参数: {parameter_fixture}")assert parameter_fixture > 0
  • fixture函数中的变量名必须为request。

运行结果:
在这里插入图片描述

如果觉得每次使用fixture函数的时候都需要将fixture函数当参数传入测试用例中比较麻烦,可以在fixture

import pytest@pytest.fixture(autouse = True)
def test_fixture():print('执行前置操作')def test_01():assert 1==1def test_02():assert 2==2if __name__ == '__main__':pytest.main()

运行结果:
在这里插入图片描述

3.使用conftest共享fixture

在 pytest 中,conftest.py 是一个非常重要的文件,它主要用于在多个测试文件之间共享 fixture、钩子函数等,帮助组织和管理测试代码。
使用conftest.py注意事项:

  1. conftest.py为固定写法,不能修改名字
  2. 使用conftest.py文件方法无需倒入
  3. 位于项目的根目录,那么它定义的 fixture 和钩子函数对整个项目的测试文件都有效。
  4. 如果 conftest.py 位于某个子目录下,那么它定义的内容只对该子目录及其子目录下的测试文件有效。

示例:
创建conftest.py文件在根目录下,并输入以下内容

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service@pytest.fixture(scope='session')
def driver():driver = webdriver.Chrome()driver.maximize_window()return driver

创建一个文件测试conftest中fixture函数
代码如下:

import pytestdef test_01(driver):driver.get('https://www.baidu.com/')title = driver.titleassert title == '百度一下,你就知道'def test_02(driver):driver.get('https://www.bilibili.com/')url = driver.current_urlassert url == 'https://www.bilibili.com/'if __name__ == '__main__':pytest.main()

执行结果:
在这里插入图片描述
可以看出fixture函数成功运行了,但是上述代码中虽然有前置获取浏览器驱动的操作,但没有关闭浏览器驱动,虽然会自动关闭,但最好还是自己手动释放一下。如果想要执行后置操作,就需要使用yield

4.使用yield执行后置操作

在 pytest 的 fixture 函数里,yield 关键字用于分隔测试的前置和后置操作。在 yield 之前的代码会在测试用例执行前运行,起到初始化环境、准备数据等前置操作的作用;yield 之后的代码会在测试用例执行完毕后运行,用于清理资源、恢复环境等后置操作。

将conftest.py中代码修改一下:

@pytest.fixture(scope='session')
def driver():driver = webdriver.Chrome()driver.maximize_window()print('打开浏览器')yield driverprint('关闭浏览器')driver.quit()

注意这里是yield driver而不是return driver

  • 当 fixture 函数中使用 return driver 时,函数执行到 return 语句就会立即返回 driver 对象并终止函数的执行,不会再执行 return 语句之后的代码。
  • yield 关键字使 fixture 函数成为一个生成器函数。当执行到 yield driver 时,函数会暂停执行并返回 driver 对象给测试用例使用。当测试用例执行完毕后,fixture 函数会从 yield 语句的下一行继续执行。

再次执行刚才的测试用例
在这里插入图片描述
可以看到有输出语句,说明yield后面的代码被执行到了

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

植物大战僵尸金铲铲版 v1.1.6(windows+安卓)

游戏简介 《植物大战僵尸金铲铲版》是由“古见xzz”、“对不起贱笑了”、“是怪哉吖”等联合开发的民间魔改版本,融合了原版塔防玩法与《金铲铲之战》的自走棋元素,属于非官方同人作品。 游戏特点 合成升星机制:三个相同低星植物可合成更高…

Matplotlib基础知识总结

1、简介 安装使用pip install matplotlib命令即可; 2、基本绘图流程 3、pyplot基础语法 (1)创建画布与创建子图 figure语法说明:figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue)&#xff1…

实例分割 | yolov11训练自己的数据集

前言 因工作要求使用的都是yolov5系列的模型,今天学习一下最先进的yolov11,记录一下环境配置及训练过程。 1.项目下载及环境安装 源码位置:yolov11 可以看到,这里要求python版本大于等于3.8,我这里安装python3.10.…

【MongoDB】在Windows11下安装与使用

官网下载链接:Download MongoDB Community Server 官方参考文档:https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-windows/#std-label-install-mdb-community-windows 选择custom类型,其他默认 注意,此选…

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…

Python中文自然语言处理库SnowNLP

SnowNLP 介绍 SnowNLP 是一个基于 Python 的中文自然语言处理库,专为处理中文文本而设计。它受到 TextBlob 的启发,但与 TextBlob 不同的是,SnowNLP 没有使用 NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字…

windows共享文件夹到麒麟桌面操作系统操作步骤

此文档是将windows的共享文件夹在麒麟桌面操作系统里实现访问。该文档是以windows11+kylinos-2303为例编写。 1、在windows上新建文件夹 2、右击myshare文件夹,点击属性,在属性窗口中点击【共享】页签,点击【共享】 3、点击文本框后边的向下箭头,选择Everyone,后点击…

《Qt窗口动画实战:Qt实现呼吸灯效果》

Qt窗口动画实战:Qt实现呼吸灯效果 在嵌入式设备或桌面应用中,呼吸灯效果是一种常见且优雅的UI动画,常用于指示系统状态或吸引用户注意。本文将介绍如何使用Qt动画框架实现平滑的呼吸灯效果。 一、实现原理 利用Qt自带的动画框架来实现&…

JavaWeb基础专项复习6(2)——AJAX补充

目录 1、load(url, [data], [callback]) 1.1 语法 1.2概述 1.3参数 url,[data,[callback]]String,Map/String,CallbackV1.0 1.4示例 HTML 代码: jQuery 代码: 2、get(url, [data], [callback], [type]) 2.1 语法 2.2 概述 2.3 参数 url,[data],[callback],[type]St…

稀疏数组学习

稀疏数组(Sparse Array) 是一种用于压缩存储大量默认值(通常是 0)的数组的数据结构。它通过只存储非默认值的元素及其位置来节省空间。稀疏数组常用于存储矩阵或二维数组,尤其是当数组中大部分元素为默认值时。 稀疏数…

一、Vscode、Git、Github账号及个人访问令牌

一、Vscode下载、安装 1.Vscode 下载地址 2. Vscode安装 3.Vscode 配置C 安装插件 中文插件(安装后重启生效) C 扩展包 MinGw下载 MinGw蓝奏云下载链接,密码:64xamingw-64 官网—>下载时需要访问Github,需要挂梯子 配…

【 实战案例篇三】【某金融信息系统项目管理案例分析】

大家好,今天咱们来聊聊金融行业的信息系统项目管理。这个话题听起来可能有点专业,但别担心,我会尽量用大白话给大家讲清楚。金融行业的信息系统项目管理,说白了就是如何高效地管理那些复杂的IT项目,确保它们按时、按预算、按质量完成。咱们今天不仅会聊到一些理论,还会通…

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时,添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为,我们可以将已登录状态的Cookies存储起来,并在下次自动化测试或爬虫任务中直接加载这些Cookies,从而跳过登录步骤。 Cookies简介 …

Ansys Zemax | 使用衍射光学器件模拟增强现实 (AR) 系统的出瞳扩展器 (EPE):第 3 部分

附件下载 联系工作人员获取附件 在 OpticStudio 中使用 RCWA 工具为增强现实(AR)系统设置出瞳扩展器(EPE)的示例中,首先解释了 k空间中光栅的规划,并详细讨论了设置每个光栅的步骤。 介绍 本文是四篇文…

Acwing 哞叫时间II

6134. 哞叫时间II - AcWing题库 题目大意:统计数组中子序列abb的数量: 做法:从右往左枚举倒数第二个b,查前面出现过多少次a,查的方法(开一个数组left[x]来统计当前及前面出现过多少次x,cnt记录不同x的数量…

PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下

PyCharm中通过命令行执行pip命令下载到哪里了:虚拟环境目录下 在PyCharm中通过命令行执行pip命令安装工具包,包的下载位置取决于多种因素 虚拟环境 如果项目使用了虚拟环境(通常是推荐的做法): Windows:虚拟环境通常位于项目目录下的.venv文件夹(默认情况)或你指定…

基于 Ray 构建的机器学习平台

在当今的人工智能和机器学习领域,构建一个高效、可扩展且易于管理的机器学习平台是许多企业和研究机构面临的重大挑战。随着数据量的不断增长和模型复杂度的提高,传统的机器学习平台往往难以满足现代 AI 应用的需求。Ray,作为一个强大的分布式计算框架,为解决这些问题提供了…

C++ ++++++++++

初始C 注释 变量 常量 关键字 标识符命名规则 数据类型 C规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 整型 sizeof关键字 浮点型(实型) 有效位数保留七位,带小数点。 这个是保…

梯度下降法(Gradient Descent) -- 现代机器学习的血液

梯度下降法(Gradient Descent) – 现代机器学习的血液 梯度下降法是现代机器学习最核心的优化引擎。本文从数学原理、算法变种、应用场景到实践技巧,用三维可视化案例和代码实现揭示其内在逻辑,为你构建完整的认知体系。 优化算法 一、梯度下降法的定义…

VS Code 如何搭建CC++开发环境

VS Code 如何搭建C/C开发环境 文章目录 VS Code 如何搭建C/C开发环境1. VS Code是什么2. VS Code的下载和安装2.1 下载和安装2.2 环境的介绍 3. VS Code配置C/C开发环境3.1 下载和配置MinGW-w64编译器套件3.2 安装C/C插件3.3 重启VS Code 4. 在VS Code上编写C语言代码并编译成功…