Java中数据驱动测试的多接口关联处理
Excel数据准备
在原有的Excel测试数据表格中新增一列“提取响应”,用于维护接口请求后需要提取的响应信息,该列数据格式为JSON字符串。例如:
接口名称 | 请求参数 | 提取响应 |
---|---|---|
登录接口 | {“username”:“admin”,“password”:“123456”} | {“token”:“$.data.token”} |
查询接口 | {“userId”:“{{token}}”} | {“userInfo”:“$.data.user”} |
实现方案
1. 提取响应功能实现
在框架中增加响应提取逻辑:
// 接口请求完成后执行响应提取
public void extractResponse(Response response, String extractRules) {// 1. 解析extractRules JSON字符串JSONObject rules = JSON.parseObject(extractRules);// 2. 遍历提取规则for (Map.Entry<String, String> entry : rules.entrySet()) {String varName = entry.getKey(); // 变量名,如tokenString jsonPath = entry.getValue(); // JSON路径,如$.data.token// 3. 使用JsonPath从响应中提取值Object value = JsonPath.read(response.getBody(), jsonPath);// 4. 存入环境变量区EnvironmentVars.put(varName, value);}
}
2. 环境变量区设计
创建环境变量存储区,使用HashMap实现:
public class EnvironmentVars {private static final Map<String, Object> vars = new HashMap<>();public static void put(String key, Object value) {vars.put(key, value);}public static Object get(String key) {return vars.get(key);}public static void clear() {vars.clear();}
}
3. 变量引用替换机制
实现变量引用替换功能:
public String replaceVariables(String input) {// 1. 定义正则表达式匹配{{XXX}}格式Pattern pattern = Pattern.compile("\\{\\{(.*?)\\}\\}");Matcher matcher = pattern.matcher(input);StringBuffer sb = new StringBuffer();// 2. 查找并替换所有匹配项while (matcher.find()) {String varName = matcher.group(1); // 获取变量名Object value = EnvironmentVars.get(varName); // 从环境变量获取值// 3. 替换匹配内容if (value != null) {matcher.appendReplacement(sb, value.toString());} else {// 变量不存在时保留原样或抛出异常matcher.appendReplacement(sb, matcher.group());}}matcher.appendTail(sb);return sb.toString();
}
引用规则配置
框架支持自定义变量引用规则,可通过配置文件指定:
# 引用规则配置
variable.prefix={{
variable.suffix=}}
使用时根据配置自动适配不同风格的引用方式:
- Postman风格:
{{token}}
- JMeter风格:
${token}
- 自定义风格:如
#token#
等
应用场景示例
-
登录-查询流程:
- 登录接口返回token
- 后续查询接口在请求参数中使用
{{token}}
引用
-
订单创建-支付流程:
- 创建订单接口返回orderId
- 支付接口在请求参数中使用
{{orderId}}
引用
-
多步骤数据依赖:
- 第一步接口返回的数据
- 第二步接口同时引用多个变量:
{"id":"{{userId}}","token":"{{token}}"}