想要使用以下参数生成Post请求
的参数:
is_checked: false
rc_notes: "test_notes"
tags: [{id: 23, is_checked: false},{id:67, is_checked:true},{id: 63, is_checked: false},{id:16, is_checked:true}]
theos: []
在上文中,标记和 theos 数组值将根据给定的输入动态变化。使用输入数据,JDBC sampler将从DB获取数据,并根据它来构造POST请求参数。
尝试过BeanShell PreProcessor,为Post调用构造参数。由于参数不足,导致 400错误。
BeanShell代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.lang.Integer;
import java.util.List;
import java.util.Map;
//Resultset count from the JDBC sampler
int count = Integer.parseInt(vars.get("tag_id_#"));
Map tag_parameter_map = null;
List tag_param_list = new ArrayList();
List theo_param_list = new ArrayList();
for(int i=1;i<=count;i++) {
tag_parameter_map = new HashMap();
tag_parameter_map.put("tag", vars.get("tag_id_" + String.valueOf(i)).toString());
tag_parameter_map.put("is_checked", "false");
tag_param_list.add(tag_parameter_map);
}
sampler.addArgument("rc_notes", "notes");
sampler.addArgument("is_checked", "false");
sampler.addArgument("tags", tag_param_list);
sampler.addArgument("theos", theo_param_list);
任何人都可以指导我如何实现这一目标。
答案 0 :(得分:0)
您需要提供JSON格式的params和正确的类型(数字和布尔值)。你需要一些库,例如org.json(别忘了用jmeter包括Jar)。所以它看起来像这样:
JSONArray tag_param_list = new JSONArray(); // empty array
JSONArray theo_param_list = new JSONArray(); // we will add elements in the loop
for(int i=1;i<=count;i++) {
// Construct object {id:X,is_checked:false} and add to array
theo_param_list.put(new JSONObject()
.put("id", Integer.parseInt(vars.get("tag_id_" + i)))
.put("is_checked", false));
}
sampler.addArgument("tags", tag_param_list.toString());
sampler.addArgument("theos", theo_param_list.toString());
答案 1 :(得分:0)
与OP讨论后,似乎要求是:
:
(通常不是=
)&
)有了这套要求,就无法使用addArgument
。相反,我提出以下解决方案:
您仍然需要相同的预处理器,代码几乎完全相同,但不是将值作为参数添加到HTTP请求中,而是将它们保存为变量:
JSONArray tag_param_list = new JSONArray(); // empty array
JSONArray theo_param_list = new JSONArray(); // we will add elements in the loop
for(int i=1;i<=count;i++) {
// Construct object {id:X,is_checked:false} and add to array
theo_param_list.put(new JSONObject()
.put("id", Integer.parseInt(vars.get("tag_id_" + i)))
.put("is_checked", false));
}
vars.put("tags", tag_param_list.toString());
vars.put("theos", theo_param_list.toString());
vars.put("rc_notes", "notes");
vars.put("is_checked", "false");
现在在HTTP请求中,切换到“正文数据”标签(而不是“参数”标签)并指定原始正文数据,如下所示:
rc_notes: ${rc_notes}
is_checked: ${is_checked}
theos: ${theos}
tags: ${tags}
这会产生这样的帖子数据:
POST data:
rc_notes: notes
is_checked: false
theos: [{"is_checked":false,"id":1},...]
tags: []
这看起来像原始海报想要的那样。