为什么要进行测试
程序中的功能限制,如果只有前端进行限制,那么有可能被伪造协议跳过前端限制,直接对后端发起请求
测试用例设计思路
测试用例设计分为三大类,分别是参数类型、功能逻辑和其他
参数类型
参数类型测试用例基于请求参数的类型出发设计,参数类型分为三种:
- 数值型
 
- 字符串型
 
- 对象型
 
数值型
数值型需要设计以下的用例类型:
- 取值范围边界
 
- 取值类型边界
 
- 特殊值(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未去重导致的结果异常
 
功能逻辑
功能逻辑用例设计需要考虑下面三个方面:
- 约束条件
 
- 操作对象
 
- 状态转换
 
约束条件
约束条件主要通过条件限制、数值限制两个方面进行测试
条件限制
- 关系限制:用户之间是好友、关注等
 - 权限限制:拥有某种权限才能操作
 - 距离、位置限制
 - 时间约束
 - 其他
 
数值限制
- 分数限制
 - 等级限制
 - 货币限制
 - 次数限制
 - 参数范围限制
 
操作对象
主要测试以下两个方面
- 不合法对象:接口应该操作指定的对象接口,但是可以传入其他类型的对象进行操作
 
- 不存在对象:指定操作的对象不存在
 
状态转换
状态转换主要测试以下两个方面
- 状态限制:用户进行某一操作时需要处在某个特殊的状态
 
- 状态转换:将被测逻辑抽象成状态机,各个状态之间根据功能逻辑从一个状态切换到另一个状态
 
其他测试
其他测试主要是协议连发和已废弃协议测试
协议连发
- 短时间内连续发送多次领取奖励、购买物品、抽奖协议,可能导致多发或者少发奖励、物品,多扣或者少扣物品
 - 重复发送多次相同协议参数,可能会导致已领取过的奖励重复领取(幂等测试)
 
已废弃协议测试
- 已废弃协议测试主要为一些有定义,但是需要变动或其他原因,目前不可用,但是逻辑代码没有及时删除。如果调用这些协议,可以获得额外的利益