• Python接口测试框架选择之pytest+yaml+Allure!


    一、为什么选择pytest?

    pytest完全兼容python自带的unittest

    pytest让单元测试更简单,能很好的管理测试用例。

    对于实现接口测试的复杂场景,pytest的fixture、PDB等高阶用法都能实现需求。

    入门简单,对于代码基础薄弱的团队人员,也可以用pytest实现较简单的单个接口测试。

    社区活跃,遇到问题可以在网上找到解决方法。

    pytest实战例子:修改用户信息

    场景:测试修改用户昵称是否成功

    涉及接口:用户登录接口、用户信息修改接口、用户信息接口。用户信息修改接口和用户信息接口需要上传登录接口下发的token字段

    接口处理逻辑分析:

    用户登录后拿到token,将token设为全局变量。

    上传修改后的用户昵称到用户修改接口

    请求用户信息接口,拿到昵称字段,判断是否为修改后的的昵称。

    代码展示

    1. import pytest
    2. updata_name = "sunny"
    3. expect_result = updata_name #期待修改后的昵称
    4. class TestUpdataUserInfo:
    5. def setup_class(self):
    6. print("请求登录接口,获取到token")
    7. self.token = "token" #将token设为全局变量,这里暂时用"token"代替接口返回的token
    8. def teardown_class(self):
    9. # 此方法写请求获取用户信息接口,拿到用户昵称逻辑代码
    10. tokenStr = self.token # 获取到token,用于请求修改用户信息接口
    11. print("请求用户信息接口,拿到昵称")
    12. nickName = "sunny"#假设接口拿到的昵称为"sunny"
    13. assert nickName==expect_result #校验是否为期待的昵称
    14. def test_update_userInfo(self):
    15. #此方法写上传修改后的用户昵称到用户修改接口的逻辑
    16. tokenStr = self.token #获取到token,用于请求修改用户信息接口
    17. print("token:"+tokenStr)
    18. print("上传需要修改的昵称")
    19. if __name__ == '__main__':
    20. pytest.main(['-s', 'pytest-demo.py'])
    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036【暗号:csdn999

    二、为什么选择yaml?

    写法简洁易懂,视觉上也很舒适

    yaml支持python,yaml+pytest实现数据分离很简便。

    配置有序,支持数组写法,数组中的元素可以是基本数据类型也可以是对象

    实战例子:用yaml写测试数据

    上文的pytest例子中,测试上传的昵称数据和期待修改后的昵称数据都是写在updataUserInfo.py文件,这种写法不方法管理,现在改为用yaml文件写测试数据。

    代码展示

    1. 创建yaml文件:updataUserInfo.yaml,将测试数据写入
    2. test:
    3. name: test case1
    4. updateName: "sunny"
    5. result:
    6. expectName: "sunny"

    获取到yaml数据如下

    {'test': {'name': 'test case1', 'updateName': 'sunny', 'result': {'expectName': 'sunny'}}}

    获取到yaml文件里的数据,进行请求和校验

    1. import pytest
    2. import yaml
    3. # updata_name = "sunny"
    4. # expect_result = updata_name #期待修改后的昵称
    5. class TestUpdataUserInfo(object):
    6. def setup_class(self):
    7. ##获取yaml文件里面的数据,
    8. with open("./updataUserInfo.yaml", 'r') as f:
    9. content = yaml.safe_load(f)
    10. print(content)
    11. self.update_name = content['test']['updateName']
    12. self.expect_name = content['test']['result']['expectName']
    13. print("请求登录接口,获取到token")
    14. self.token = "token" #将token设为全局变量,这里暂时用"token"代替接口返回的token
    15. def teardown_class(self):
    16. # 此方法写请求获取用户信息接口,拿到用户昵称逻辑代码
    17. tokenStr = self.token # 获取到token,用于请求修改用户信息接口
    18. print("请求用户信息接口,拿到昵称")
    19. nickName = "sunny"#假设接口拿到的昵称为"sunny"
    20. assert nickName==self.expect_name #校验是否为期待的昵称
    21. def test_update_userInfo(self):
    22. #此方法写上传修改后的用户昵称到用户修改接口的逻辑
    23. tokenStr = self.token #获取到token,用于请求修改用户信息接口
    24. print("token:"+tokenStr)
    25. print("需要修改的值为:"+self.update_name)
    26. print("上传需要修改的昵称")
    27. if __name__ == '__main__':
    28. pytest.main(['-s', 'pytest-demo.py'])

    三、为什么选择Allure?

    生成高大上的测试报告,展示测试结果直观明了,利于向领导展示自动化测试成果。

    有失败用例截图、测试步骤和测试说明信息。方便测试人员查看测试结果。

    Allure测试报告展示

    END今天的分享就到此结束了,点赞关注不迷路!

  • 相关阅读:
    猿创征文 |【C++】动态内存的分配与回收
    《Python+Kivy(App开发)从入门到实践》自学笔记:简单UX部件——Image图片
    后端服务架构的不同与区别
    从0到1搭建一个vue项目
    黄健翔质疑半自动越位技术?用「技术流」解读卡塔尔世界杯
    Hdfs存储策略
    MySQL (2)
    双十二选什么牌子的led台灯质量好?2022最新几款真的能护眼的台灯推荐
    VS2019编译配置Easy3D
    很多行业在很多人看来门槛很低,人人都可以做
  • 原文地址:https://blog.csdn.net/m0_47485438/article/details/134398843