导语
随着测试分析和分层测试的深化,“接口测试”出现在我们视野的频次越来越高。那么接口测的用例设计常用哪些方法呢?本文将详细描述。
1 接口测试
1.1 接口测试
接口:主要是子模块或者子系统间交互并相互作用的部分。
这里说的接口是广义的,客户端与后台服务间的协议;插件间通信的接口;模块间的接口;再小到一个类提供的方法;都可以理解为接口。
接口测试:是指针对模块或系统间接口进行的测试。
1.2 接口测试发现的典型问题
接口测试经常遇到的bug和问题,如下:
(1)传入参数处理不当,导致程序crash;
(2)类型溢出,导致数据读出和写入不一致;
(3)因对象权限未进行校验,可以访问其他用户敏感信息;
(4)状态处理不当,导致逻辑出现错乱;
(5)逻辑校验不完善,可利用漏洞获取非正当利益等。
2 接口测试用例设计
上图为一个典型的接口。一个接口通常是有输入输出的,输入就是我们常见的入参,输出有时有,有时没有。调用相关接口,接口会执行相关处理逻辑。
接口测试的用例设计,主要从输入和接口处理两方面考虑:
1)针对输入,可按照参数类型进行设计;
2)针对接口处理,可按照逻辑进行用例设计;
3)针对输出,可根据结果进行分析设计。
2.1 针对输入设计
对于接口来说,输入就是入参。常见参数类型有:
(1)数值型(int,long,float,double等)
(2)字符串类型
(3)数组或链表
(4)结构体
结构体(struct)是一些元素的结合,元素实际也是数值型,字符串型,数组或链表。
下面详细说明数值型、字符串型、数组或链表三种参数类型用例设计。
2.1.1 数值型
数值型的参数主要考虑以下几个方面设计:
如果参数规定了值的范围,则需要考虑等价类取值范围内、取值范围外,取值的边界,如有需要,可能会遍历取值范围内的各个值。
例如检查权限的接口:TaskChecker.checkTask(int taskID) taskID的取值范围是1-35,那么设计时考虑:
●1-35范围内和范围外的值;
●1-35的边界:0,1,35,36;
●类型的特殊值:-1,0
●数据类型的边界值:int的最小值最大值;
●因为1-35代码的权限ID不同,可能需要遍历1-35的每个值。
常见问题和风险:
●特殊值处理不当导致程序异常退出;
●类型边界溢出
●取值范围外值未返回正确的错误信息等
2.1.2 字符串型
字符串型的参数,主要考虑字符串的长度和内容:
例如接口转换设置闹钟的接口DateUtil.getDayOfDDHH(String ddhh),用例可以考虑:
●长度为4位,比4位少,比4位多;
●边界值:String的最大长度;
●特殊值:空字符;
●字符串内容可考虑类型:数字,非数字;
●特殊字符。
●如果是输入用户输入且其他用户可见的内容,则还需要考虑敏感字是否被正常过滤。
可能出现的问题和风险:
●传入非特定类型程序异常退出
●超长字符未进行处理,导致存储、显示等异常
●其他用户可见设置的敏感字
2.1.3 数组或链表类型
参数类型为数组或链表时,用例可以考虑:
例如批量提交任务的接口submitTask(int[] taskID),参数用例设计考虑:
●正常取值:1-5个权限,范围外:6个权限;
●边界值:1-35的边界值,请求允许最大最小值;
●特殊值:0个;
●合法ID和不合法的;
●重复的ID等。
可能存在的问题和风险:
●0个item时程序异常退出;
●重复的item处理时未去重导致结果异常等。
2.2 针对逻辑设计
接口需要进行一些逻辑处理的,那么按逻辑设计用例可以从以下几个角度分析。
2.2.1 约束条件分析
(1)数值限制:分数限制、金币限制、等级限制等等。
例如:兑换Q币活动要求积分>50才可参与。
(2)状态限制:登录状态等。
例如:同步用户信息需要先登录账号。
(3)关系限制:绑定的关系,好友关系等。
例如:帮家人防骗功能只能查询绑定家人的来电信息。
(4)权限限制:管理员等。
约束条件的测试在功能测试中经常遇到,在接口测试中更为重要。它的意义在于:用户进行操作时,在该操作的前端可以已经进行了约束条件的限制,故用户无法直接触发请求该接口。但是实际上,如果有其他手段:例如UI有bug或者通过技术手段直接调用接口,那么接口是否针对这些条件进行了限制就尤为重要。