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拥有真正完整的语法和合规性测试套件。
这是 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拥有真正完整的语法和合规性测试套件。