Jmeter JSON Extractor从列表的最后一个检索第二个项目

时间:2017-06-25 21:40:37

标签: json jmeter

我有一个JSON响应,如下所示

{
    "queryStartDate": "20170523134739822",
    "queryEndDate": "20170623134739822",
    "Rows": [
        {
            "hasScdHistoryOnly": false,
            "Values": [
                       "1",
                       "53265",
                       "CO"
            ]
        },
        {
            "hasScdHistoryOnly": false,
            "Values": [
                       "1",
                       "137382",
                       "CO"
                      ]
        },
        {
            "hasScdHistoryOnly": false,
            "Values": [
                       "1",
                       "310824",
                       "CO"
                      ]
        }
    ]
}

我正在使用Jmeter的JSON Extractor后处理器来接收最后一个'Values'列表中的第二个值。即53265,137382,310824。

根据Stefan的介绍:http://goessner.net/articles/JsonPath/index.html#e2,我尝试使用$.Rows[*].Values[-2:-1]$.Rows[*].Values[(@.length-2)],但它们都不起作用。你能帮帮我吗?

2 个答案:

答案 0 :(得分:2)

我相信JMeter正在使用JayWay JSON Path库,因此您应该寻找文档here

一般情况下,我建议使用JSR223 PostProcessor作为JSON路径提取器的替代方法,两者都适用于基本方案,当涉及到高级查询和操作符时,它们的行为很不稳定。

  1. 将JSR223 PostProcessor添加为返回JSON以上的请求的子代
  2. 确保在“语言”下拉列表中选择了“常规”,并勾选“缓存已编译的脚本(如果可用)”框
  3. 将以下代码放入“脚本”区域

    def values = com.jayway.jsonpath.JsonPath.parse(prev.getResponseDataAsString()).read('$..Values')
    
    values.eachWithIndex { val, idx ->
        vars.put('yourVar_' + (idx + 1), val.get(val.size()-2))
    }
    
  4. 它应生成以下JMeter变量:

    yourVar_1=53265
    yourVar_2=137382
    yourVar_3=310824
    

    这似乎是你正在寻找的东西。

  5. 参考文献:

答案 1 :(得分:1)

使用View Results tree的JSon Path Tester我可以看到用于提取值的以下表达式不正确(对于在线JSONPath Online Evaluator正确但不适用于JMeter)

二手表达式:$.Rows[*].Values[-2:-1]

JSon Path Tester的输出:No Match Found. enter image description here

二手表达式:$.Rows[*].Values[(@.length-2)]

JSon Path Tester的输出:Exception: Could not parse token starting at position 16. Expected ?, ', 0-9, * enter image description here

如果使用表达式$.Rows[*].Values[1],则会提取所需的回复。

二手表达式:$.Rows[*].Values[1]

JSon Path Tester的输出:

 Result[0]=53265
 Result[1]=137382
 Result[2]=310824

enter image description here