pytest--conftest.py全局用例公用

发布时间 2023-04-03 15:33:52作者: 测试-13

前言

当多个测试用例文件,需要调用同一个fixture时候。比如登陆的fixture,连接数据库的fixture,如果在每个测试用例文件里都加上fixture,代码就会看着十分别扭,且测试用例与fixture混杂在一起,不方便维护。那么pytest也提供了conftest.py这个文件来帮助我们完成对fixture的管理

 

conftest.py介绍

conftest.py可以理解成一个专门用于存放的fixture的文件,能根据需求来设置不同的fixture作用域或者conftest.py的位置,来达到预期的目标

conftest特点:

  • conftest.py的名称是固定名称,不可修改
  • conftest.py需要与调用的测试用例位于同一个pakage目录下,位于下级目录的测试用例,也可调用上级的conftest.py中的fixture
  • 不需要import导入conftest.py,pytest执行测试用例时会自动识别的conftest.py。conftest.py放到项目根目录下,那么全局都可以调用fixture
  • 每个目录都可以有自己的conftest.py文件,一个项目中可以拥有多个conftest.py文件

 

conftest.py例子

结构目录:

根目录conftest.py:

设置了两个fixture,login是session级别,log是function级别

import pytest

@pytest.fixture(scope='session')
def login():
    print('===开始登陆====')
    yield
    print('===退出登陆====')

@pytest.fixture()
def log():
    print('----记录log----')
    yield
    print('----log记录结束----')

testcase.py:

import pytest

def test_01(log,login):
    print("test_01执行")

def test_02():
    print("test_02执行")

test目录下conftest.py:

设置一个session级别的fixture(token),等下运行可以查看下下级目录的conftest.py的作用域范围

import pytest


@pytest.fixture(scope='session')
def token():
    print('token生成')
    yield
    print('token结束')

test目录下test_01.py:

def test01_1(log):
    print('test01_1执行')

def test01_2(token):
    print('test01_2执行')

 test目录下test_02.py:

class Test_01():
    def test02_01(self):
        print('test02_01用例执行')
    def test02_02(self,log):
        print('test02_02用例执行')

那么执行命令:pytest -sv来查看具体输出结果:

 总结:

1、根目录的conftest.py中的fixture可以被子目录下的测试用例调用(test/test_02.py::Test_01::test02_02调用了log的fixture)

2、根目录的conftest.py的session级别fixture的作用域就是整个session(login的调用在所有测试用例的前、后只执行了一次)

3、子目录的conftest.py的session级别fixture的作用域是当前子目录中设置了session级别fixture执行顺序之后的所有测试用例(test/test_01.py::test01_2设置了session级别的fixture,但test/test_01.py::test01_1却没有包含在其中)