Как перебрать каждый элемент свойства в ответе API в студии Katalon? - PullRequest
0 голосов
/ 27 сентября 2019

Я пишу тестовый скрипт в студии katalon для проверки тела ответа API. Моё тело ответа имеет формат:

{
  "status": "Success",
  "correlationCode": "1234-5678",
  "type": {
    "id": 51247,
    "name": "Student",
  },
  "data": {
    "name": "Sara Nieves",
    "gender": "Female",
    "dob": "1995-08-06",
    "libraryCard": {
      "id": "11178",
      "type": "Seniors"
    },
    "qualifications": [
      {
        "id": "45650986546",
        "name": "Graduate Certificate in Environmental Engineering Management"
      }
    ]
  }
}

Я хочу убедиться, что ни один из элементов не возвращает значение 'null',Так как элементы, возвращаемые для ответа API, не являются статичными (то есть имя, пол и т. Д. Могут не возвращаться каждый раз), поэтому я не могу использовать что-то вроде «data.name», чтобы проверить, имеет ли оно нулевое значение.Итак, я хочу универсальный способ перебрать каждый возвращенный атрибут и проверить, возвращается ли его значение как ноль или нет.

Любая помощь будет высоко ценится.Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

У вас есть сообщение об ошибке:

groovy.lang.MissingMethodException: Нет подписи метода: WSVerification1569811424284 $ _run_closure1.doCall () применимо для типов аргументов: (com.kms.katalon.core.testobject.ResponseObject) значения: [200 1 КБ] 22572.groovy: 21)

Я предполагаю, что ваш тип объекта ответа: com.kms.katalon.core.testobject.ResponseObject

Код для синтаксического анализа ответа как json и его проверки:

import groovy.json.JsonSlurper

/**
 * the recursive method to validate that json object does not have null values 
 * @param obj  - the parsed json object (sequence of maps and lists)
 * @param path - a variable to know where the error occurred in json data.
 */
void assertNoNullValue(Object obj, String path='ROOT'){
    //the main assertion
    assert obj!=null : "value in json could not be null: $path"

    if(obj instanceof Map){
        //iterate each key-value in map and validate the value recursively
        obj.each{k,v-> assertNoNullValue(v,path+".$k") }
    } else if(obj instanceof List){
        //iterate each value in list and validate the value recursively
        obj.eachWithIndex{v,i-> assertNoNullValue(v,path+"[$i]") }
    }
}

def response = ...
assert response.isJsonContentType()
def responseText = response.getResponseText()

//parse body
def data = new JsonSlurper().parseText(responseText)
assertNoNullValue(data)
0 голосов
/ 27 сентября 2019

Это решение не так точно, как предложенное @dagget, но это быстрая проверка:

def response = '''
{
  "status": "Success",
  "correlationCode": "1234-5678",
  "type": {
    "id": 51247,
    "name": "Student",
  },
  "data": {
    "name": "Sara Nieves",
    "gender": "femmina",
    "dob": "1995-08-06",
    "libraryCard": {
      "id": "11178",
      "type": "Seniors"
    },
    "qualifications": [
      {
        "id": "45650986546",
        "name": "Graduate Certificate in Environmental Engineering Management"
      }
    ]
  }
}
'''
assert !response.contains("null")
...