карате: получение проблем с проверкой ключей для json и массива в одном сценарии

Я использую карате для тестирования API, и мое текущее требование - мне нужно написать только один сценарий и обработать два ответа как его часть. Я имею в виду, что мой ответ иногда возвращает объект json, а иногда возвращает массив объекта json.

Например: первое выполнение конечной точки возвращает ответ -

{ 
  "id": 123,
  "Name: "mytest",
  "Loc: "United States"
}

И во время следующего выполнения та же конечная точка возвращает ответ -

[
  { 
    "id": 123,
    "Name: "mytest",
    "Loc: "United States"
  },
  { 
    "id": 456,
    "Name: "mytest1",
    "Loc: "United Kingdom"
  }
]

Мой вариант использования - сравнить доступные ключи должны быть ['id','name','Loc']

Первоначально он просто возвращал json, поэтому я использовал karate.keysOf (response), и он работал нормально. Теперь мне нужно обработать оба моих варианта использования внутри одного сценария, поскольку он может возвращать json или массив json, и мне нужно проверить наличие ключей - если json, тогда проверьте только один раз, а если массив, то проверьте все объекты json внутри массива. Я знаю, что есть способ сделать это отдельно, но не уверен, что это можно объединить в один вариант использования. Есть ли способ, при котором я могу получить responseType как json или массив и написать два отдельных кода с условиями или каким-либо образом мой вариант использования может быть обработан.

Любая помощь будет оценена по достоинству. Заранее спасибо.


person automation.ninja.08    schedule 12.06.2020    source источник


Ответы (1)


вы можете справиться с этим, используя схему,

# schmea for single json object
* def schema = {'id':'#present', 'Name' : '#present', 'Loc' : "#present"}

# determine if it an Json Array or object and set expected schema
* def expectedSchema = (karate.match(response, "#array").pass) ? "#[] schema" : schema

* match response == expectedSchema
person Babu Sekaran    schedule 12.06.2020
comment
Спасибо за ваш ответ. Что делать, если я не хочу сравнивать схему и просто проверяю, присутствуют ли ключи в моем массиве или объекте json. Это возможно? - person automation.ninja.08; 13.06.2020
comment
@ automation.ninja.08, по моему (информированному) мнению, вы попали в эту ловушку: stackoverflow.com/a/54126724/143475 < / а> - person Peter Thomas; 13.06.2020
comment
Спасибо @PeterThomas за ваш ответ. Я полностью понимаю вашу точку зрения. Но один из наших API ведет себя именно так. Итак, есть ли возможность добавить любую условную логику и проверить оба сценария на основе любого условия. Я понимаю, что для проверки обоих будет отдельный фрагмент функций JavaScript. Но я борюсь с этим условием, поскольку api не возвращает никакого типа - person automation.ninja.08; 13.06.2020
comment
@ automation.ninja.08 a) посмотрите, помогает ли этот ответ: stackoverflow.com/a/58543843/143475 b) поиск документы для условной логики c) используйте ответ бабу, он дает вам подсказку - person Peter Thomas; 13.06.2020
comment
@peterthomas - спасибо, попробую и сообщу, сработает ли это. - person automation.ninja.08; 13.06.2020
comment
Спасибо за вашу помощь @peterthomas и babu, мне удалось написать два разных сценария вместо того, чтобы объединять их в один - person automation.ninja.08; 25.06.2020
comment
@ automation.ninja.08 отлично. прочтите, пожалуйста: stackoverflow.com/help/someone-answers - person Peter Thomas; 25.06.2020