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
或者也可以用这种方法
热门推荐
柏林墙背后的故事:一段分裂与统一的历史
一文了解地中海贫血:定义、症状、遗传规律及预防措施
明清时期的科举制度:必须经过官学教育后才能参加乡试吗?
“三伏天”燃脂火热 年轻人把握健身黄金期
陷波器的理论分析
现代社会中的大男子主义现象(揭示大男子主义的具体表现及其对社会的影响)
房贷提前还款需还利息吗?了解房贷提前还款流程和注意事项
揭秘橄榄的多变味道,从生食到腌制的味觉探索
深度探索无锡旅游必去景点与美食指南,打造难忘江南之旅
澳门博监局辟谣网上六合彩谣言 提醒市民远离非法博彩
电力配电知识:高压柜三段式过电流保护机制详解
紫微斗数看感情恋爱:夫妻宫星象解析
瓢虫幼虫通过“窃取”入侵昆虫的毒素,作为防御武器
如何缓解白天犯困打瞌睡?
如何监控项目执行情况
五一·进莞来 | 解锁多个全新打卡点!松山湖科学公园五一开放新场景迎客
同样是医保参保人,为什么报销比例不一样?
连续禁食7天,身体会怎么变化?《自然》子刊揭秘最新研究数据
动画十二法则:动画制作的黄金准则
一个玉米的热量是多少 减肥怎么吃玉米
戏里戏外的人生交错——评电影《热辣滚烫》
算命的好处与坏处
B超报告说有胆结石,为啥 CT检查又说没有呢?让我们“医”探究竟
解梦:梦到被人追杀是怎么回事?
急性肠胃炎能吃什么食物和水果好消化
腋下淋巴结的治疗方法
经济学|认识庞氏骗局
江西女监:巧用分级处遇 执法更有温度
卖家不发货怎么办?教你依法维权
秦昭襄王——雄才大略的一代英主