Каркас каратэ: ищите ответ дочернего API (который является Dynami c) в родительском API - PullRequest
1 голос
/ 17 февраля 2020

У меня есть сценарий, где часть ответа родительского API от дочернего API. Если ответ дочернего API (который является Dynami c) имеет только один элемент массива, нет необходимости сопоставлять его в ответе родительского API, if array size > 1, тогда мне нужно сопоставить из индекса 1 в ответах с ответом родительского API.

* def child =  {"array1":[{"mbr1":{"id":"A1"}},{"mbr2":{"id":"A2"}}]}

Нет определенного порядка c для дочернего ответа API, и array1 может иметь "n" количество элементов массива (mbr1,mbr2,mbr3, etc)

Если дочерний ответ API такой же, как выше, то родитель будет выглядеть следующим образом:

* def parent =  {"parent":{"muid":"1234"},"elg":[{"EID":"E123"},{"members":[{"mbr2":{"id":"A2"}}]}]}

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

* def parent = {"parent":{"muid":"1234"},"elg":[{"EID":"E123"}]}

Итак, как мне выполнить сопоставление, чтобы увидеть, присутствует ли дочерний элемент в родительском, если дочерний элемент возвращает 200 ОК, и длина дочернего массива> 1? Поэтому я ищу решение по следующему сценарию:

if (child responseStatus == 200){
    if (child.array1.length > 1){
        for (i = 1;i <= child.array1.length; i++){
            parent.elg[1].members[i] contains child.arrays1[i]
        }
    }
}  

1 Ответ

0 голосов
/ 18 февраля 2020

Здесь вы go, и, пожалуйста, прочитайте документы: https://github.com/intuit/karate#conditional -logi c

* def parentArray = parent.elg[1].array1
* def expected = child.array1.length > 1 ? child.array1 : parentArray
* match parentArray contains only expected
...