多个接口只要一个失败,只跳过关联接口
步骤 1:在“上一个接口”设置开关变量
在上一个接口上右键 →添加 → 后置处理器 → JSR223 后置处理器,填入脚本:
java
// 方式一:只看 HTTP 成功 //if (prev.isSuccessful()) { // vars.put("LOGIN_OK", "true"); //} else { // vars.put("LOGIN_OK", "false"); //} // 方式二: HTTP 成功 加 业务逻辑判断(例如响应体包含 "code":0 才算成功) //获取HTTP响应状态码 String httpCode = prev.getResponseCode(); // 获取接口完整返回体 String resBody = prev.getResponseDataAsString(); // 双重判断:http状态200 且 业务码code=0 if (httpCode == "200" && resBody.contains("\"code\":0")) { vars.put("LOGIN_OK", "true"); } else { vars.put("LOGIN_OK", "false"); }//方式二:另一种写法 if (prev.getResponseCode() == "200" && prev.getResponseDataAsString().contains("\"code\":0")) { vars.put("LOGIN_OK", "true"); // 成功标记true } else { vars.put("LOGIN_OK", "false"); // 失败标记false }prev是 JMeter 内置变量,代表上一个取样器的结果。
LOGIN_OK 自定义变量,用来给 If 控制器判断
![]()
步骤 2:用 If 控制器包裹“关联接口”
在需要跳过的接口外层添加逻辑控制器 → If 控制器,条件填:
text
${__jexl3("${LOGIN_OK}" == "true")}上一个接口为groovy 模式,必须勾选【解释条件为变量】
逻辑:只有LOGIN_OK=true(接口 A 成功),才会执行内部接口 B;A 失败时直接跳过 B。
然后在 If 控制器下面放你所有需要依赖上一个接口的请求。
结构树形图
text
线程组 ├── 登录 │ └── JSR223 后置处理器(设置 LOGIN_OK) ├── If 控制器(条件:"${__jexl3("${LOGIN_OK}" == "true")}") │ ├── 查询用户信息 │ │ └── JSR223 后置处理器(设置 QUERY_USER_OK) │ ├── If 控制器(条件:"${__jexl3("${QUERY_USER_OK}" == "true")}") │ │ └── 修改用户信息 │ ├── 查询订单列表 │ │ └── JSR223 后置处理器(设置 QUERY_ORDER_OK) │ └── If 控制器(条件:"$${__jexl3("${QUERY_ORDER_OK}" == "true")}") │ └── 修改订单状态 └── 其他不依赖登录的接口(不受影响)变量默认值----可以没有
在测试计划开头添加一个配置元件 → 用户定义的变量,把开关变量默认设为false,避免变量未定义时报错:
text
LOGIN_OK = false QUERY_USER_OK = false QUERY_ORDER_OK = false