接口测试平台:接口执行顺序与依赖(旧版已废弃)
在不同的case中,接口的依赖一般通过两个维度去控制:
- 变量:类似于订单号,cookie等等,其本质都是变量
- 接口的执行顺序:如果要在A接口中拿到一个字段,在B接口中使用,那当然我们就得确保A接口会先执行,并保证会保存所需要的变量
下面会分开讲一下,两个维度分别是如何处理的
1.变量的保存
在平台中,变量有一种通用的保存方式和存储方式,例如我有一个字段叫variable,那在保存时,会声明一个变量叫VARIABLE,在其他接口引用时使用${VARIABLE}即可。
变量的保存有两种方式:
全局变量
有一个配置页面可以配置全局变量,所有接口中均可引用该变量
执行开始时,会有一个从数据库中获取所有全局变量的操作,然后赋值给一个全局的globalVariableMap// 全局变量赋值
ListvariableList = apiTestConfigMapper.selectGlobalVariable();
for (Variable variable:variableList){ApiTestConfig.globalVariableMap.put(variable.getVariableName(), variable.getVariableValue());
}
接口内获取的变量
在接口的响应结果中,可以通过JsonPath和正则表达式两种方式获取变量。当然,在有多个接口的情况下,保存变量的接口必须在引用接口之前执行。
执行接口的函数内,有一个saveVariable,用以从返回结果中,保存所有需要在后续接口中使用的变量。
public static void saveVariable(String result, TestCase testCase, Integer collectionId) {
if (!result.isEmpty()) {
List<VariableSave> variableList = JSON.parseArray(testCase.getVariableListValue(), VariableSave.class);
for (VariableSave variable : variableList) {
// 提取方式:1.jsonPath 2.正则表达式
int extractMethod = variable.getExtractMethod();
String variableName = variable.getVariableName();
String extractRule = variable.getExtractRule();
// 提取到的结果
String extractRes = "";
if (extractMethod == 1) {
try {
Object o = JsonPath.read(result, extractRule);
extractRes = String.valueOf(o);
} catch (Exception e) {
log.error(String.valueOf(e));
}
} else if (extractMethod == 2) {
Pattern p = Pattern.compile(extractRule);
Matcher m = p.matcher(result);
if (m.find()) {
extractRes = m.group();
}
}
// 如果是简单的调试执行则将变量保存到全局变量map中,如果是集合执行,则只保存到集合变量map中
if (collectionId == 0) {
ApiTestConfig.globalVariableMap.put(variableName, extractRes);
} else {
ApiTestConfig.collectionVariableMap.put(variableName, extractRes);
}
}
}
}
2.变量的获取
url、port、header、body等部分在进行请求前,都会经过一个getVariable函数进行处理,该函数的作用则是通过正则检查参数中是否存在${XX}形式的存在,如果有的话在将其视为变量,去全局变量map中查询对应的变量值进行替换
private static String getVariable(String string,Integer collectionId){
HashMap<String,String> variableMap = ApiTestConfig.globalVariableMap;
// 如果为集合执行,会再次获取集合内变量
if (collectionId != 0){
variableMap.putAll(ApiTestConfig.collectionVariableMap);
}
// 查询string中是否有${KEY}格式的数据,如果有则将其替换为VALUE
if (!string.isEmpty()){
String reg = "\\$\\{.*?}";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(string);
// 遍历替换所有的变量
while (m.find()){
String key = m.group().replace("${","").replace("}","");
if (variableMap.containsKey(key)){
string = string.replace(m.group(),variableMap.get(key));
}
}
return string;
} else {
return "";
}
}
3.接口执行顺序
在接口列表页,只有多选,只能按照接口的录制顺序来执行。
在集合内进行测试时,可通过鼠标拖拽的方式修改case的顺序
这边变可快速修改case的顺序,从而到达控制case执行顺序的需求。
有疑问的小伙伴欢迎在文章下方留言,我会根据问题不断优化文章内容!
还没有评论,来说两句吧...