目前接触及了解到的很多接口测试框架,比较缺乏的一点就是对接口参数异常测试比较薄弱,在此我这边说明下我对参数强度测试的理解及实现;
参数测试要包含:
1. 组合所有参数,不包含无 Value 的参数;
例:API 接口参数@Param A,@Param B,@Param C,测试时参数 C 无 Value,因此传参: {"A":"a","B":"b"}

2.组合所有必选参数,不包含无 Value 的参数

例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),测试时参数 B 无 Value,因此传参: {"A":"a"}
3.组合所有非必选参数,不包含无 Value 的参数

例:API 接口参数@Param A(必选),@Param B(非必选),@Param C(非必选),测试时参数 C 无 Value,因此传参: {"B":"b"}
4.组合必选参数+随机非必选参数,不包含无 Value 的参数

例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时传参: {"A":"a","B":"b","C":"c"}
5.组合随机必选参数+所有非必选参数,不包含无 Value 的参数

例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时传参: {"B":"b","C":"c","D":"d"}
6.组合所有参数,但参数有误,不包含无 Value 的参数

例:API 接口参数@Param AA(必选),@Param BB(必选),@Param CC(非必选),@Param DD(非必选),测试时传参: {"A":"aa","B":"bb","C":"cc","D":"dd"}
7.组合必选参数,但参数有误,不包含无 Value 的参数

例:API 接口参数@Param AA(必选),@Param BB(必选),@Param CC(非必选),@Param DD(非必选),测试时传参: {"A":"aa","B":"bb"}
8.组合非必选参数,但参数有误,不包含无 Value 的参数

例:API 接口参数@Param AA(必选),@Param BB(必选),@Param CC(非必选),@Param DD(非必选),测试时传参: {"C":"cc","D":"dd"}
9.组合所有参数,并额外增加一个参数,不包含无 Value 的参数

(例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时传参: {"A":"a","B":"b","C":"c","D":"d","hahahah":"heiheihei"})
10,随机组合必选参数,不包含无 Value 的参数

(例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时传参: {"A":"a"})
11,随机组合非必选参数,不包含无 Value 的参数

例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时传参: {"D":"d"}
12 组合所有参数,包含带空值的参数

例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时 D 值为空,传参: {"A":"a","B":"b","C":"c","D":""}
13.组合所有必选参数,包含带空值的参数

例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时 B 值为空,传参: {"A":"a","B":""}
14.组合所有非必选参数,包含带空值的参数

例:API 接口参数@Param A(必选),@Param B(必选),@Param C(非必选),@Param D(非必选),测试时 D 值为空,传参: {"C":"c","D":""}

举例我实现的其中一个范例,其他实现差不多类似
GET 方法:

/**
     * Get参数强度为1
     * flag = 1,组合所有必选参数,不包含无Value的参数
     * @param apiData HTTP API相关请求参数
     * @return JSON参数
     */
    public static Object OneAsGetParamsFlag(APIData apiData){
        //思路:1.遍历非必选参数列表,若URI中包含非必选参数,则replace掉该参数和参数值
        String uri = apiData.getAPIDataInfo("uri").toString();
        JSONArray paramsFalseList = JSONArray.fromObject(apiData.getAPIDataInfo("paramsFalse"));//参数类型为非必选的参数列表
        JSONObject headerParams = JSONObject.fromObject(apiData.getAPIDataInfo("headerParams"));//HTTP请求Header中的参数信息
        if (!headerParams.isEmpty() && uri.contains("?")) {
            int index = uri.indexOf("?");
            for (int i = 0; i < paramsFalseList.size(); i++) {
                //判断URI ?以后的数据是否包含非必选字段
                if (uri.substring(index, uri.length()).contains(paramsFalseList.get(i).toString())) {
                    String repalceString = paramsFalseList.get(i).toString() + "=" + headerParams.get(paramsFalseList.get(i)).toString();
                    //判断uri中是否还包含&
                    int replaceIndex = uri.indexOf(repalceString) + repalceString.length();
                    //判断长度是否超过了uri长度
                    if (uri.length() > replaceIndex) {
                        if (uri.contains("&")) {
                            //判断需要替换的下一个字符是否为&符
                            if ("&".equals(uri.substring(uri.indexOf(repalceString) + repalceString.length(), uri.indexOf(repalceString) + repalceString.length() + 1))) {
                                repalceString = repalceString + "&";
                            }
                        }
                    }
                    uri = uri.replaceAll(repalceString, "");
                }
            }
            //若末位为?,则自动截取
            if ("?".equals(uri.substring(uri.length() - 1))) {
                uri = uri.substring(0, uri.length() - 1);
            }
            //若末位为&,则自动截取
            if ("&".equals(uri.substring(uri.length() - 1))) {
                uri = uri.substring(0, uri.length() - 1);
            }
            return uri.toString();
        } else {
            return uri.toString();
        }

    }

POST 方法:

/**
     * POST参数强度为1
     * flag = 1,组合所有必选参数,不包含无Value的参数
     * @param apiData HTTP API相关请求参数
     * @return JSON参数
     */
    public static Object OneAsPostParamsFlag(APIData apiData){
        JSONArray paramsFalseList = JSONArray.fromObject(apiData.getAPIDataInfo("paramsFalse"));//参数类型为非必选的参数列表
        //判断params类型
        if ("{".equals(apiData.getAPIDataInfo("params").toString().substring(0, 1))) {
            JSONObject paramsJSONObject = new JSONObject();

            paramsJSONObject = JSONObject.fromObject(apiData.getAPIDataInfo("params"));
            //遍历paramsFalse所有参数
            for (int i = 0; i < paramsFalseList.size(); i++) {
                //若包含params中包含非必选字段,则删除paramsJSONObect中对应key
                if (paramsJSONObject.containsKey(paramsFalseList.get(i))) {
                    paramsJSONObject.remove(paramsFalseList.get(i));
                }
            }
            return paramsJSONObject;
        } else {
            //处理思路:把原始jsonarray中的jsonObject数据进行遍历
            //遍历其中包含非必选字段,并进行remove
            //重新组包成JSONArray
            JSONArray paramsJSONArray = new JSONArray();
            paramsJSONArray = JSONArray.fromObject(apiData.getAPIDataInfo("params"));
            JSONObject tempjson = JSONObject.fromObject(paramsJSONArray.get(0));//把第0序号的数据写入道JSONObject
            JSONArray tempjsonarray = new JSONArray();
            //遍历paramsFalse所有参数
            for (int i = 0; i < paramsFalseList.size(); i++) {
                //若包含params中包含非必选字段,则删除paramsJSONObect中对应key
                if (tempjson.containsKey(paramsFalseList.get(i))) {
                    tempjson.remove(paramsFalseList.get(i));
                }
            }
            tempjsonarray.add(tempjson);
            return tempjsonarray;
        }
    }


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