pytest的fixture梳理
fixture特性夹具是在测试中用于提供共享资源、设置测试环境或模拟行为的工具。0、fixture的返回值0.1 核心结论无论 fixture 是否有返回值fixture 内部的函数都会完整执行。fixture 的所有调用都返回其返回值而不是函数本身。无论使用return、yield、无返回值返回None还是闭包模式测试中通过参数名获取的都是 fixture 的返回值。0.2 四种常用返回值模式0.2.1 return 返回值最常用importpytestpytest.fixturedefuser():return{name:张三,age:20}deftest_user(user):# user 是字典不是函数assertuser[name]张三assertuser[age]200.2.2 yield 返回值带清理importpytestpytest.fixturedefdb():print(连接数据库)conn{status:connected}yieldconn# 返回给测试print(关闭数据库)deftest_db(db):# db 是字典测试结束后自动清理assertdb[status]connected0.2.3 无返回值返回 Noneimportpytestpytest.fixturedefsetup():print(执行设置)# 没有 return默认返回 Nonedeftest_setup(setup):# setup 是 NoneassertsetupisNone0.2.4 闭包/工厂模式返回函数往fixture传参importpytestpytest.fixture(scopefunction)defprepared_patient(device_info,patient_login_page,studio_binding_page,package_detail_page):前置步骤启动微信 → 哈瑞特健康 → 管理计划 → 登录(手机号验证码) → 我的 → 扫一扫绑定工作室 → 推荐服务包详情 返回可调用对象传入 (phone,) 后执行def_prepare(phone,patient_info):log.info(f测试设备信息:{device_info})log.info(f开始测试患者端购买流程:{phone})patient_login_page.start_wechat(stopTrue)assertpatient_login_page.is_wechat_running(),微信启动失败patient_login_page.navigate_to_health()patient_login_page.login(phone)studio_binding_page.bind_studio()package_detail_page.open_package_detail(patient_info)return_prepare测试用例就可以往fixture里面传参 如phone patient_info 等参数对比总结模式写法测试中获取的值调用方式returnreturn valuevalue直接使用yieldyield valuevalue直接使用自动清理无返回值无 returnNone值永远为 None闭包/工厂return function函数对象调用函数获取新对象1. 可以重复使用多个用例可以使用同一个fixture2. 一个测试用例可以使用多个装置importpytest# Arrangepytest.fixturedeffirst_entry():returna# Arrangepytest.fixturedefsecond_entry():return2# Arrangepytest.fixturedeforder(first_entry,second_entry):return[first_entry,second_entry]2.1 如果多个装置存在yield,yield前先进先出yield后则是先进后出importpytestpytest.fixturedefa():print(hello)yieldprint(this is a)pytest.fixturedefb():print(world)yieldprint(this is b)deftest_demo(a,b):print(this is test_demo)if__name____main__:pytest.main([-sv,test1.py])3 需要self–把fixture写在函数内部classTestDeviceRecordManual:手动添加或更新心率血压记录_data_filedevice_record.yamlpytest.fixture(autouseTrue)def_setup(self,api_client):注入 api_client 到 self.apiself.apiapi_client4. fixfure多重嵌套如下append_first、test_string_only并且此fixture缓存即order如果一个 fixture 被请求了多次但它的作用范围是函数级别默认那么这个 fixture 在每次请求时都会重新执行一次而不会缓存。这会导致每次请求获得的数据都是独立的不受前一次请求的影响。所以一般不要使用缓存保证起独立性。所以一般不要使用缓存保证起独立性importpytest# Arrangepytest.fixturedeffirst_entry():returna# Arrangepytest.fixturedeforder():return[]# Actpytest.fixturedefappend_first(order,first_entry):order.append(first_entry)returnorderdeftest_string_only(append_first,order,first_entry):# Assertprint(append_first)# [a]print(order)# [a]assertorder[first_entry]pytest.main([-sv,test1.py])5自动使用fixture不需要请求设置和清理环境、全局配置例如数据库连接、日志设置等可以使用笔者用的不多importpytestpytest.fixturedeffirst_entry():returnapytest.fixture(autouseTrue)deforder():returnhello worlddeftest_a(order):print(order)pytest.main([-sv,test1.py])6 动态定义fixture范围7 安全拆卸的fixture8fixture的request9 fixture的参数化10 向fixture里传参此fixture带有参数get_time如何向fixture内传参呢pytest.fixture(scopefunction)defdust_alarm_param_single_more_80(get_time):崇州紫园get_time参数化生成告警get_timeget_time目前有两种方法实现1、通过pytest.mark.parametrize传参pytest.mark.parametrize(get_time,[(my_time.current_timestamp()[0] 1 * 3600)])函数def test_dust_alarm_001(cls, dust_alarm_init,get_time, dust_alarm_param_single_more_80)直接接受此参数注意一般将需要传入得参数get_time放在那个fixture的前面allure.feature(告警抑制)allure.story(夜间不告警)allure.title(0到085959之间产生告警 如1点崇州紫园省站超标80不告警)pytest.mark.parametrize(get_time,[(my_time.current_timestamp()[0]1*3600)])pytest.mark.debugdeftest_dust_alarm_001(cls,dust_alarm_init,get_time,dust_alarm_param_single_more_80):pass例子2pytest.mark.parametrize多次使用# conftest.pypytest.fixture(scopefunction)defillegal_alarm_init_test_illegal_sale_finished_sand(alarm_type):alarm_typealarm_type违规销售砂石成品料# 新加的5种类型print(alarm_type)del_sql1fdelete FROM alarm_dog WHERE type in ({alarm_type});print(del_sql1)try:db.delete(del_sql1)exceptExceptionase:log.error(e)可以看到成功打印出fixture的内容2、通过fixture传参把get_time写成一个fixture也可以实现这个fixture return一个数据即可如order会接收一个参数importpytest# Arrangepytest.fixturedeffirst_entry():print(hello)returna# Arrangepytest.fixturedeforder(first_entry):print(its ok)yieldfirst_entryprint(over)deftest_string_only(order):resultorderprint(result)assertresultapytest.main([-sv,1test.py]11 多重嵌套fixture时fixfure的作用域优先于fixture顺序存在以下fixturetest_demo(d, c, b, a):如果d,c,b,a都是function级别执行顺序应该是d,c,b,a由于是不同的范围因此按照范围大小执行顺序为及ab,c,d即session、module、class、functionimportpytest shipytest.fixture(scopesession)def a():print(my session)pytest.fixture(scopemodule)def b():print(my module)pytest.fixture(scopeclass)def c():print(my class)pytest.fixture(scopefunction)def d():print(my function)def test_demo(d,c,b,a): pass pytest.main([-sv,test1.py])

