问答 【pytest】setup_class 上为什么不能使用 fixture

link · 2022年08月24日 · 最后由 郭有权 回复于 2022年10月18日 · 11210 次阅读

有一个 Device 对象,我只想在这个测试类中实例化一次,并且让测试类里面的每个测试方法都能使用

我的 conftest.py 是这样的

然后我将这个方法在 setup_class 中使用,想存为变量,在测试方法中打印出来

抛出了异常

很疑惑为什么不能在 setup_class 不能使用
但是我在测试方法上使用则没问题

控制台输出正常

请问假如想要这样实现应该以什么样的方式

共收到 11 条回复 时间 点赞

conftest.py 使用 yield 关键字,不是 return

yield 不香么?

简单说就是并不是所有的方法都能使用 fixture 作为参数。
具体的作用域 pytest 源码里的注释里有写,可以参考。
另外为什么还要有 setup_class 呢,都用 fixture 不就没这问题了。

类似 setup_class 这样的前后置不允许传参,用例层调用 driver
def test_008(self, connectDevice):
pass

没懂 你在 fixture 中加个 autouse=True,就可以在每个 test_case 里直接调 get_device_object 了啊,每个 class 只执行了一次 fixture,这样返回的实例其实都是同一个的

link #6 · 2022年08月25日 Author

感谢各位大佬的指导,发现 fixture 推崇的是 不使用 setup 和 teardown 等方法,
问题已经解决

还有一个疑惑,网上找了半天没有找到答案
假如 fixture 使用了 yield 关键字,返回了一个 Device 对象

在用例中调用 fixture 方法

但是这个返回值是有类型的 ()

得到了返回值却点不了方法(没有提示😭 )怎么样才能出提示

link 回复

你可以在你获取返回值的地方显示的标注它的类型

难道没发现 setup_class 方法少一个类装饰器


这个问题你解决了吗 我也遇到了

古一 回复


这个错误你解决了吗 我也遇到了

学习下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册