避免在 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)