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
或者也可以用这种方法
热门推荐
免疫细胞的种类和作用:守护健康的“军队”
【免疫细胞】最全科普!看完这篇你就懂了
推动甲功筛查体检常态化 早筛早诊守护“生命腺”健康
三河燕郊商户被要求招牌禁用红蓝黑三色,有蜜雪冰城已变绿
什么是电池能量密度
如何进行有效复习?提升记忆力和理解力的方法有哪些?
应力应变曲线分析:深入探索材料力学性能的奥秘
一星期不洗毛巾含菌量如坑渠!必学5招洗毛巾+消毒去味方法
TNC草地保护案例 | 可持续放牧管理
狼人杀七人局攻略:如何巧妙分配角色与配置玩法?
细胞凋亡检测十八法
在Photoshop中轻松掌握渐变效果制作技巧与应用方法
婚姻中的沟通艺术:如何建立和谐的伴侣关系
讲透逻辑学:四个逻辑基本规律
上海一日游去什么地方比较好?上海一日游最佳景点、路线与攻略
澳元汇率波动受哪些因素影响?如何应对这种波动?
澳大利亚消费者信心不稳 澳元波动率回落
王者荣耀新手攻略:玩法技巧与团队协作指南
研究发现:经常用糙米当主食的人,不出半年,身体或有4大改善
算生辰八字看五行缺什么 生辰八字测五行
手机系统升级指南:如何轻松了解并检查安卓系统更新?
从五育并举到五育融合:理论、实践与案例分析
韶关篇 | 国庆亲子游去哪里?大脚丫小脚丫丈量每一寸土地
广东韶关旅游必去十大景点,你去过几个?
我国燃油车行业分析:销量降幅缩小 油电同权带来市场新机遇
如何运用声音技巧展现个人魅力并影响沟通效果?
银鱼蒸蛋嫩滑秘诀,保姆级教程助你一次成功!
网页设计中字号大小的选择指南
MySQL表设计经验汇总篇
程序为什么要初始化?从变量到硬件的全面解析