当前位置: 首页 > news >正文

pytest如何在类的方法之间共享变量?

pytest中,setup_class是一个特殊的方法,它用于在类级别的测试开始之前设置一些初始化的状态。这个方法会在类中的任何测试方法执行之前只运行一次。

当你在setup_class中使用self来修改类属性时,你实际上是在修改类的一个实例属性。在Python中,类属性和实例属性是有所区别的:

  • 类属性是绑定到类本身的属性,通常可以通过类名直接访问(例如MyClass.my_class_attr)。
  • 实例属性是绑定到类的一个具体实例的属性,需要通过类的实例来访问(例如my_instance.my_instance_attr)。

当你在setup_class中使用self来设置属性时,你实际上是在设置实例属性。因为setup_class方法是一个实例方法(尽管它是在类级别上运行的),所以self引用的是类的一个临时实例。这意味着,任何通过这个self设置的属性都将成为这个实例的属性,而不是类的属性。

然而,由于setup_class在类级别的测试开始之前只运行一次,并且所有的测试方法都共享这个临时实例,所以任何在setup_class中设置的实例属性都将在所有的测试方法中可用,并且它们都会看到相同的值。

如果你想要在类级别上设置属性(即,希望所有实例共享相同的属性),你应该直接在类上设置属性,而不是在setup_class中使用self。例如:

class MyTestClass:my_class_attr = None@classmethoddef setup_class(cls):cls.my_class_attr = "some value"def test_method1(self):assert self.my_class_attr == "some value"def test_method2(self):assert self.my_class_attr == "some value"

在这个例子中,my_class_attr是一个类属性,我们在setup_class中直接修改它。因此,所有测试方法都能够访问到这个修改后的值。

总结:要想在pytest的类各个方法中共享变量,要么在setup里用self.属性设置变量,要么用cls.属性设置变量。
在其他方法中设置的变量,是不能共享的。
如下图,最后assert时,self.order_id是None
在这里插入图片描述
或者也可以用这种方法
在这里插入图片描述

http://www.lryc.cn/news/307474.html

相关文章:

  • 配置前端项目到 github-pages
  • VSCode使用教程
  • vscode——本地配置(C和C++环境配置)(2)
  • 【从零开始学习重要知识点 | 第一篇】快速了解什么是幂等性以及常见解决方案
  • Jvm之内存泄漏
  • 尚硅谷webpack5笔记2
  • 笔记本Win 10系统查看电池健康状况
  • 算法--动态规划(线性DP、区间DP)
  • 【ArcGIS】统计格网中不同土地利用类型占比
  • 算法竞赛实用板子
  • RPA中国 x UiPath | 第六届RPA极客挑战赛,3月16日上海开赛!
  • 算法打卡day5|哈希表篇01|Leetcode 242.有效的字母异位词 、19.删除链表的倒数第N个节点、202. 快乐数、1. 两数之和
  • 『python爬虫』xpath变化导致无法找到指定元素(持续更新中~)
  • 人大金仓数据库Kingbase服务SQL基础操作手册
  • 赎金信00
  • 如何运行github上的项目
  • 机器学习-02-机器学习算法分类以及在各行各业的应用
  • Java项目学习
  • npm run dev和npm run serve两个命令的区别
  • ui设计:利用即使设计设计出漂亮样式
  • [unity]lua热更新——个人复习笔记【侵删/有不足之处欢迎斧正】
  • Springboot日常总结-@RestController和@Controller的区别
  • MongoDB之客户端工具与核心概念及基本类型篇
  • Essential C++ 编程基础
  • 07 Qt自绘组件:图片预览小组件ImageViewer
  • Groovy(第九节) Groovy 之单元测试
  • gprMax3.0随机介质建模
  • 自动驾驶---行业发展及就业环境杂谈
  • Matlab 矩阵基础
  • TikTok矩阵系统的功能展示:深入解析与源代码分享!