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
或者也可以用这种方法
热门推荐
年货消费里的新春华章
当代老年人“沉迷”网络是好事?原来这么多年都误会了!
《楚乔传》钢丝露馅,《神雕侠侣》假山揭秘:古装剧里的"穿帮"趣事
盘点那些让人捧腹的穿帮镜头:《甄嬛传》VS《庆余年》
《泰坦尼克号》穿帮镜头大揭秘!你发现了吗?
琼台仙谷:上海周边亲子自驾游的绝佳去处!
上海周边亲子游精选:7个适合家庭游玩的宝藏地
四大社交平台寻人攻略:从功能到案例全解析
波士顿大学反思活动:个人成长与心理健康的新启示
健康教育:科学饮食新趋势
晨礼服 绅士的日间盛装
江西气候概况:四季分明,冬夏季长而春秋季短
商丘水激馍:600年历史传承的豫东名吃
吃鲤鱼有什么好处
普洱茶的七种冲泡方法
普洱茶养生
尾号字母限行的规则是什么?如何合理规划出行以避免限行影响?
遭遇车祸后的处理方法有哪些?如何避免车祸的发生?
用私家车、异地教练车学车?拒绝!
腹泻多久该看医生?妙佑医疗国际给出权威建议
腹泻严重?这些医学检测帮你搞定!
生脉饮与玉屏风散:不同功效与适用症状
基因诊断与治疗:从实验室到临床的科技革命
成都深度游:网红打卡地全攻略
九寨沟稻城亚丁:四川古迹探秘新宠
《甄嬛传》最新穿帮镜头大揭秘!
《庆余年》穿帮镜头大盘点:从手表到运动鞋,这些小细节你发现了吗?
心理测量技术:健康管理的新利器
腌牛肉,别再用盐和料酒,学学这招,牛肉不老不柴,滑嫩如水煮蛋
《奇侠大营救》:金筷长老与麒麟鼎的秘密