加特林:提取崩溃:解析json响应时输入预期错误结束

时间:2020-07-21 10:54:01

标签: gatling jsonpath

这是JSON响应:

[{
    "startTime": "2020-07-21T15:20:00.000+00:00",
    "endTime": "2020-07-21T15:40:00.000+00:00",
    "availabilities": [{
        "availabilityId": "eyJJZCI6MTA4N",
        "startTime": "2020-07-21T15:20:00.000+00:00",
        "endTime": "2020-07-21T15:40:00.000+00:00",
        "channel": "PHONE",
        "programId": "Msff",
        "providerDetails": {
            "firstName": "abc",
            "lastName": "abc",
            "providerTitle": "NURSE"
        }
    }]
}, {
    "startTime": "2020-07-21T15:40:00.000+00:00",
    "endTime": "2020-07-21T16:00:00.000+00:00",
    "availabilities": [{
        "availabilityId": "eyJJZCI6MTA4NDM2MiwiU3RhcnRUa",
        "startTime": "2020-07-21T15:40:00.000+00:00",
        "endTime": "2020-07-21T16:00:00.000+00:00",
        "channel": "PHONE",
        "programId": "Msff",
        "providerDetails": {
            "firstName": "def",
            "lastName": "def",
            "providerTitle": "NURSE"
        }
    }]
}]

这是我用来从json响应中提取第一个“ availabilityId”的检查

check(
  jsonPath("$[0][availabilities].[0].availabilityId") saveAs "availabilityId"
)

但我遇到错误:

jsonPath($[0][availabilities].[0].availabilityId).find.exists extraction crashed: end of input expected

我在https://jsonpath.com/上验证了路径,我可以看到结果。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

这是JsonPath当前状态有多糟糕的一个示例:

  • JsonPath当前没有真正的规范
  • 由于original "paper" (a simple blog post actually)中存在漏洞,并且实现者会按照自己的解释和喜好进行操作,因此实现之间的差异很多
  • jsonpath.com当前不是参考,仅是购买域名的人

在这里,如果您检查原始来源,您会发现正方形表示法应该使用单引号来包装字段名称:

JSONPath expressions can use the dot–notation

$.store.book[0].title

or the bracket–notation

$['store']['book'][0]['title']

这里发生的是,加特林实现坚持了这一定义,而jsonpath.com上使用的JavaScript允许放弃单引号。

此外,括号之间也不应该有圆点,因此路径应为:

$[0]['availabilities'][0].availabilityId

您还可以坚持使用更常见的点符号:

$[0].availabilities[0].availabilityId

有一个ongoing effort on creating a proper JsonPath implementation。在进行这项工作之前,我们从加特林(Gatling)建议改为使用JMESPath,如here所述。与JsonPath atm相反,JMESPath具有真正完整的语法和一致性测试套件。

答案 1 :(得分:0)

您已添加了不必要的方括号。更改jsonPath:

$.[0].availabilities.[0].availabilityId