测试与实验

“单一变量法”,咋这么熟悉的名字?

高中生物课、化学、物理,大学时代的各种实验课中都有提及。

就是这个 “单一变量法”,也可用于软件测试领域。

示例

doSomething(req) 表示为接口测试过程中的某个方法,Java 代码如下(仅表示函数内部的一些调用细节):

public DoSomethingRes doSomething(DoSomethingReq req) {
  // check params
  check(req);
  DoSomethingRes res= null;

  SomeRpc rpc = getSomeRpc();
  SomeRpcReq rpcReq = build(req);
  rpc.doRpcMethod(rpcReq);

  // do something else

  return res;
}

请求参数:

{
  "user": "String",
  "type": "1",
  "queryStartDate": "2018-09-30"
}

其中 user 为字符串类型;
type 为枚举类型,取值范围为 [0,1,2]
queryStartDate 为日期格式,格式为 yyyy-MM-dd.

返回结果:

{
  "success": true,
  "message": "ok",
  "data":[
    {
      // json object
    },
    {
      // json object
    }
  ]
}

其中 success=true 表示接口调用成功,success=false 表示接口内部出现异常。
data 是一个对象数组。

单一变量法实践如下

选择 user、type、queryStartDate 三个正确参数,保持其中 2 个参数不变,仅修改其中 1 个参数。

  1. 检查各个参数进行非空校验,可以得到下述用例:
    (1)user=null,type=1,queryStartDate=2018-09-30
    (2)user=helloworld,type=null,queryStartDate=2018-09-30
    (3)user=helloworld,type=1,queryStartDate=null

  2. 检查各个参数进行空字符串校验,可以得到下述用例:
    (1)user=空字符串,type=1,queryStartDate=2018-09-30
    (2)user=helloworld,type=空字符串,queryStartDate=2018-09-30
    (3)user=helloworld,type=1,queryStartDate=空字符串

  3. 保持 user、queryStartDate 不变,遍历 type,检查 type 取不同枚举值接口返回结果是否正确,可以得到下述用例:
    (4)user=helloworld,type=0,queryStartDate=2018-09-30
    (5)user=helloworld,type=1,queryStartDate=2018-09-30
    (6)user=helloworld,type=2,queryStartDate=2018-09-30

  4. 单一变量法检查接口参数是否正常,可能会导致部分组合参数不能覆盖,需要在测试过程中根据实际代码覆盖率情况补充测试用例。
    举例:doSomething 内部针对特殊用户,代码执行了不同的业务代码,此时需要对特殊用户增加测试用例。
    (7)user=admin(特殊权限用户),type=0,queryStartDate=2018-09-30
    (8)user=admin(特殊权限用户),type=1,queryStartDate=2018-09-30
    (9)user=admin(特殊权限用户),type=2,queryStartDate=2018-09-30

为何使用单一变量法进行接口测试?

使用单一变量法,可以方便组织测试用例,甚至批量生成用例,并快速进行接口自动化测试。

代码实践

由你来发挥,建议动手实践。

申明

本文由作者同步发布到segmentfault知乎社区testerhome


↙↙↙阅读原文可查看相关链接,并与作者交流