PYTEST中conftest.py和@pytest.fixture()结合使用实现全局的前置应用

一:conftest.py和@pytest.fixture()结合使用实现全局的前置应用主要有以下特点:

    1.conftest.py文件是单独存放的一个夹具配置文件,名称是不能更改

    2.用处可以在不同的py文件中使用同一个fixture

    3.原则上conftest.py需要和运行的用例放到统一层,并且不需要做任何的import导入的操作

    总结:

    setup/teardown,setup_class/teardown_class,它是作用于所有用例或所有的类

    @pytest.fixture(),它的作用是既可以部分也可以全部前后置

    conftest.py和@pytest.fixture()结合使用,作用于全局的前后置

实现局部的前置应用
测试用例的目录结构如下:
demo1-
    test_func1.py
    test_func2.py
    conftest.py
conftest.py
demo1文件夹下包含三个py文件,分别是两个测试用例,和一个conftest.py文件

demo1文件夹内的conftest.py的内容如下:
import pytest

@pytest.fixture(scope='function',params=['alex1','alex2'],autouse=False)
def my_fixture(request):
    print('这是前置内容')
    yield request.param
    print('这是后置内容')

test_func1.py的内容如下:
class Testdemo3():

    def test_01(self,my_fixture,all_fixture):
        print('这是test01',my_fixture,all_fixture)

    def test_02(self,all_fixture,my_fixture):
        print('这是test02',my_fixture,all_fixture)


外部的conftest.py的内容如下:
import pytest

@pytest.fixture()
def all_fixture():
    print('这是全局前置')
    yield
    print('这是全局后置')

运行测试用例的结果如下:
testcase/demo1/test_func3.py::Testdemo3::test_01[alex1] 这是前置内容
这是全局前置
这是test01 alex1 None
PASSED这是全局后置
这是后置内容

testcase/demo1/test_func3.py::Testdemo3::test_01[alex2] 这是前置内容
这是全局前置
这是test01 alex2 None
PASSED这是全局后置
这是后置内容

testcase/demo1/test_func3.py::Testdemo3::test_02[alex1] 这是全局前置
这是前置内容
这是test02 alex1 None
PASSED这是后置内容
这是全局后置

testcase/demo1/test_func3.py::Testdemo3::test_02[alex2] 这是全局前置
这是前置内容
这是test02 alex2 None
PASSED这是后置内容
这是全局后置

从上面test01和test02中可以看到出入的全局fixture和局部fixture的实现结果,哪个在前面,先调用哪个,所以某种程度上,也是有一定执行顺序的,并不是全局conftest或者局部conftest先执行之类的。

二:下面说下pytest中conftest.py作用范围

        一个测试工程下面可以有多个conftest.py文件,一般在工程根目录放一个conftest起到全局作用,在不同的测试子目录也可以放conftest,作用范围只在该层级以及以下目录生效。

        例如上述中demo1下面的conftest.py,它的作用域就是这个demo1目录下面的所有testcase,而demo1文件夹外面的conftest.py,它的作用域就可以针对所有的测试用例。

        所以,具体使用局部还是全局,按照实际情况自行决定。

你可能感兴趣的:(python基础,pytest,pycharm,pytest,python,开发语言)