接口自动化测试框架搭建的思路

参数替换的思路

为什么替换参数:请求参数不一定全部都是写死的,有可能存在接口之间的数据依赖

  1. 在Excel中写入特殊标记(如#key#),说明写了特殊标记的地方需要做替换处理
  2. 读取Excel中的参数,通过正则表达式提取出来需要被替换的key,得到一个list
  3. 遍历list,根据list中不同的参数,去不同的地方获取对应的数据(如脚本生成的数据、配置文件来源的数据、默认从管全局变量获取数据)
  4. 获取到需要替换数据的value,设置为全局变量(通过类属性实现)
  5. 遍历list,通过字符串的replace方法进行数据替换
  6. 替换完成后,将替换后的数据转换成python对象

响应结果处理思路

为什么处理响应结果:接口返回数据类型不一致,我们后续需要去响应结果中提取参数,解决参数依赖问题(使用jsonpath)

  1. 我们需要的是json数据,对于所有的返回数据我们进行二次封装,封装成固定的格式
  2. 传入响应数据对象,通过json方式去获取对应的body内容,如果不是json数据那就说明不是我们需要的类型,就会报错,符合要求的数据,直接进行二次封装处理

接口断言思路

  1. 在Excel中新增一个字段expected_data
  2. expected_data字段用来存放期望结果(如:{"code": "200"}),可以写多个key:value键值对,期望结果数据是单独请求结果或者查看接口文档获取到的
  3. 获取期望结果数据,转换成dict类型,再遍历字典的key,然后去接口响应结果中通过key获取对应的value,组成新的字典,这个新的字段就是实际结果
  4. 通过TestCase类的断言方法对希望结果和实际结果进行比对(直接比对字典)
  5. 因为字典数据是无序的,只要两个字典中,key和value这样的键值对是一样的,则不管位置是否一致,我们都认为两个字典是相等的

提取全局变量的思路

  1. 在Excel中新增字段extract_data
  2. 将extract_data字段中,写入需要提取的数据(如:{"token": "523452345234"})
  3. key标识要去响应结果中提取的key,value标是提取key的jsonpath表达式
  4. 获取extract_data数据,转换成dict类型,再遍历字典的key和value,通过key和value(jsonpath表达式),从响应结果中提取对应key的值
  5. 提取出来数据后,通过类属性设置为全局变量(属性的key就是刚才遍历的key,属性的值为通过jsonpath表达式提取出来的值)

鉴权思路

为什么鉴权:一些接口需要登录之后才能够请求(相当于是接口的前置条件)

  1. 将接口的前置条件放到该接口之前执行,执行后通过提取token的方式设置请求头完成鉴权
  2. 提取登录接口响应数据中的token,设置为类属性(全局变量)
  3. 在请求所有接口之前,判断一下类属性是否有token属性,如果有就将token按照要求放入请求头中
  4. 后面的接口请求的时候就统一带上有鉴权信息的请求头

发送请求封装的思路

  1. 发送请求之前去调用鉴权处理的方法,获取最新的请求头数据
  2. 在Excel中,新增is_upload字段,如果该字段为1,则为文件上传接口,否则为普通接口
  3. 判断接口是否是文件上传接口,如果是就调用文件上传方法,如果不是就走else逻辑发送普通请求
  4. 在请求图片上传接口的时候,要对应修改请求字段Content_Type: multipart/form-data; boundary=----WebKitFormBoundaryOavsXm2eeigLNDtG
  5. 为了跨平台,放到jenkins上做持续集成,将需要上传的图片放到项目images目录下(以iages为例,可随意调整)
  6. 图片上传接口请求完成之后,要将请求头修改为json格式,否则后续非图片上传的接口请求会报错

数据库断言思路

  1. 把图片上传的返回的数据提取出来,设置为全局变量
  2. 拿到全局变量去数据库查询(链接数据库+拼接sql语句)
  3. 在Excel中新增assert_db字段存放数据库断言的期望结果和实际结果获取需要执行的sql语句
  4. 先判断是否需要替换sql的数据,如果要替换,先替换sql语句再执行sql语句,接着断言
  5. sql语句从哈讯的数据返回是元组,如果是设置了返回值为字典数据,需要取值出来

sql语句替换的思路

  1. 获取sql语句
  2. 通过正则表达式判断是否有数据需要替换(有无特殊标记),返回list
  3. 检查list是否有值,有值说明需要替换sql
  4. 替换sql语句都是从全局变量中获取的
  5. 连接数据库
  6. 替换sql语句
  7. 执行sql语句

未注册的手机号生成处理思路(注册)

  1. 通过faker生成一个随机手机号
  2. 去数据库去校验是否已注册,已注册了就重新走第1步和第2步
  3. 如果未重复,直接返回未注册的手机号

url地址中参数替换的处理

  1. 在发请求之前把url地址中的参数替换好就行
  2. url地址中参数的来源,接口响应的结果,提取到全局变量了
  3. 通过re表达式获取需要替换的key_list
  4. 遍历key_list,从全局变量中获取对应的数据对url地址进行替换

日志收集

  1. 日志要还原用户的行为(还原测试用例执行的全过程)
  2. 需要输出日志的地方:方法的入参、出参数据类型、数据转换(jsonstr 转 python对象)
  3. 需要输出日志的地方:测试过程的逻辑选择

为什么要做数据隔离,数据隔离怎么处理

需求:数据驱动,每个sheet都是一个场景,或者是一个接口,场景和接口之间为了不影响执行结果,尽量要做到数据隔离.
如何做数据隔离:

  1. 每次执行sheet里面的测试用例的时候,都清掉全局属性中所有自己设置的属性
    具体步骤:
  2. 读取测试用例数据(所有的sheet,循环读取,循环执行用例)
posted @ 2024-05-04 19:45  爱老的虎油  阅读(2)  评论(0编辑  收藏  举报