04,pytest -conftest.py文件
1、conftest.py文件是什么?
需结合pytest的另一大特色fixture来介绍conftest.py
fixture:
pytest中的fixture的是用于将测试前后进行预备、清理工作的代码分离出核心测试逻辑的一种机制
pytest是按照fixture的名称搜索fixture。
搜索顺序是:
- 优先搜索当前测试所在类
- 再搜索当前测试所在的模块
- 然后搜索conftest.py
- 接下来搜索内置fixture
- 最后搜索第三方插件
由此可见conftest.py就是存放fixture的地方。准确的说,是存放自定义fixture的地方。
2、conftest.py文件特点:
- conftest.py文件所在目录必须存在__init__.py文件
- 不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在改package内有效,可有多个conftest.py
- conftest.py配置脚本名称是固定的,不能改名称
- conftest.py文件不能被其他文件导入
- 所有同目录测试文件运行前都会执行conftest.py文件
3、conftest.py文件的作用范围:
其作用范围是当前目录包括子目录里的测试模块。
- 比如在测试系统的根目录创建conftest.py文件,其文件中的fixture的作用范围是所有测试模块。
- 比如在某个单独的测试文件夹里创建conftest.py文件,该文件中fixture的作用范围就仅局限于该测试文件夹里的测试模块。该测试文件夹外的测试模块或者该测试文件夹外的测试文件夹,是无法调用到这个conftest.py文件中的fixture。
- 如果测试根目录和测试子目录都有conftest.py,并且这两个conftest.py中都有一个同名的fixture,测试子目录中的测试用例使用这个命名的fixture,实际生效的是测试子目录下的conftest.py中的fixture
4、fixture的作用范围
fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function
- function:每一个函数或方法都会调用
- class:每一个类调用一次,一个类中可以有多个方法
- module:每一个.py文件调用一次,该文件内又有多个function和class
- session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
- function默认模式@pytest.fixture(scope='function')或 @pytest.fixture()
5、conftest结合fixture的使用
- conftest中fixture的scope参数为session,所有测试.py文件执行前执行一次
- conftest中fixture的scope参数为module,每一个测试.py文件执行前都会执行一次conftest文件中的fixture
- conftest中fixture的scope参数为class,每一个测试文件中的测试类执行前都会执行一次conftest文件中的fixture
- conftest中fixture的scope参数为function,所有文件的测试用例执行前都会执行一次conftest文件中的fixture

浙公网安备 33010602011771号