pytest自动化中关于使用fixture是否影响用例的独立性

第一个问题:难道使用fixture 会影响用例独立吗?

✅ 简单回答:
使用 fixture ≠ 不独立。
只要你的 fixture 是每次测试都能自己运行、自己产生数据的,那么测试用例依然是“逻辑独立”的。

✅ 怎么判断 fixture 是否影响独立性?

情况是否影响独立性说明
fixture 中 硬编码共享数据(如共享 token)❌ 是耦合的多个用例依赖同一数据,顺序或状态会影响结果
fixture 每次调用都能 重新生成独立数据✅ 不影响比如每个测试都生成新 token、新用户
fixture 被多个用例共享,且包含有状态操作❌ 可能影响比如 fixture 中做了前置清理,多个测试共享它就有影响
fixture 被一个用例专用✅ 安全就像把准备步骤封装起来,依然独立

📌 示例一:✅ 独立的 fixture(没问题)

pythonimport pytest
import requests@pytest.fixture
def valid_token():# 每次都调用登录接口,获取新 tokenresponse = requests.post("http://example.com/api/login", json={"username": "testuser","password": "123456"})assert response.status_code == 200return response.json()["token"]def test_user_info(valid_token):headers = {"Authorization": f"Bearer {valid_token}"}resp = requests.get("http://example.com/api/user/info", headers=headers)assert resp.status_code == 200

✔️ 这个 valid_token fixture 每次都是“自给自足”的,不依赖其他测试状态,所以仍然是独立用例。

⚠️ 示例二:❌ 有耦合风险的 fixture

python# 假设 login_fixture 中手动生成了 token 或写死一个 token
@pytest.fixture(scope="session")
def shared_token():return "abc1234567"  # 固定写死,或者由前置用例创建def test_user_info(shared_token):...

这个 shared_token fixture:

  • 不一定来自当前测试生成

  • 可能是别的用例产生或初始化时产生的

    🛑 这种就存在耦合风险。如果别的地方修改了 token 或状态,可能影响这个用例。

✅ 最佳实践建议:

做法推荐程度理由
每个用例内部写登录逻辑👍 简单但冗余少量可接受✅ 保证测试完全独立,无需依赖外部状态或 fixture,适合初学或用例量较少时
用 fixture 封装登录,但每次自动重新登录✅ 最推荐✅ 实现代码复用 + 独立性兼顾,每个用例拿到的 token 都是最新、唯一、干净的
共享全局 token、session 作为 fixture⚠️ 仅限于性能优化场景,否则不推荐⚠️ 存在用例状态耦合、测试顺序依赖等风险,若 token 被修改或过期会影响所有用例

📌 总结一句话:

只要 fixture 是“每个用例都能独立用”的工具,它就是帮助测试保持独立的;只有当它变成“多个测试共用的状态容器”,才会破坏独立性。

第二个问题:那scope="session"这种级别的都是耦合的吗?

✅ 简短回答:
不是所有 scope=“session” 的 fixture 都导致耦合,关键在于你放了什么内容进去。

🧠 深入理解:fixture 的 scope 只是控制“生命周期”,不等于是否“耦合”。

scope 值生命周期举例
“function”每个用例都执行一次(默认)最独立、最干净
“class”每个类只执行一次类内测试共享
“module”每个测试文件只执行一次跨函数共享
“session”整个测试执行过程只执行一次所有用例共享,最广

✅ 所以:是否“耦合”,取决于 fixture 内部内容是否有状态 / 会变化 / 受上下文影响

📌 下面通过具体例子来解释:

✅ 安全的 session 级别 fixture(无耦合)

python# 这是一个静态配置类 fixture,和用例无状态相关
@pytest.fixture(scope="session")
def base_url():return "http://example.com/api"

✔️ 这个不会耦合,因为它只是一个静态值,多个用例共享没有问题。

⚠️ 有耦合风险的 session 级别 fixture(含状态)

python@pytest.fixture(scope="session")
def shared_token():# 登录一次,所有用例共用resp = requests.post("http://example.com/api/login", json={"username": "testuser", "password": "123456"})return resp.json()["token"]

🛑 如果某个测试改变了用户状态(比如禁用账号、修改密码),其它测试就会失败。这就是“隐性耦合”。

✅ 推荐做法(平衡独立性 & 性能):

✅ 方案一:默认使用 function scope,保持测试独立性

python@pytest.fixture
def fresh_token():# 每个用例登录一次,独立、干净...

✅ 方案二:使用 session,但只放“无状态的共享配置”

python@pytest.fixture(scope="session")
def env_config():return {"base_url": "http://example.com/api","headers": {"Content-Type": "application/json"}}

🔚 总结一句话:

scope=“session” 本身不是坏事,但如果 fixture 中包含用户态、系统态、会变的内容,就可能导致耦合问题。配置类 OK,状态类要谨慎。

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

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

相关文章

C++计算 n! 中末尾零的数量

* 详细说明* 给定一个整数作为输入。目标是找出该数的阶乘结果中末尾零的数量。 一个数 N 的阶乘是范围 [1, N] 内所有数的乘积。* * 我们知道,只有当一个数是 10 的倍数或者有因数对 (2, 5) 时,才会产生末尾零。 在任何大于 5 的数的阶乘中,…

推荐系统/业务,相关知识/概念2

