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
或者也可以用这种方法
热门推荐
黄百韬看出粟裕计谋,为何还是吃了败仗?淮海大战结局差点改变
上市公司高管薪资体系的最佳实践案例:来源与解决方案
中国著名十大古镇,最美古镇推荐!
河南赊店古镇:九座城门全国独有,央视还拍了专题片
传统对联文化简介:从历史渊源到现代应用
树干为什么要涂白?
为什么冬天我们经常能看到树干被刷上白色的石灰浆?
苗木为什么涂白?怎么涂?
备战公安边防学校:体能训练攻略
报考中国人民警察大学全攻略:条件、流程与前景详解
中国人民公安大学毕业生就业前景大揭秘
宋玉教你如何拒绝“登徒子”的标签
打卡芜湖古城,品味老濮凉粉
打卡芜湖古城:这些景点你不能错过!
芜湖古城:千年古邑焕发新生
广州新机场落户佛山:一座机场带来的机遇与变革
职场中如何与二姐夫相处?这些技巧让你游刃有余
如何用沟通技巧搞定二姐夫?
信用评分不再神秘,教你轻松掌握信用管理
如何优化信用卡使用
从“暴怒号”到“皇家方舟号”:英国航母的先驱之路
揭秘“伊丽莎白女王号”航母的黑科技:从燃气轮机到隐形战机
液氮速冻机:实现食品储存和运输的品控利器
降糖苦荞茶效果怎么样
在家也能做立记饭店招牌菜!
中华鲟养殖技术全解析
更稳产、更高产!一文详解现代设施水产养殖
2024年中国螺纹钢行业发展历程、产量、重点企业分析及未来前景
第七代伊兰特冬季省油秘籍:从5.2L到6.5L的实战经验
冬季开车省油,凡尔赛车主有妙招