相关新闻

Qt creator在Windows下出现找不到“g++”问题(Cannot run compiler ‘g++‘. Output.)的解决方案(非网上无用的解决方法)Unity中创建新项目报错

Qt creator在Windows下出现找不到“g++”问题(Cannot run compiler ‘g++‘. Output.)的解决方案(非网上无用的解决方法)Unity中创建新项目报错

遇到的问题:之前使用QT一切正常,后来使用VS2022和VS2008去二次开发摄像头,最近又想重新用QT来做,没想到打开QT创建新的项目,无法创建,但是之前写好的qt工程项目可以正常运行。创建项目:报错ERRO…

2026/8/18 19:11:27 阅读更多 →
如何设计大型项目技术运营服务架构

如何设计大型项目技术运营服务架构

文章目录一、背景二、总体运行流程三、总体技术架构四、系统巡检服务(一)资产管理服务1、资源信息动态梳理2、应用信息采集和更新3、资源生命周期管理4、资产信息统计分析(二)每日巡检服务1、系统巡检2、接口拨测3、业务巡检4、资…

2026/8/18 19:10:27 阅读更多 →
FreeRTOS临界段:调度器锁与中断屏蔽的原理、选择与实战

FreeRTOS临界段:调度器锁与中断屏蔽的原理、选择与实战

1. 从一次诡异的“数据漂移”说起:为什么需要临界段? 最近在调试一个基于FreeRTOS的传感器数据采集系统时,遇到了一个让人头疼的问题。系统里有两个任务:一个高优先级任务 Task_Sensor 负责以100Hz的频率读取一个外部ADC的数值&…

2026/8/18 19:10:27 阅读更多 →

最新新闻

AI图像检测新范式:AgentFoX如何用LLM智能体融合多专家实现可解释取证

AI图像检测新范式:AgentFoX如何用LLM智能体融合多专家实现可解释取证

1. 项目概述:当AI生成图像以假乱真,我们如何“破案”? 最近几年,AI生成图像的技术发展得实在太快了。从早期的DeepDream那种充满迷幻色彩的“艺术创作”,到如今Midjourney、Stable Diffusion生成的足以媲美专业摄影和绘…

2026/8/18 21:59:15 阅读更多 →
从零构建医药知识图谱问答系统:数据爬虫、Neo4j存储与智能问答实战

从零构建医药知识图谱问答系统:数据爬虫、Neo4j存储与智能问答实战

最近在指导毕业设计选题时,发现很多同学对“知识图谱”项目既向往又畏惧。向往的是其技术栈丰富、成果可视化强、贴合前沿;畏惧的是流程长、环节多,从数据获取到最终应用,每一步都可能踩坑。特别是医药领域,数据来源复…

2026/8/18 21:59:15 阅读更多 →
CMake跨平台开发实战与HoRain云应用解析

CMake跨平台开发实战与HoRain云应用解析

1. HoRain云与CMake跨平台开发的价值解析 第一次接触HoRain云项目时,我就被它"一次编写,多端运行"的理念所吸引。这个基于CMake构建的跨平台框架,正在改变我们处理多平台部署的方式。作为从业十余年的开发者,我亲历过各…

2026/8/18 21:59:15 阅读更多 →
本地AI模型部署实战:从硬件选型到环境配置的完整指南

本地AI模型部署实战:从硬件选型到环境配置的完整指南

想在自己的电脑上跑个AI模型试试,结果刚打开教程,就被“CUDA”、“显存”、“Tensor Core”这些词劝退了?看着网上大神们流畅地运行各种大模型,自己却卡在环境配置的第一步,是不是觉得本地部署AI是个遥不可及的“高端”…

2026/8/18 21:59:15 阅读更多 →
中英文论文降AI率,BunnyScholar兼顾语义怎么处理

中英文论文降AI率,BunnyScholar兼顾语义怎么处理

中英文论文降AI率,BunnyScholar兼顾语义怎么处理很多同学的论文,既要有中文版,又要有英文摘要,甚至整篇都是英文。中文和英文的降 AI,方法有相同的地方,也有不一样的地方,很多同学处理起来顾此失…

2026/8/18 21:59:15 阅读更多 →
网易云NCM转MP3:ncmdump免费工具实测,拖一下几秒钟就出MP3

网易云NCM转MP3:ncmdump免费工具实测,拖一下几秒钟就出MP3

网易云NCM转MP3:ncmdump免费工具实测,拖一下几秒钟就出MP3 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 前阵子我换了台新手机,想把攒了好几年的歌一股脑搬过去。结果拷进U盘往新手机一插&#…

2026/8/18 21:58:14 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →