接口测试平台:支持函数助手
- 2020 年 1 月 2 日
- 筆記
因为接口的需求,需要支持类似于Jmeter中函数助手的功能。 以以下两个函数进行举例:
- Random

Random
- time

time
其实处理方式很简单,因为我们原本对${KEY}
类型的字段,有一个getVariable函数的处理,详情可参考接口测试平台:接口执行顺序与依赖。我们只需要对${KEY}
中的KEY的字符做解析,如果key以"__"开头,则调用函数助手。

下面只以random和time两个函数为例,讲解functionAssistant。
private static final String RANDOM = "__Random"; private static final String TIME = "__time"; /** 函数助手 */ private static String functionAssistant(String key){ /** * 入参:最小值,最大值,变量名 * __Random(1,99,INT) => 从1~99的数字,保存变量为 INT */ if (key.startsWith(RANDOM)){ String parameters = key.replace(RANDOM + "(","").replace(")",""); String[] paramList = parameters.split(","); // 格式不对,返回空string if (paramList.length != 3 && paramList.length != 2){ return key; } Long min = Long.valueOf(paramList[0]); Long max = Long.valueOf(paramList[1]); String value = String.valueOf((long) (min + Math.random()*(max - min +1))); if (paramList.length == 3){ ApiTestConfig.globalVariableMap.put(paramList[2], value); } return value; } /** * 入参:时间格式,变量名 * __time(,) 获取当前时间毫秒 * __time(/1000,) 获取当前时间秒 * __time(yyyy-MM-dd,) 获取yyyy-MM-dd格式时间 */ if (key.startsWith(TIME)){ String parameters = key.replace(TIME + "(","").replace(")",""); String[] paramList = parameters.split(","); Long now = System.currentTimeMillis(); if (paramList.length == 0){ return String.valueOf(now); } if (paramList[0].isEmpty() && !paramList[1].isEmpty()){ // __time(,Var) ApiTestConfig.globalVariableMap.put(paramList[1], String.valueOf(now)); } if (paramList[0].equals("/1000")){ String value = String.valueOf(now / 1000); // __time(/1000,Var)或 __time(/1000,) if (paramList.length == 2){ ApiTestConfig.globalVariableMap.put(paramList[1], value); } return value; } // __time(yyyy-MM-dd,)或__time(yyyy-MM-dd,Var),包含其他各种日期格式 SimpleDateFormat sdf = new SimpleDateFormat(paramList[0]); String value = sdf.format(new Date(now)); if (paramList.length == 2){ ApiTestConfig.globalVariableMap.put(paramList[1], value); } return value; } return key; }
更多函数,可直接在functionAssistant内进行拓展。