• Pytest学习(六)


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

    工程目录结构如下:

    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:打印用户名
    username:{username} 和token: {token} ==")
    

    运行结果:

    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"
    返回查询商品信息:商品名称: {shopName} 颜色:{colour} 鞋号: {size}")
    

    运行结果:

    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("==
    没有__init__测试用例,登录后,我就想退出登录了==", login)
    

    运行结果:

    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"
    返回商品价格: {price} ")
    

    运行结果:

    四、运行目录下所有用例

    示例代码如下:

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

    运行结果:

    优秀不够,你是否无可替代

    软件测试交流QQ群:721256703,期待你的加入!!

    欢迎关注我的微信公众号:软件测试君


  • 相关阅读:
    内容页超连接关键词的完美实现
    鼠标经过文字链接时出现漂亮的提示层
    简单的jQuery检测注册用户名
    触发Repeater中的Dropdownlist的SelectedIndexChanged如何获得Repeater的当前行
    读取XML的节点属性并绑定到ListBox
    第十八章 6string型字符串的替换 简单
    第十八章 2string字符串 简单
    第十七章 特殊成员_函数指针也可以做为参数 简单
    第十七章 特殊成员_类的函数指针 简单
    第十七章 特殊成员_成员函数指针数组 简单
  • 原文地址:https://www.cnblogs.com/longronglang/p/13961685.html
Copyright © 2020-2023  润新知