pytest中fixture的使用
1. fixture的作用是一个公共类型,可以在一个类、或者一个模块、或者整个session中被共享,加上范围即可。
- 加入
scope=“module”
的参数,可以让fixture function在每次模块测试的时候只请求一次。这样不同的test function在同一个test module中接收到的 fixture参数都是一样的。共享使用。 - 在一个类中使用:
@pytest.fixture(scope="class")
; - 在全部会话中使用:
@pytest.fixture(scope="session")
。
2. fixture也可以单独存放
- 有的时候为了方便配置和访问,也可以将这样的fixture放到conftest.py文件中单独存放。
3. 同一个模块里出现多个范围的装饰
- 当出现多个范围装饰的时候,优先实例化范围优先级高的。
- 优先级从大到小:
session-->module–->class–->function
4. fixture中的参数 autouse
- 关于autouse,默认是False,只在当前module下有效。
- 如果你想一个module下的都用上,那就打开改成True, 如下,这样就不需要往每个函数里传入fixture。
- 文件中同时包含了function,class,就不可以使用autouse了,否则function也会执行到
5. 当scope='session'时,要注意的点
- 如果你的
scope='session'
,那么不要像function,class,module那样,和case放在一起,我们要放在另一个文件,conftest.py下,才可以。
conftest.py的作用
- 所有同目录测试文件运行前都会执行conftest.py文件 不需要import导入;
- conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在该package内有效,可有多个conftest.py;
- conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件;
- 可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture。
参考链接:
https://zhuanlan.zhihu.com/p/87775743https://www.jb51.net/article/250217.htm