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种传统冷食别忘了吃,聚民心,凝国魂,传承老传统
CSS表格格式化:border-collapse属性的应用
戚风蛋糕的眉眉角角
钇90治疗成肝癌治疗新利器 全国示范基地落户广州
帕金森病:认知障碍From PD-MCI to PDD
如何通过五个时间节点判断“全日制教育”
深入解析香港公司审计流程与最佳实践
40岁仍是顶流!2026会是C罗职业生涯终点?
出国劳务办理的详细注意事项
日职第8轮:东京绿茵队长缺阵,东京FC四场不进球
东京德比前瞻:FC东京客场小胜可期
七夕节的由来,七夕节的意义
十二花神寓意:从梅花到水仙,每一朵花都藏着独特的东方美学
深入解析,丙烯腈的毒性特性及其安全防范指南
西部计划Q&A全攻略:政策保障、就业支持、考研优惠等你了解
NBA又多发钱,下赛季工资帽又涨 10%,打工人的幸福天堂
伤口病程和愈合率:原因或结果?
债务转让的条件及法律效力有哪些要求?
超声波清洗机使用指南:合适的清洗物品及其处理方法
人格分裂:一种复杂的精神心理疾病