在编写 pytest 中,原本是每个测试用例都实例化一个页面对象,尝试改用类属性只实例化一次,如图所示:
这么改之后为什么 TestSearch 类就没有 search 属性了呢?
对此我又写了个 demo 测试,如图,用的 setup 初始化,可以用类属性,这里的差别在哪没想明白
问题已解决,将 fixture 的 scope 作用域改成默认的即可解决,至于原理还不太明白
pytest 类里面每次执行一个测试方法实际上都是初始化一个新的类实例,所以你类的实例属性实际上都是不同对象的
至于为什么 fixture function 级别可以,因为 function 是每个测试方法都会执行一遍,相当于每个测试方法执行之前传入执行了前置的 fixture 内容,他们是一个类实例,class 和 module 级别都是公用的,所以它是单独属于一个类实例,你可以打印每一个方法的 self,地址都是不一样的
你要在类里面初始化一次,可以使用类属性,而不是实例属性,类属性所有类实例共用
可以用 conftest 文件,不用自己去实例化,可以直接用