Создание утверждений с использованием Groovy, где JSON содержит несколько объектов с одинаковым именем - PullRequest
0 голосов
/ 24 сентября 2018

В настоящее время я пишу несколько тестов в ReadyAPI для тестирования нового API, который мы создаем.API вернет JSON в следующем формате:

{
   "testJSON" : [
      {
         "test1" : "111",
         "test2" : "ABC"
      },
      {
         "test1" : "222",
         "test2" : "DEF"
      }
   ]
}

Я добавил следующий код Groovy, который разбивает JSON и перечисляет каждое значение:

import groovy.json.JsonSlurper 


def jsonResp = context.expand( '${GetTest#Response}' )
def jsonElements = new JsonSlurper().parseText(jsonResp)
for ( value in jsonElements.testInput ) {
    value.each{
            log.info "${it.key}:${it.value}"
    }
}

Что я пытаюсь сделатьнужно взять этот ответ JSON и сравнить его с заранее определенным списком данных (используя источник данных в ReadyAPI).Этот источник данных будет содержать столбец с именем «test1» и столбец с именем «test2» - они будут содержать все значения, ожидаемые для каждого объекта.Поэтому нам необходимо убедиться, что каждое значение test1 из источника данных отображается в ответе JSON.И мы также хотели бы подтвердить, что для каждого «test1» мы получаем правильный соответствующий «test2».

Так что в приведенном выше примере мы хотели бы доказать, что ответ содержал значения «test1» 111и 222, и что для 111 мы получили значение 'test2' ABC и т. д.

Приведенный выше пример является упрощенным представлением нашего нового API и в действительности он будет содержать гораздо большее количество полей и многобольше ответов.Поэтому в идеале я не хочу жестко кодировать конкретные значения в скрипте Groovy - вот почему я пытаюсь использовать таблицу данных.

Кто-нибудь имел опыт такого рода вещей иможете сделать какие-либо предложения?

Заранее спасибо за вашу помощь, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Ура, Мэтт

1 Ответ

0 голосов
/ 24 сентября 2018

"testJSON" - это список объектов, содержащих свойства "list1" и "list2".Источником данных также является список объектов (строк), содержащих свойства (столбцы) "list1" и "list2".

Используйте вложенный цикл for для сравнения каждого ожидаемого объекта с каждым объектом в ответе.Используйте логический флаг, чтобы отследить, отсутствует ли test1 в ответе.Когда test1 найден, проверьте значение test2.

Вот основная схема.Я предполагаю, что test1 является уникальным идентификатором для каждого объекта.Вы также можете выйти из внутреннего цикла, когда вы найдете test1, чтобы быть более эффективным.

for (element in datasource) {
    def foundTest1 = false
    for (response in testJSON) {
        if (response.test1 == element.test1){
            foundTest1 = true
            assert response.test2 == element.test2
            // assert any number of other properties here
        }
    }
    assert foundTest1 == true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...