如何在Apache JMeter请求中编写字段条件控制逻辑?
实现HTTP请求字段动态包含的方法(debitccy5字段非Null时才加入)
方法1:用Groovy函数直接构造请求体(推荐)
如果你的请求是JSON格式,直接在HTTP请求的「Body Data」中使用__groovy()函数动态生成内容:
${__groovy( def reqData = [:]; // 先添加固定需要的字段 reqData.put("field1", vars.get("field1")); reqData.put("field2", vars.get("field2")); // 处理debitccy5字段 def debitVal = vars.get("debitccy5"); if (debitVal != null && debitVal.trim() != "") { reqData.put("debitccy5", debitVal); } new groovy.json.JsonBuilder(reqData).toPrettyString(); )}
这段脚本会自动判断debitccy5的变量值:非空时加入请求体,为空或null时自动忽略该字段。
方法2:JSR223预处理器+模板拼接(适合复杂场景)
- 先定义不含
debitccy5的基础请求模板,存入变量base_request:{"field1":"${field1}", "field2":"${field2}"} - 在HTTP请求前添加「JSR223 PreProcessor」,写入以下脚本:
def baseBody = vars.get("base_request"); def debitVal = vars.get("debitccy5"); def finalBody = baseBody; // 仅当字段值非空时,拼接字段到请求体 if (debitVal != null && debitVal.trim() != "") { finalBody = baseBody.substring(0, baseBody.length() - 1) + ", \"debitccy5\":\"${debitVal}\"}"; } vars.put("final_request", finalBody); - 在HTTP请求的「Body Data」中引用最终请求体:
${final_request}
关于If Controller无效的说明
If Controller的作用是控制整个采样器是否执行,无法直接修改请求体内部的字段是否存在,所以不适合你的场景,改用上面两种方法即可实现需求。
内容的提问来源于stack exchange,提问作者Samyukta Roy
相关产品推荐
相关产品推荐

