1.单接口测试
1.1 参数校验
根据接口文档,进行业务参数的校验
1.1.1 单个参数校验
随机型:在指定范围或指定长度内任意取值
枚举型:依次取每一个值,例如会籍卡卡种(plus联名卡、站内尊享、站内纯享等)、会员级别(V0-V5)
边界值:对取值范围内的最大、最小、最大+1、最小-1取值
异常值:null、类型最大值和最小值、空字符(常见,非空校验)
默认值:对某些非必填参数,采用默认值
非法值:类型不匹配、超出类型范围、超出操作系统限制、系统关键字
1.1.2 多个参数组合校验
参数与参数之间有业务关联时,需组合校验,例如第三方会员直充接口:
"accountType": 0, //1=手机号,2=pin,3=身份证号
"account": "", //账号
组合校验:accountType=1时,account校验1开头的11位数字;
accountType=2时,account仅做非空校验;
accountType=3时,account校验18-20位数值;
accountType=4时,accountType为非法值。
1.2接口调用成功
1.2.1 查询接口
查询接口,调用成功脚本必须覆盖;
可固定入参pin或者从上游接口的返回数组中取数查询验证
1.2.2 操作接口
操作接口往往无法单接口调用成功,依据情况看是否要覆盖调用成功脚本:
例:线上环境部分操作接口不适合做自动化调用,适合前台页面操作;
有些操作接口可以用上下接口串联的形式,达到接口调用成功的效果,示例见2
后置操作:
操作接口的调用成功脚本,需要编辑后置操作:
例:新增地址操作成功后,加上删除该地址的后置操作,否则新增接口脚本长期回归后、同一测试pin下地址会冗余,还会达到地址上限而新增失败
- 多接口串联测试(业务流测试)
将上下多个接口串联,模拟真实场景的业务流测试;
上一个接口的返回值,作为下一个接口的入参(设置变量)请求;
操作接口后面往往需要加“等待时间:Thread.sleep(300)”再请求下一个接口。
场景一:删除收货地址
接口调用步骤
给指定测试pin新增一个收货地址 → 查询该pin收货地址列表 → 取返回值的第一个收货地址id作为删除地址接口入参,删除该地址
优点
如果仅对删除收货地址接口进行固定入参的接口执行,该脚本无法复用,接口无法删除一个已被删除的地址id
场景二:取消售后申请
接口调用步骤
选取指定测试pin可申请售后的订单号 → 申请售后 → 查询售后申请列表查询 → 选取第一条返回结果,取消售后申请
注意点
1° 订单号选电器等保修期长的订单,可保证较长效期内该脚本可复用
2° 提交售后申请需要调售后中台,故在申请售后脚本后面,需要加3秒等待时间再进行下一步操作
3.断言(期望结果)
一个完整的接口测试,包括:请求->获取返回结果→断言,断言是接口自动化中至关重要的一个环节,用于验证测试用例是否执行通过。
如果断言写的过于简单,如仅校验响应码,往往无法佐证用例测试通过。
3.1 断言设计思路
3.1.1 响应码
检查响应码是否符合预期,用来判断测试用例是否执行成功
3.1.2 关键字段
验证关键字段值是否符合预期,用来判断测试用例是否执行成功
3.1.3 正则匹配
当一个接口返回的内容较多,并且有一定规律时,可通过正则表达式校验接口返回的信息,从而判定测试用例是否执行成功
3.1.4 数据库匹配核对
比如对查询一个接口返回的数据进行验证时,可通过编写sql语句查询结果,
然后将sql语句执行后数据库返回的结果与接口返回的结果进行核对,以此来判定测试用例是否执行成功
注:该方式需用代码连库实现,当前Deeptest和穹天平台均未实现连接数据库
3.1.5 通过相关接口进行辅助验证
操作接口,接查询接口辅助验证
例:解绑手机号接口,解绑手机号后,想验证手机号是否解绑成功,可以调用获取用户手机号接口,来验证手机号解绑成功
4.变量
4.1 常用变量类型
4.1.1 数组
数组可以是数值或者json数组,输入多个变量值,用','分隔,每次调用接口随机从数组中取一个数值作为入参
适用于枚举类型或边界值测试
4.1.2 当前日期
有些接口需要传当前日期作为入参,此时当前日期字段适合设置变量。
4.1.3 时间戳
第三方直充会员接口,入参timestamp需校验当前时间前后5分钟内,所以该字段只适用于获取当前时间戳变量,写死的数值无法调用成功
"timestamp": 1622617182000, //当前时间戳
4.1.4 动态变量
例:.data.data.resultList[0].saleServiceInfoVo.serviceId}},取上一个接口的返回值作为本接口入参
4.1.5 随机数
固定位数的随机数
5.数据镜像
将大量测试pin或不同订单状态做成镜像数据,即所有相关的表数据固定,需要新建镜像数据库,存所有相关表、指定订单号/pin的表数据,每次reset至镜像数据。可用job定期或手动reset数据。
接口自动化可将reset镜像数据作为前置条件,来免除单接口测试的前置接口调用,更快速的达到多场景测试效果。
当前阻碍:基础数据库不在我们这边,例如用户信息表,订单数据表,所以无法达到数据镜像效果