本文系《pytest源码剖析》系列内容
18. nose
插件路径:_pytest.nose
实现的 hook
调用的 hook
无
定义的 fixture
无
插件功能
执行 class 中的用例时,自动调用前置setup和后置teardown方法
代码片段
@hookimpl(trylast=True)def pytest_runtest_setup(item: Item) -> None: if not isinstance(item, Function): return # Don't do nose style setup/teardown on direct unittest style classes. if isinstance(item, TestCaseFunction): return
func = item
call_optional(func.obj, "setup", func.nodeid) func.addfinalizer(lambda: call_optional(func.obj, "teardown", func.nodeid))
unittest 风格的 class 用例不会被本插件处理
nose 风格的前置后置方法,尝试以 fixture 的风格执行
简评
本插件是一个弃用插件,在pytest 8.0中被彻底移除,几乎没有实用性,
对我们而言唯一的收获是,在pytest中创建基于类的测试用例时,不能再使用setup方法作为前置操作、teardown方法作为后置操作了
在pytest 7中使用时,会发出弃用警告
在pytest 8中使用时,完全不会生效了,仿佛不存在一样
最好的解决办法是,使用fixture这一pytest的主流实现方式
领取专属 10元无门槛券
私享最新 技术干货