一、conftest.py作用
可以理解成存放fixture的配置文件
二、conftest.py配置fixture注意事项pytest会默认读取conftest.py里面的所有fixture
conftest.py 文件名称是固定的,不能改动
conftest.py只对同一个package下的所有测试用例生效
不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
测试用例文件中不需要手动import conftest.py,pytest会自动查找
三、实例场景应用多个测试用例脚本都需要先进行登录,再进行业务操作,按照封装的特性,肯定需要抽离登录这部分,那么我们现在就使用conftest.py来实现。
工程目录结构如下:
即项目根目录下的conftest文件,一般写全局的fixture,在接口自动化中抽离登录使用,示例代码如下:
# -*- coding: utf-8 -*- # @Time : 2020/11/11 21:26 # @Author : longrong.lang # @FileName: conftest.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang import pytest @pytest.fixture(scope='session') def login(): print(u'调用登录接口') username="zhangsan" token="ZXF3ZTEyMTIzMTIxYWUxcWUxYGAyYDJgYDIx" yield username, token print("====登录成功,返回用户名,token!") @pytest.fixture(autouse=True) def get_userinfo(login): username, token = login print(f"== 每个用例都调用的外层fixture:打印用户名username:{username} 和token: {token} ==")说明:此处必须要配合yield使用,也就是teardown(可以理解为afterclass)
2、同级目录下的第一个用例示例代码如下:
# -*- coding: utf-8 -*- # @Time : 2020/11/11 21:56 # @Author : longrong.lang # @FileName: test_getUserInfo.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang def test_getUserInfo(login): username,token=login print(f"== 每个用例都调用的外层fixture:打印用户名\nusername:{username} 和token: {token} ==")运行结果:
通过conftest.py,配置一些针对query的测试用例独有的fixture,比如:查询商品,示例代码如下:
# -*- coding: utf-8 -*- # @Time : 2020/11/11 22:19 # @Author : longrong.lang # @FileName: conftest.py.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang import pytest @pytest.fixture(scope='module') def query(login): print("====调用查询接口") shopName="AJ男鞋" size=44 colour="红色" yield shopName, size,colour print(f"调用查询接口成功,返回查询商品信息")对应测试用例,示例代码如下:
# -*- coding: utf-8 -*- # @Time : 2020/11/11 22:27 # @Author : longrong.lang # @FileName: test_case1.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang def test_query_shop(query): shopName,size,colour=query print(f"\n返回查询商品信息:商品名称: {shopName} 颜色:{colour} 鞋号: {size}")运行结果:
没有__init__.py文件也没有conftest.py文件,对应测试用例,示例代码如下:
# -*- coding: utf-8 -*- # @Time : 2020/11/11 22:40 # @Author : longrong.lang # @FileName: test_nofixture.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang def test_no_fixture(login): print("==\n没有__init__测试用例,登录后,我就想退出登录了==", login)运行结果:
通过conftest.py,配置一些针对addcart的测试用例独有的fixture,比如:加入购物车,示例代码如下:
# -*- coding: utf-8 -*- # @Time : 2020/11/11 22:50 # @Author : longrong.lang # @FileName: conftest.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang import pytest @pytest.fixture(scope='function') def addcart(login): print("从详情页登录,将商品加入购物车") price="2099元" yield price print('添加购物车成功,累计计算中')对应测试用例,示例代码如下:
# -*- coding: utf-8 -*- # @Time : 2020/11/11 22:56 # @Author : longrong.lang # @FileName: test_case.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang def test_addCart(addcart): price=addcart print(f"\n返回商品价格: {price} ")