Gatling:提取崩溃:输入预期错误结束时配对 json 响应

Gatling: extraction crashed: end of input expected error while paring json response

这是 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/ 上验证了路径,我能够看到结果。我做错了什么?

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

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

这是 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']

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

另外,你的括号之间不应该有点,所以你的路径应该是:

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

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

$[0].availabilities[0].availabilityId

有一个ongoing effort on creating a proper JsonPath implementation. Until this effort lands, we from Gatling recommend going with JMESPath instead, as explained here。与JsonPath atm相反,JMESPath拥有真正完整的语法和合规性测试套件。