【问题标题】:JSON path extractor for multiple values多个值的 JSON 路径提取器
【发布时间】:2015-01-29 08:10:53
【问题描述】:

我在 jmeter 中使用 json 路径提取器。但是,似乎每个提取器每次只能提取一个值。即名称:- 变量名,JSON 路径:- $.id

如果我需要从 json 中提取 id、name 并希望存储在两个不同的变量中,我可以使用单个 json 提取器。 就像是 名称:- id_value,name_value JSON 路径:- $.id, $.name

json 字符串

 {"id":"blah id", "name":"blah name"}

使用两个提取器来获取两个值非常简单。但是可以在单个提取器中使用吗??

【问题讨论】:

标签: json jmeter


【解决方案1】:

对于 JSON 路径提取器的当前版本 1.2.0,它不受支持。

但是,您可以使用Regular Expression Extractor 完成此操作。

  1. 将正则表达式提取器添加为返回 JSON 字符串的请求的子项
  2. 配置如下:
    • 参考名称:任何有意义的名称,即myVar
    • 正则表达式:{"id":"(.+?)", "name":"(.+?)"}
    • 模板:$1$$2$
  3. 要可视化结果,您可以使用具有内置正则表达式测试器的View Results Tree 侦听器。

4. 其他选项是与 Debug Sampler 结合使用以获取 JMeter 变量名称

所以你可以参考:

  • ID - 作为${myVar_g1}
  • 名称 - 如${myVar_g2}

【讨论】:

    【解决方案2】:

    如果您使用支持JSON Extractor 的 jmeter 版本,您可以仅使用一个 JSON Extractor 后处理器提取多个值并将它们存储在多个变量中。

    请注意,变量名、JSON 路径表达式和默认值必须用分号“;”分隔并且必须按照用户手册中的说明相互匹配数字(3 个变量名 = 3 个表达式和 3 个默认值)。

    【讨论】:

      【解决方案3】:

      这是一个老问题,但我一直在努力解决这个问题,这是我的解决方案。在这里问的情况

      {"id":"blah id", "name":"blah name"}
      

      您可以使用 JSON Extractor Post-processor 解决它。根据我的经验,我无法使用两个后处理器。 这是用于获取 id 和 name 的后处理器:

      在您编写的 JSON 路径表达式中:

      $.["id", "name"]
      

      然后 testVar2 将具有值(来自调试采样器):

      testVar2_1={"name":"blah name","id":"blah id"}
      testVar2_matchNr=1
      

      但是我无法使用 JSON Extractor 后处理器来处理 json 响应,例如:

      {"id":"blah id", "other" : {"name":"blah name"}}
      

      在这种情况下,我必须使用 BeanShell PostProcessor 和这样的脚本:

      import net.minidev.json.parser.JSONParser;
      import net.minidev.json.JSONObject;
      import net.minidev.json.JSONArray;
      
      JSONParser p = new JSONParser(JSONParser.MODE_PERMISSIVE);
      
      String jsonString = prev.getResponseDataAsString();
      JSONObject jsonObj = (JSONObject) p.parse(jsonString);
      String idString = (String) jsonObj.get("id");
      JSONObject otherJSONObject = jsonObj.get("other");
      
      String nameString = (String) otherJSONObject.get("name");
      
      log.info("ID:" + idString);
      log.info("NAME:" + nameString);
      
      vars.put("IDVAR", idString);
      vars.put("NAMEVAR", nameString);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多