为什么要进行测试
程序中的功能限制,如果只有前端进行限制,那么有可能被伪造协议跳过前端限制,直接对后端发起请求
测试用例设计思路
测试用例设计分为三大类,分别是参数类型、功能逻辑和其他
参数类型
参数类型测试用例基于请求参数的类型出发设计,参数类型分为三种:
- 数值型
- 字符串型
- 对象型
数值型
数值型需要设计以下的用例类型:
- 取值范围边界
- 取值类型边界
- 特殊值(0、负数、其他类型、空)
例如:checkTask(int taskID)中taskID的取值范围是1-35,那么设计用例的时候可以考虑
- 1-35范围内和范围外的值
- 1-35的边界:0、1、35、36
- 类型的特殊值:-1、0、nil、其他类型
- 数据类型的边界:int的最小最大值
常见的问题和风险:
- 特殊值处理不当导致异常
- 类型边界溢出
- 取值范围外值未返回预期错误信息
字符串型
字符串型需要设计以下的用例类型:
- 字符串长度:边界长度、空字符串、null值
- 字符串内容:特殊类型(中文、英文、大小写等)、特殊字符串和敏感词
例如:getDayOfDDHH(String ddhh)中的ddhh可以考虑:
- 长度为4位,可以考虑4位多或者少的参数
- 边界值:String的最大长度
- 特殊值:空字符串、空值
- 字符串内容:数字、非数字、敏感字、特殊字符
可能出现的问题和风险:
- 传入非特定类型,程序异常退出
- 超长的字符串未进行特殊处理,导致存储、显示异常
- 其他用户可见的设置的敏感字
对象型
对象型需要设计以下的用例类型:
- 成员个数:范围边界,空对象,空值,其他类型
- 成员内容:类型合法成员,类型非法成员,重复成员
例如:submitTask(int[] taskID),taskID可以考虑:
- 正常取值:1-5个任务ID
- 边界值:0,1,5,6个任务ID
- 特殊值:负值、空值、0
- 合法ID和不合法的ID
- 重复ID
可能存在的问题和风险:
- 0个item时导致的结果风险
- 重复item未去重导致的结果异常
功能逻辑
功能逻辑用例设计需要考虑下面三个方面:
- 约束条件
- 操作对象
- 状态转换
约束条件
约束条件主要通过条件限制、数值限制两个方面进行测试
条件限制
- 关系限制:用户之间是好友、关注等
- 权限限制:拥有某种权限才能操作
- 距离、位置限制
- 时间约束
- 其他
数值限制
- 分数限制
- 等级限制
- 货币限制
- 次数限制
- 参数范围限制
操作对象
主要测试以下两个方面
- 不合法对象:接口应该操作指定的对象接口,但是可以传入其他类型的对象进行操作
- 不存在对象:指定操作的对象不存在
状态转换
状态转换主要测试以下两个方面
- 状态限制:用户进行某一操作时需要处在某个特殊的状态
- 状态转换:将被测逻辑抽象成状态机,各个状态之间根据功能逻辑从一个状态切换到另一个状态
其他测试
其他测试主要是协议连发和已废弃协议测试
协议连发
- 短时间内连续发送多次领取奖励、购买物品、抽奖协议,可能导致多发或者少发奖励、物品,多扣或者少扣物品
- 重复发送多次相同协议参数,可能会导致已领取过的奖励重复领取(幂等测试)
已废弃协议测试
- 已废弃协议测试主要为一些有定义,但是需要变动或其他原因,目前不可用,但是逻辑代码没有及时删除。如果调用这些协议,可以获得额外的利益