一、漫画库更新大量新作品,如何融入推荐系统? 参考答案: 快速提取新作品特征:除基础属性外,利用自然语言处理技术提取漫画简介关键词等丰富特征向量,分析情节、角色设定等深层次特征结合物品画像体系分类…

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别:使用PyTorch构建MNIST分类器 在这篇文章中,我将引导你通过使用PyTorch框架构建一个简单的神经网络模型,用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集,包含了60,000张训练图像和10,000张…

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分) 一、马尔可夫决策过程二、Q表格三、免模型预测1. 蒙特卡洛策略评估1) 动态规划方法和蒙特卡洛方法的差异 2. 时序差分2.1 时序差分误差2.2 时序差分方法的推广 3. 自举与采样…

c++_csp-j算法 (4)

迪克斯特拉() 介绍 迪克斯特拉算法(Dijkstra算法)是一种用于解决单源最短路径问题的经典算法,由荷兰计算机科学家艾兹赫尔迪克斯特拉(Edsger W. Dijkstra)于1956年提出。迪克斯特拉算法的基本思想是通过逐步扩展已经找到的最短路径集合,逐步更新节点到源节点的最短路…

(13)VTK C++开发示例 --- 透视变换

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 在VTK(Visualization Toolkit)中,vtkPerspectiveTransform 和 vtkTransform 都是…

深入探索Qt异步编程--从信号槽到Future

概述 在现代软件开发中,应用程序的响应速度和用户体验是至关重要的。尤其是在图形用户界面(GUI)应用中,长时间运行的任务如果直接在主线程执行会导致界面冻结,严重影响用户体验。 Qt提供了一系列工具和技术来帮助开发者实现异步编程,从而避免这些问题。本文将深入探讨Qt…

基于Python的图片/签名转CAD小工具开发方案

基于Python的图片/签名转CAD工具开发方案 一、项目背景 传统设计流程中,设计师常常需要将手写签名或扫描图纸转换为CAD格式。本文介绍如何利用Python快速开发图像矢量化工具,实现: 📷 图像自动预处理✏️ 轮廓精确提取⚙️ 参数…

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor

CangjieMagic框架:使用华为仓颉编程语言编写,专门用于开发AI Agent,支持鸿蒙、Windows、macOS、Linux等系统。 这篇文章剖析一下 CangjieMagic 框架中的 PlanReactExecutor。 1 PlanReactExecutor的工作原理 #mermaid-svg-OqJUCSoxZkzylbDY…

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板,以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络,而宽带通信系统正在努力满…

Java中 关于编译(Compilation)、类加载(Class Loading) 和 运行(Execution)的详细区别解析

以下是Java中 编译(Compilation)、类加载(Class Loading) 和 运行(Execution) 的详细区别解析: 1. 编译(Compilation) 定义 将Java源代码(.java文件&#x…

【KWDB 创作者计划】_深度学习篇---松科AI加速棒

文章目录 前言一、简介二、安装与配置硬件连接驱动安装软件环境配置三、使用步骤初始化设备调用SDK接口检测设备状态:集成到AI项目四、注意事项兼容性散热固件更新安全移除五、硬件架构与技术规格核心芯片专用AI处理器内存配置接口类型物理接口虚拟接口能效比散热设计六、软件…

如何清理Windows系统中已失效或已删除应用的默认打开方式设置

在使用Windows系统的过程中,我们可能会遇到一些问题:某些已卸载或失效的应用程序仍然出现在默认打开方式的列表中,这不仅显得杂乱,还可能影响我们快速找到正确的程序来打开文件。 如图,显示应用已经被geek强制删除&am…

NFC碰一碰发视频推广工具开发注意事项丨支持OEM搭建

随着线下门店短视频推广需求的爆发,基于NFC技术的“碰一碰发视频”推广工具成为商业热点。集星引擎在开发同类系统时,总结出六大核心开发注意事项,帮助技术团队与品牌方少走弯路,打造真正贴合商户需求的实用型工具: 一…

pgsql中使用jsonb的mybatis-plus和Spring Data JPA的配置

在pgsql中使用jsonb类型的数据时,实体对象要对其进行一些相关的配置,而mybatis和jpa中使用各不相同。 在项目中经常会结合 MyBatis-Plus 和 JPA 进行开发,MyBatis_plus对于操作数据更灵活,jpa可以自动建表,两者各取其…

kotlin + spirngboot3 + spring security6 配置登录与JWT

1. 导包 implementation("com.auth0:java-jwt:3.14.0") implementation("org.springframework.boot:spring-boot-starter-security")配置用户实体类 Entity Table(name "users") data class User(IdGeneratedValue(strategy GenerationType.I…

【JavaWeb后端开发03】MySQL入门

文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库(RDBMS)**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…

人工智能在智能家居中的应用与发展

随着人工智能(AI)技术的飞速发展,智能家居逐渐成为现代生活的重要组成部分。从智能语音助手到智能家电,AI正在改变我们与家居环境的互动方式,让生活更加便捷、舒适和高效。本文将探讨人工智能在智能家居中的应用现状、…

【EasyPan】项目常见问题解答(自用持续更新中…)

EasyPan 网盘项目介绍 一、项目概述 EasyPan 是一个基于 Vue3 SpringBoot 的网盘系统,支持文件存储、在线预览、分享协作及后台管理,技术栈涵盖主流前后端框架及中间件(MySQL、Redis、FFmpeg)。 二、核心功能模块 用户认证 注册…

4.1腾讯校招简历优化与自我介绍攻略:公式化表达+结构化呈现

腾讯校招简历优化与自我介绍攻略:公式化表达结构化呈现 在腾讯校招中,简历是敲开面试大门的第一块砖,自我介绍则是展现个人魅力的黄金30秒。本文结合腾讯面试官偏好,拆解简历撰写公式、自我介绍黄金结构及分岗位避坑指南&#xf…