04,pytest -conftest.py文件

1、conftest.py文件是什么?

需结合pytest的另一大特色fixture来介绍conftest.py

fixture

pytest中的fixture的是用于将测试前后进行预备、清理工作的代码分离出核心测试逻辑的一种机制

pytest是按照fixture的名称搜索fixture。

搜索顺序是:

  1. 优先搜索当前测试所在类
  2. 再搜索当前测试所在的模块
  3. 然后搜索conftest.py
  4. 接下来搜索内置fixture
  5. 最后搜索第三方插件

由此可见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文件的作用范围:

其作用范围是当前目录包括子目录里的测试模块。

  1. 比如在测试系统的根目录创建conftest.py文件,其文件中的fixture的作用范围是所有测试模块。
  2. 比如在某个单独的测试文件夹里创建conftest.py文件,该文件中fixture的作用范围就仅局限于该测试文件夹里的测试模块。该测试文件夹外的测试模块或者该测试文件夹外的测试文件夹,是无法调用到这个conftest.py文件中的fixture。
  3. 如果测试根目录和测试子目录都有conftest.py,并且这两个conftest.py中都有一个同名的fixture,测试子目录中的测试用例使用这个命名的fixture,实际生效的是测试子目录下的conftest.py中的fixture

 

4、fixture的作用范围

fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function

  1. function:每一个函数或方法都会调用
  2. class:每一个类调用一次,一个类中可以有多个方法
  3. module:每一个.py文件调用一次,该文件内又有多个function和class
  4. session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
  5. function默认模式@pytest.fixture(scope='function')或 @pytest.fixture()

 

5、conftest结合fixture的使用

  1. conftest中fixture的scope参数为session,所有测试.py文件执行前执行一次
  2. conftest中fixture的scope参数为module,每一个测试.py文件执行前都会执行一次conftest文件中的fixture
  3. conftest中fixture的scope参数为class,每一个测试文件中的测试类执行前都会执行一次conftest文件中的fixture
  4. conftest中fixture的scope参数为function,所有文件的测试用例执行前都会执行一次conftest文件中的fixture
posted @ 2021-01-18 16:56  似梦千寻  阅读(277)  评论(0)    收藏  举报