pytest跟我练08-->fixtrue基础之conftest.py模块使用

前言

     正确的道路是这样:吸取你的前辈所做的一切,然后再往前走。——列夫·托尔斯泰
     建议大家多看贴,少走弯路~

一、conftest.py文件是什么

  • 单独存放fixtrue配置的一个文件
  • 用处是可以多个不同的pytest测试脚本共用一套fixture配置,代码维护方便

二、conftest.py文件编写的注意事项

  • conftest.py文件不能修改名称,否则pytest检测不到
  • conftest.py与运行的用例要在python同一个包下,不能是同一个目录下(ps:init.py)
  • conftest.py文件配置好后,pytest自动检测并生效,不需要进行import导入

三、conftest.py文件使用实例

3.1 来个简单的 conftest.py文件 使用练练手

代码层次路径如下截图:

代码如下:
conftest.py文件代码:

import pytest

@pytest.fixture(name='conftest')
def setUp():
    print('conftest:测试初始化')
    yield
    print('conftest:测试清理')

test_01.py文件代码:

def test01(conftest):
    print('execute Test01')
    assert 1

test_02.py文件代码:

import pytest

def test02(conftest):
    print('execute Test02')
    assert 1

if __name__ == '__main__':
    pytest.main(["-s"])
  • 上述实例要运行,只需要运行 test_02.py 文件即可,会自动检测 conftest.py 文件中的fixtrue
  • 通过上述实例,可以发现 test_01.py 和 test_02.py 都能引用到 conftest.py 文件中的fixtrue

3.2 再来一个多层次的

代码层次路径如下截图:

之前的代码不变,增加的部分代码如下:
test_package_01包下的conftest.py文件:

import pytest

@pytest.fixture(name='package_01_conftest')
def setUp():
    print('package_01_conftest:测试初始化')
    yield
    print('package_01_conftest:测试清理')

test_package_01包下的test_p_01.py文件:

#test01方法同时引用顶层、包下的的fixtrue
def test01(conftest,package_01_conftest): 
    print('execute test_p_01')
    assert 1

test_package_02包下的代码类似,不再重复罗列,占用篇幅~~

  • 上述实例要运行,只需要运行 test_02.py 文件即可,会自动检测到所有 conftest.py 文件中的fixtrue
  • 上例中包含了3个 conftest.py 文件,有顶层的,有测试包下的
  • 上例执行后查看结果会发现顶层的 conftest.py 文件先生效,然后再生效测试包下的
  • 在test01方法中引用了顶层和包下的的fixtrue,可以看出顶层的fixtrue对当面包以及子包下的测试方法都能生效
  • 注意:test_package_01包下的测试模块不能引用test_package_02包下 conftest.py 的fixture,因为它们没有上下的层级关系
  • 在实际使用 conftest.py 文件中,一般会把顶层的fixtrue的scope设置为session,存放整个项目需要使用的初始化操作或数据
posted @ 2020-03-25 15:35  蓝寅  阅读(481)  评论(2编辑  收藏  举报