新手区 pytest 的 testcase 中如何使用类属性

墨妖 · 2021年11月01日 · 最后由 乍暖还寒 回复于 2021年11月01日 · 3473 次阅读

在编写 pytest 中,原本是每个测试用例都实例化一个页面对象,尝试改用类属性只实例化一次,如图所示:

这么改之后为什么 TestSearch 类就没有 search 属性了呢?

对此我又写了个 demo 测试,如图,用的 setup 初始化,可以用类属性,这里的差别在哪没想明白

共收到 3 条回复 时间 点赞

问题已解决,将 fixture 的 scope 作用域改成默认的即可解决,至于原理还不太明白

  1. pytest 类里面每次执行一个测试方法实际上都是初始化一个新的类实例,所以你类的实例属性实际上都是不同对象的

  2. 至于为什么 fixture function 级别可以,因为 function 是每个测试方法都会执行一遍,相当于每个测试方法执行之前传入执行了前置的 fixture 内容,他们是一个类实例,class 和 module 级别都是公用的,所以它是单独属于一个类实例,你可以打印每一个方法的 self,地址都是不一样的

  3. 你要在类里面初始化一次,可以使用类属性,而不是实例属性,类属性所有类实例共用

可以用 conftest 文件,不用自己去实例化,可以直接用

墨妖 关闭了讨论 11月03日 09:44
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册