【问题标题】:Avoid Hashmap overwriting in Jmeter with multiple requests避免使用多个请求在 Jmeter 中覆盖 Hashmap
【发布时间】:2021-11-08 11:39:47
【问题描述】:

我在 Jmeter 线程组中添加了一个 Beanshell 后处理器,并且在使用后处理器的同一线程组中有多个 HTTP 请求。我正在创建一个 Hashmap 并在执行每个 HTTP 请求后将值放入地图中,然后创建地图的 json 对象。问题在于,在每次 HTTP 请求之后,映射值只会被上次执行的 HTTP 请求的最新值替换。如何避免这种情况?

我的后处理器中的代码如下:

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 hashmap


    【解决方案1】:

    您可以使用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)
    

    【讨论】:

    • 非常感谢。这部分有效,如果我执行第一个 http 请求两次,那么地图只存储最新的值,即只存储第二个/最新的迭代值
    • @AH1993 所以使用不同的键,因为使用迭代号
    【解决方案2】:

    JMeter 的后处理器服从JMeter Scoping Rules,因此如果您将后处理器放置在与采样器相同的级别 - 后处理器将在每个采样器之后执行

    如果您希望它仅在特定采样器之后执行 - 使 PostProcessor 成为此采样器的直接子级

    还要注意since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting,因此值得考虑迁移,如果需要,您不必更改任何一行代码,或者Groovy has built-in JSON support

    【讨论】:

    • 谢谢。但这并不能解决我的问题。我希望地图在所有请求之间共享,而不是被覆盖;这就是我在这里寻找的。​​span>
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多