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

1、conftest.py做用

能够理解成存放fixture的配置文件python

2、conftest.py配置fixture注意事项

  • pytest会默认读取conftest.py里面的全部fixture
  • conftest.py 文件名称是固定的,不能改动
  • conftest.py只对同一个package下的全部测试用例生效
  • 不一样目录能够有本身的conftest.py,一个项目中能够有多个conftest.py
  • 测试用例文件中不须要手动import conftest.py,pytest会自动查找

3、实例场景应用

多个测试用例脚本都须要先进行登陆,再进行业务操做,按照封装的特性,确定须要抽离登陆这部分,那么咱们如今就使用conftest.py来实现。session

工程目录结构以下:
测试

一、最顶层conftest

即项目根目录下的conftest文件,通常写全局的fixture,在接口自动化中抽离登陆使用,示例代码以下:code

# -*- 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)blog

二、同级目录下的第一个用例

示例代码以下:token

# -*- 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} ==")

运行结果:
接口

三、test_query目录

经过conftest.py,配置一些针对query的测试用例独有的fixture,好比:查询商品,示例代码以下:utf-8

# -*- 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"调用查询接口成功,返回查询商品信息")

对应测试用例,示例代码以下:get

# -*- 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}")

运行结果:
it

四、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)

运行结果:

五、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} ")

运行结果:

4、运行目录下全部用例

示例代码以下:

# -*- coding: utf-8 -*-
# @Time    : 2020/11/11 23:17
# @Author  : longrong.lang
# @FileName: run.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
import pytest

if __name__ == '__main__':
    pytest.main(["-q", "../python-practice/"])

运行结果:

相关文章
相关标签/搜索