Как сравнить 2 JSON-объекта, содержащих массив, используя инструмент Каратэ - PullRequest
0 голосов
/ 10 января 2019

Один из тестов API с использованием интуит / каратэ,

Ожидаемый JSON: {name: hello, config:[{username: abc, password: xyz},{username: qwe, password: tyu}]}

Существует две возможности ответа API.

Первый возможный фактический JSON: {name: hello, config:[{username: qwe, password: tyu},{username: abc, password: xyz}]}

Второй возможный фактический JSON: {name: hello, config:[{username: abc, password: xyz},{username: qwe, password: tyu}]}

Аналогично, последовательность элементов массива в реальном ответе отличается, следовательно, следующий подход к проверке ответа выдает ошибку случайным образом.

  • И ответ ==
  • И ответ содержит

Иногда ошибка выдается как: Ошибка: {Actual: response.config [0] .abc, ожидаемый: response.config [0] .qwe}

Иногда ошибка выдается как: Ошибка: {Actual: response.config [0] .qwe, ожидается: response.config [0] .abc}

Не могли бы вы предоставить точный подход каратэ к валидации JSON, при котором весь JSON вместе с игнорированием последовательности элементов в массиве, содержащем JSON?

1 Ответ

0 голосов
/ 10 января 2019

Вам необходимо внимательно прочитать документы: https://github.com/intuit/karate#contains-short-cuts

* def response1 = {name: 'hello', config:[{username: 'qwe', password: 'tyu'},{username: 'abc', password: 'xyz'}]}
* def response2 = {name: 'hello', config:[{username: 'abc', password: 'xyz'},{username: 'qwe', password: 'tyu'}]}

* def config = [{username: 'qwe', password: 'tyu'},{username: 'abc', password: 'xyz'}]
* match response1 == { name: 'hello', config: '#(config)' }
* match response2 == { name: 'hello', config: '#(^^config)' }
...