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
或者也可以用这种方法
热门推荐
返程火车票购买难?这些提高购票成功率的功能一定要知道!
50-60岁的人去体检要查什么?这一项检查要重点关注
女性过了50岁,建议做这3项癌症筛查
环境胎教对胎儿发育的影响
广西梧州六大特色美食,第一种堪称“中国一绝”
金字塔之谜终于解开了吗?古人是如何建造的?
AI在创造还是毁掉音乐?一场技术与艺术的辩证之争
俄乌冲突两周年|引发军事变革的武器和技术②:无人机异军突起
从入门到影音!家庭智能灯光搭建全攻略,避坑指南+设备清单一次看懂
怎样选择台灯:打造舒适的家居照明
软件测试中出现bug如何分析
2025全明星赛观战指南:王鹤棣再次参赛 新赛制能否拯救正赛
丽江古城上演纳西勒巴舞展演:传承民族文化魅力
《易经》坤卦的主要思想
纳斯达克100指数投资攻略:估值分析与投资策略
干货!提高马拉松成绩的 6 种有效训练方法
为何我买的陈皮喝起来发苦?夏天喝陈皮的4大好处,看完你就懂了
在Photoshop中轻松制作立体效果的实用技巧与方法分享
如何防范网络安全图片
如何分析和判断一支连续亏损股票的投资价值和风险
PS磨皮的8种方法 Portraiture人像后期高效磨皮技法
揭秘:不同季节对犬的饲养管理
如何通过接口访问wiki数据库
五星级酒店与婚礼会所:完美婚礼场地的比较
为什么《唐人街探案》火了10年?
三角洲行动战役模式究竟是什么?这篇攻略告诉你
发生交通事故报警时需要说明哪些内容
中国学者揭示自身免疫性甲状腺疾病与重症肌无力存在因果关系
创建实用房车露营地的技巧
什麼是“摸頭殺”?2024年解讀與文化背景