参数替换的思路
为什么替换参数:请求参数不一定全部都是写死的,有可能存在接口之间的数据依赖
- 在Excel中写入特殊标记(如#key#),说明写了特殊标记的地方需要做替换处理
- 读取Excel中的参数,通过正则表达式提取出来需要被替换的key,得到一个list
- 遍历list,根据list中不同的参数,去不同的地方获取对应的数据(如脚本生成的数据、配置文件来源的数据、默认从管全局变量获取数据)
- 获取到需要替换数据的value,设置为全局变量(通过类属性实现)
- 遍历list,通过字符串的replace方法进行数据替换
- 替换完成后,将替换后的数据转换成python对象
响应结果处理思路
为什么处理响应结果:接口返回数据类型不一致,我们后续需要去响应结果中提取参数,解决参数依赖问题(使用jsonpath)
- 我们需要的是json数据,对于所有的返回数据我们进行二次封装,封装成固定的格式
- 传入响应数据对象,通过json方式去获取对应的body内容,如果不是json数据那就说明不是我们需要的类型,就会报错,符合要求的数据,直接进行二次封装处理
接口断言思路
- 在Excel中新增一个字段expected_data
- expected_data字段用来存放期望结果(如:
{"code": "200"}
),可以写多个key:value
键值对,期望结果数据是单独请求结果或者查看接口文档获取到的 - 获取期望结果数据,转换成dict类型,再遍历字典的key,然后去接口响应结果中通过key获取对应的value,组成新的字典,这个新的字段就是实际结果
- 通过TestCase类的断言方法对希望结果和实际结果进行比对(直接比对字典)
- 因为字典数据是无序的,只要两个字典中,key和value这样的键值对是一样的,则不管位置是否一致,我们都认为两个字典是相等的
提取全局变量的思路
- 在Excel中新增字段extract_data
- 将extract_data字段中,写入需要提取的数据(如:{"token": "523452345234"})
- key标识要去响应结果中提取的key,value标是提取key的jsonpath表达式
- 获取extract_data数据,转换成dict类型,再遍历字典的key和value,通过key和value(jsonpath表达式),从响应结果中提取对应key的值
- 提取出来数据后,通过类属性设置为全局变量(属性的key就是刚才遍历的key,属性的值为通过jsonpath表达式提取出来的值)
鉴权思路
为什么鉴权:一些接口需要登录之后才能够请求(相当于是接口的前置条件)
- 将接口的前置条件放到该接口之前执行,执行后通过提取token的方式设置请求头完成鉴权
- 提取登录接口响应数据中的token,设置为类属性(全局变量)
- 在请求所有接口之前,判断一下类属性是否有token属性,如果有就将token按照要求放入请求头中
- 后面的接口请求的时候就统一带上有鉴权信息的请求头
发送请求封装的思路
- 发送请求之前去调用鉴权处理的方法,获取最新的请求头数据
- 在Excel中,新增is_upload字段,如果该字段为1,则为文件上传接口,否则为普通接口
- 判断接口是否是文件上传接口,如果是就调用文件上传方法,如果不是就走else逻辑发送普通请求
- 在请求图片上传接口的时候,要对应修改请求字段Content_Type: multipart/form-data; boundary=----WebKitFormBoundaryOavsXm2eeigLNDtG
- 为了跨平台,放到jenkins上做持续集成,将需要上传的图片放到项目images目录下(以iages为例,可随意调整)
- 图片上传接口请求完成之后,要将请求头修改为json格式,否则后续非图片上传的接口请求会报错
数据库断言思路
- 把图片上传的返回的数据提取出来,设置为全局变量
- 拿到全局变量去数据库查询(链接数据库+拼接sql语句)
- 在Excel中新增assert_db字段存放数据库断言的期望结果和实际结果获取需要执行的sql语句
- 先判断是否需要替换sql的数据,如果要替换,先替换sql语句再执行sql语句,接着断言
- sql语句从哈讯的数据返回是元组,如果是设置了返回值为字典数据,需要取值出来
sql语句替换的思路
- 获取sql语句
- 通过正则表达式判断是否有数据需要替换(有无特殊标记),返回list
- 检查list是否有值,有值说明需要替换sql
- 替换sql语句都是从全局变量中获取的
- 连接数据库
- 替换sql语句
- 执行sql语句
未注册的手机号生成处理思路(注册)
- 通过faker生成一个随机手机号
- 去数据库去校验是否已注册,已注册了就重新走第1步和第2步
- 如果未重复,直接返回未注册的手机号
url地址中参数替换的处理
- 在发请求之前把url地址中的参数替换好就行
- url地址中参数的来源,接口响应的结果,提取到全局变量了
- 通过re表达式获取需要替换的key_list
- 遍历key_list,从全局变量中获取对应的数据对url地址进行替换
日志收集
- 日志要还原用户的行为(还原测试用例执行的全过程)
- 需要输出日志的地方:方法的入参、出参数据类型、数据转换(jsonstr 转 python对象)
- 需要输出日志的地方:测试过程的逻辑选择
为什么要做数据隔离,数据隔离怎么处理
需求:数据驱动,每个sheet都是一个场景,或者是一个接口,场景和接口之间为了不影响执行结果,尽量要做到数据隔离.
如何做数据隔离:
- 每次执行sheet里面的测试用例的时候,都清掉全局属性中所有自己设置的属性
具体步骤: - 读取测试用例数据(所有的sheet,循环读取,循环执行用例)