Pytest接口自动化实战总结

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:


总体思路

  • 确定目标:1)作为冒烟case执行;2)代替部分手工回归的工作;3)线上主流程功能巡检。

  • 确定接口自动化颗粒度:根据这个目标,我认为接口自动化需要做的比较精细。精细化是指:

    • 全面的用例设计;
    • 详细的断言,包括响应报文断言、落库后所有重要【表、字段】的校验;
    • 核心场景case
  • 设计流程:pytest执行一个接口脚本的流程:

    • 脚本运行开始,先通过setup,对这个接口所有测试用例依赖的前置数据做初始化(新增到数据库等等);
    • 每一条测试数据组装成1个http请求,向服务端发起请求;
    • 每个请求结束之后,都会做断言;
    • 这个接口的所有用例执行完成之后,做数据清理,保证脚本可重复执行。
  • 设计框架

    • 一个接口自动化项目包含所有微服务的接口
    • 测试数据(testdata):按照服务名建立二级文件夹,存放以下测试数据
      • 前置数据(excel)
      • 测试用例HTTP请求内容(excel)
      • 期望结果数据(查询接口的期望结果放在yaml文件,增删改接口的期望结果放在excel)
    • 测试脚本(testcase):按照服务名建立二级文件夹,包含以下内容:
      • 测试脚本。一个.py脚本只放一个接口
      • conftest文件: 包含适用于这个服务下所有接口的前置数据初始化和后置数据清理,fixture级别设为module
    • 公共方法(common):所有服务都共用的
      • http请求方法封装(http_util.py)
      • 各种数据库连接方法封装(database)
      • excel文件处理方法封装
      • yaml文件处理方法
      • 断言方法封装
      • 环境切换方法封装
    • 配置文件(config)
      • 测试、开发、生产环境的测试账号、服务ip、数据库连接等等
      • 当前环境配置关键字
      • 数据库和表结构的映射关系文件
    • 全局conftest文件:包含以下内容
      • 普通方法1:解决测试用例中文名乱码问题
      • 普通方法2:接收命令行传入的参数,包括:环境参数、测试用例所属业务线、测试用例所属服务
      • fixture方法1:获取普通方法2中接收到的环境参数,再修改配置文件中的环境关键字。作用域session,自动执行该方法
      • 其他fixture方法:用于收集接口自动化执行的数据并写入数据库
  • 选型

    • Metersphere接口自动化平台
    • TestNG+Rest Assured+Allure
    • Pytest+Request+Allure
  • 提效指标

    • 自动化缺陷率:Q3(3%)
    • 接口覆盖率:Q3(50%)
    • 代码覆盖率:
    • 接口覆盖粒度:单接口关联的测试用例数
  • 提效结果

    • 自动化缺陷率:Q3(4%)
    • 接口覆盖率:Q3(87%)

实现过程中遇到的困难和解决方案

  • 断言时的落库校验:一个功能涉及多个库的多个表的变更,读取期望结果excel表格的时候,只能获取到表名,无法知道这个表是哪个数据库的,故无法连接指定数据库查询实际结果。
    • 建立从:表到数据库的映射文件,读取到excel中的表名之后,再根据mapper文件获取到数据库名,再进行数据库的连接、查询。
  • 断言时,json结构比较复杂、层次比较深的响应报文校验
    • 使用DeepDiff库,可以直接拿响应的json报文和期望的直接对比。
  • 环境切换
    • 开发、测试、生产环境的数据库、服务ip配置都不一样,需要根据执行用例时候的传入环境参数动态切换到指定的环境执行用例。

重点模块流程图

环境切换
环境配置

环境配置流程图.jpg

断言模块

使用的一些库

allure

参考文章

Pytest+Allure,快速提升我们的测试效率

yaml文件处理(yaml包)
safe_load方法
# 先open方法,打开文件,再将文件加载为python对象,
# 如果原yaml文件里是字典模式,那返回结果就是字典;如果原来是列表模式,那就返回列表
def read_yaml(self, file):
    with open(file, 'r', encoding='utf-8') as file:
        data = yaml.safe_load(file)
    return data
excel文件处理(openpyxl

使用的地方:读取excel文件中的测试数据,并以字典格式返回

openpyxl库中常用的类
  • Workbook:表示一个Excel工作簿,是操作Excel文件的基础类。通过它,可以创建新的工作簿,打开已有的工作簿,以及保存工作簿等。
  • Worksheet:表示一个Excel工作表,是对单个表格的操作类。通过它,可以读取和修改单元格的值,设置单元格的格式等。
  • Cell:表示一个Excel单元格,是对单个单元格的操作类。通过它,可以读取和修改单元格的值,获取单元格的行和列等信息。
  • Chart:表示一个Excel图表,是对图表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值