避免在 Jmeter 中使用多个请求覆盖 Hashmap
Avoid Hashmap overwriting in Jmeter with multiple requests
我在 Jmeter 线程组中添加了一个 Beanshell post 处理器,并且我在使用 post 处理器的同一线程组中有多个 HTTP 请求。我正在创建一个 Hashmap 并在执行每个 HTTP 请求后将值放入地图,然后创建地图的 json 对象。问题是在每次 HTTP 请求之后,映射值只会被执行的最后一个 HTTP 请求的最新值替换。如何避免这种情况?
我的post处理器中的代码如下:
HashMap map = new HashMap();
map.put(extID,intID);
object = new JSONObject(map);
vars.put("idMap" , object.toString());
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject)parser.parse(vars.get("idMap"));
JMeter 的 Post-处理器服从 JMeter Scoping Rules,因此如果您将 Post 处理器放置在与采样器相同的级别 - Post 处理器将被执行 在每个采样器之后
如果您希望它仅在特定采样器之后执行 - 使 Post处理器成为该采样器的直接子级
还要注意 since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting so it worth considering migrating, you won't have to change a single line of your code if you want, or alternatively Groovy has built-in JSON support
您可以使用 props
创建地图并与所有线程共享,示例:
Map<String, String> map = props.get("map")
if (map == null) {
map = new HashMap<>()
} else {
// in your case map.put(extID,intID);
String uuid = UUID.randomUUID().toString().replace("-", "")
map.put(uuid,uuid)
}
props.put("map", map)
vars.putObject("map", map)
我在 Jmeter 线程组中添加了一个 Beanshell post 处理器,并且我在使用 post 处理器的同一线程组中有多个 HTTP 请求。我正在创建一个 Hashmap 并在执行每个 HTTP 请求后将值放入地图,然后创建地图的 json 对象。问题是在每次 HTTP 请求之后,映射值只会被执行的最后一个 HTTP 请求的最新值替换。如何避免这种情况?
我的post处理器中的代码如下:
HashMap map = new HashMap();
map.put(extID,intID);
object = new JSONObject(map);
vars.put("idMap" , object.toString());
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject)parser.parse(vars.get("idMap"));
JMeter 的 Post-处理器服从 JMeter Scoping Rules,因此如果您将 Post 处理器放置在与采样器相同的级别 - Post 处理器将被执行 在每个采样器之后
如果您希望它仅在特定采样器之后执行 - 使 Post处理器成为该采样器的直接子级
还要注意 since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting so it worth considering migrating, you won't have to change a single line of your code if you want, or alternatively Groovy has built-in JSON support
您可以使用 props
创建地图并与所有线程共享,示例:
Map<String, String> map = props.get("map")
if (map == null) {
map = new HashMap<>()
} else {
// in your case map.put(extID,intID);
String uuid = UUID.randomUUID().toString().replace("-", "")
map.put(uuid,uuid)
}
props.put("map", map)
vars.putObject("map", map)