Как отфильтровать сложный ответ в карате DSL с помощью jsonPath? - PullRequest
1 голос
/ 06 ноября 2019

Я получаю ответ ниже от REST API, но мне трудно извлечь значение метки из полученного ответа и назначить его переменной, чтобы использовать его позже в сценарии.
Вот RESPONSE ::

{
  "result": "SUCCESS",
  "rawAttr": "[{\"attributes\":[{\"name\":\"resourceid\",\"value\":\"7A7Q123456\"},{\"name\":\"physicalid\",\"value\":\"7A7Q123456\"},{\"name\":\"dsw:label\",\"value\":\"MY Product00004285\"},{\"name\":\"dsw:created\",\"value\":\"2019-11-06T08:39:39Z\"}]}]",
  "physicalid": "7A7Q123456",
  "contextPath": "/path",
  "id": "7A7Q123456",
  "message": null
}

Я могу получить response.id и response.result, что полезно для проверки, но я не могу получить dsw:label value, который MY Product00004285

Когда я делаю def Arr = response.rawAttr, я получаю следующее значение, будь то массив или строка, я запутался. Похоже, что это строка.

[{"attributes":[{"name":"resourceid","value":"7A7Q123456"},{"name":"physicalid","value":"7A7Q123456"},{"name":"dsw:label","value":"MY Product00004298"},{"name":"dsw:created","value":"2019-11-06T08:39:39Z"}]}]

Извлечь метку в JMeter JSON Extractor очень просто, используя приведенное ниже выражение JSON Path $.attributes.value[2]

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

См. Возможности преобразования типа каратэ: https://github.com/intuit/karate#type-conversion

Так что вы можете сделать это:

* json attr = response.rawAttr

И тогда все готово.

0 голосов
/ 06 ноября 2019

Благодаря примеру и документации по преобразованию строки в json.
Понял, как это сделать.

And def strVar = response.rawAttr
And json jsonVar = strVar
And def attrb = karate.jsonPath(jsonVar, '$..attributes.[2].value')[0]
And print '\n\n Attrb\n', attrb

Ссылки, на которые я ссылался:
Json Path оцениватель
Справочник по каратэ для преобразования типов
Пример каратэ для преобразования типов

...