pytest如何在类的方法之间共享变量?
创作时间:
作者:
@小白创作中心
pytest如何在类的方法之间共享变量?
引用
CSDN
1.
https://blog.csdn.net/seanyang_/article/details/136285056
在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
@classmethod
def 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
或者也可以用这种方法
热门推荐
老师给学生的10个心理解压方法,建议收藏
作业总是做不完?尖子生都是这样高效完成作业的
得过新冠的人,更容易得肺结节?成都普济中医杨成平的专业解析
“企业号”:开创核动力航母新纪元的传奇战舰
中船重工核动力技术突破!中国核动力航母指日可待
揭秘核动力航母:如何用核反应堆驱动巨舰?
超跌股反弹在即?这些筛选方法值得关注!
科技与医药:超跌股投资机会大揭秘
剁椒鱼头安全吃法大揭秘!你get了吗?
云浮新兴:亲子花灯制作点亮元宵节文化传承
高端装备制造领域的院士专家有哪些?
作文指导帮:怎么写好场景描写和场面描写
心脏病的早期信号:如何识别和预防
小规模高价值数据集:2024年AI预测新宠
李大妈的心路历程:心脏病患者的自我救赎
妙佑医疗国际推荐:预防心脏病最佳饮食方案
AI+卫星遥感:给地球装上“智慧大脑”
预测性维护:工业4.0时代的智能维护革命
如何快速发现庄家介入的黑马股?
怎么有效识别股票市场中的小票特征?识别后如何进行投资决策?
探究中国古代的戒指,戒指的古代历史,以及戒指的文化影响
《甲午风云》:邓世昌的英雄形象与甲午战争的历史反思
甲午海战130周年:重温历史的回响
从反派到英雄:甲午战争电影中刘步蟾形象的反转
黄海海战:北洋水师的战术之谜
六爻择吉:国庆结婚最佳良辰揭晓!
八字合婚择日:科学还是迷信?
心房颤动最新诊疗指南发布!四大亮点值得关注
智能手表教你识别异常心率
跨文化交流中的翻译小窍门:从误解到理解