题记:关于接口测试的归纳总结的想法来源于去年的招聘,每次面试都会问关于接口测试的一些问题,可谓“一千个读者眼中就有一千个哈姆雷特”,每一个测试人员眼中都有不同的对接口测试的理解,因为有了去年那一阶段的招聘过程,我才陆陆续续的对服务端的接口测试要点和用例分析进行整理归纳,补充归档,也就有了这篇文档,欢迎阅读的朋友们提出建议。
服务端的接口测试我们一般从功能开始进行测试,比如请求参数和响应参数的校验,业务逻辑或业务规则的校验,数据库操作的校验。功能正常后会根据需要进行安全相关的检查、性能测试以及系列扩展测试,比如与历史版本的兼容性测试、接口的超时验证以及设计合理性验证等,用例设计也是从这几个方面进行分析设计,下面的思维导图是一个概要的测试关注方向:
详细介绍如下:
针对输入
输入主要是指接口的入参,我们平常的测试中,会先考虑正常的入参,以及异常的入参,异常情况包括:参数异常和数据异常,用例设计这块使用较多的是等价类划分和边界值分析
A、正常的入参
正常的入参很好理解,就是根据接口设计文档的入参标准,输入正常的参数,响应按接口设计文档的约定条件正常返回
B、参数异常
参数异常包括:参数为空,多参或少参,错误的参数
C、数据异常
数据异常:数据类型错误、非空参数为空,长度不符合设计,不在字典范围内的数据,不合法的成员,特殊字符或敏感字符,存在关联关系的参数数据异常等
针对处理逻辑
接口测试前一般研发会提供接口设计文档或业务相关的设计图、流程图,针对业务流程的处理逻辑,我们可以从入参的限制条件、事件的操作对象、业务的状态转换
A、 限制条件分析
数值的限制:字典,等级,行业相关限制,金额限制,分数限制等
状态的限制:有效|无效,在线|离线,拉黑|洗白等
关系的限制:存在或不存在,绑定或解绑等
权限的限制:管理员,普通用户等
B、 对象分析
对象分析主要是对合法和不合法的对象进行操作,比如银行卡用户对卡进行充值,则可能存在:用户A使用非用户A的卡充值;用户A使用自己的卡进行充值,卡已过有效期;用户A使用自己的卡进行充值,卡为黑名单或挂失等。
C、 状态转换的分析
比如支付类业务,先支付成功,撤单后会退款,再次支付如果支付未成功,则是支付失败,状态之间的切换是否正常,未按正常业务顺利进行操作时,状态怎么显示,是否可控,是否出现异常状态,空状态业务怎么处理等
D、 时序分析
一些复杂的活动中,一个活动是由一系列的动作按照指定顺序进行,这些动作形成一个动作流,是有按照这个顺序依次执行,才能等到预期的结果,那么在执行过程中发生的其他分支动作程序会作何处理
比如斑马停车风控业务,如果在入站后车辆直接掉头不驶入高速业务如何处理?
针对输出
在考虑异常时,通常我们都会想到正常情况,无效的情况,但是不一定能覆盖所有错误码,而接口定义返回的错误码可以帮助我们补充这一部分的用例,比如网络异常,无效的规则,无效的参数,无效的业务ID,无效的任务,服务器异常等,把errorcode的值都补充上去可以设计更多的用例
这种根据输出进行设计用例,可以发现前后端是否正常输出结果,提示是否友好,提示是否出现敏感信息等
数据库操作
A、对数据库操作是否频繁,是否会在写库过程中占用大量的CPU,写库完成后进程是否释放
B、业务数据入库是否正常,是否有重复数据入库,是否出现乱码;日志数据入库是否正常
C、数据更新是否正常,尤其是时间类字段,时间是否为24小时制的格式
D、数据删除、备份是否正常
安全性
敏感信息是否加密(如银行账号,密码,转账金额)
性能相关
A、接口在什么情况下会出现并发,并发场景是什么,什么情况下的并发会导致问题
B、最大并发,响应时间,吞吐量,资源消耗情况
接口超时
接口正常情况下是有返回的,那么如果接口不返回呢?所以接口超时后的处理也是测试需要考虑的部分,如果超时处理不当,可能会引起进程阻塞,或者超时后又接收到接口返回导致逻辑错乱
与历史版本的兼容性分析
已废弃的协议或接口,代码并未注释,在某种特定的情况下可能会触发历史版本已废弃的协议或接口,导致用户使用或功能调用后出现意想不到的问题,损失
同一套系统,不同服务之间的接口相互调用时,新接口是否受历史接口的影响,尤其是新旧接口都对某一个功能进行处理,是否存在业务不兼容的问题
这一点需要测试人员是长期的测试一个系统的,那么可能会想到这种场景,会清楚的知道什么时候哪个版本进行了重构,废弃了那些接口,新增了那些接口,哪些场景会触发历史接口的某个规则
接口设计合理
接口字段是否冗余,接口是否返回了调用方期望得到的信息,接口定义是否满足所有调用者的需求,接口调用是否方便,接口是否可扩展,接口参数使用是否方便,接口的业务规则是否都正确,接口都整个服务的使用会产生那些影响