Pytest学习(六) - conftest.py结合接口自动化的举例使用

一、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来实现。

工程目录结构如下:

Pytest学习(六) - conftest.py结合接口自动化的举例使用

1、最顶层conftest

即项目根目录下的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} ==")

运行结果:

Pytest学习(六) - conftest.py结合接口自动化的举例使用

3、test_query目录

通过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}")

运行结果:

Pytest学习(六) - conftest.py结合接口自动化的举例使用

4、test_loginout目录

没有__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)

运行结果:

Pytest学习(六) - conftest.py结合接口自动化的举例使用

5、test_addcart目录

通过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} ")

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywdjs.html