zoukankan      html  css  js  c++  java
  • 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,期待你的加入!!

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


  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/longronglang/p/13961685.html
Copyright © 2011-2022 走看看