前言
当多个测试用例文件,需要调用同一个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却没有包含在其中)