Как перебирать каждую пару ключ-значение JSON в Postman

Я пишу тесты в POSTMAN для запроса POST API, отправляя данные тела JSON в следующем формате:

"data": {

      "name": "Amber Joseph",
      "dob": "1988-10-13",
      "addressLine1": "Ap #770-9459 Quis Av.",
      "state": "WA",
      "suburb": "Beverley",
      "yesNo": false,
      "balance": 423.00,
      "club": [
        "Dance",
        "Sports"
      ],
      "activities" : null
      "libraryCard": {
        "uid": "2d07d77c-8756-43d4-912f-238a2ff567fe"
      }
}

Я получаю ответ на запрос в аналогичном формате с некоторыми добавленными деталями:

{
  "status": "Success",
  "message": "Created new 'Student' record",
  "correlationCode": "Z848640-261354",
  "type": {
    "id": 51247,
    "name": "Student",
    "slug": "student",
    "application": {
      "name": "Willow University"
    }
  },
  "data": {
    "name": "Amber Joseph",
    "dob": "1988-10-13",
    "addressLine1": "Ap #770-9459 Quis Av.",
    "state": "WA",
    "suburb": "Beverley",
    "yesNo": false,
    "balance": 423.00,
    "club": [
      "Dance",
      "Sports"
    ],
    "libraryCard": {
      "uid": "2d07d77c-8756-43d4-912f-238a2ff567fe",
      "name": "11206"
    }
}

Теперь я хочу добиться здесь двух вещей: 1. Убедитесь, что каждый ключ в теле ответа не имеет нулевого значения. Обратите внимание, что я отправляю один ключ со значением null, и он не возвращается в ответ. 2. Значение, отправленное в теле запроса для каждого ключа, является значением, возвращаемым тем же ключом в теле ответа. Например, если ключ «name» имеет значение «Amber Joseph», то ответный ключ «name» также возвращает «Amber Joseph». Но я хочу сделать это для каждой клавиши. Также ключи могут откладывать каждый раз, например, я мог или не мог отправить его с ключом «имя», поэтому мне нужно общее решение, которое применяется к любым парам ключ-значение, которые я отправляю.

Я могу пройти через цикл, используя:

let jsonData = pm.response.json();
let dKey = Object.keys(jsonData);
let dValue = Object.values(jsonData);
for(var i = 0; i < dV.length; i++ ){
        pm.expect(dV[i]).to.not.eql(null);
    } 

Но это не проверяет вложенную пару значений ключа по отдельности. Я специально хочу проверить каждую пару значений ключа внутри объекта «данные». Любая помощь будет оценена по достоинству.

Спасибо


person Muzna Zafar    schedule 26.11.2019    source источник


Ответы (1)


Вы можете получить данные JSON из запроса следующим образом:

const requestJson = JSON.parse(pm.request.body.raw);

(Предполагается, что вы используете тело RAW в Postman.)

Затем вы можете сравнить data поля ответа с data полями исходного запроса:

const requestJson = JSON.parse(pm.request.body.raw);
const responseJson = pm.response.json();

for (const [reqKey, reqValue] of Object.entries(requestJson.data)) {
    pm.expect(responseJson.data[reqKey]).to.eql(requestJson.data[reqKey]);
}

Оттуда вы можете добавить любые проверки, которые хотите выполнить в остальной части ответа.

person jknotek    schedule 26.11.2019
comment
Я не совсем понимаю, что такое responseJson.data [reqKey]? .. Я попытался записать его значение, но, похоже, ничего не получил. Также я чувствую, что он не совсем получает все пары ключ-значение из тела запроса и проверяет их на ключи ответа. Не могли бы вы уточнить свой ответ? - person Muzna Zafar; 27.11.2019
comment
@MuznaZafar Пожалуйста, попробуйте console.log(pm.request.body.raw) и дайте мне знать, что он показывает. - person jknotek; 27.11.2019
comment
Вот что показывает: code {↵ данные: {↵ ↵ имя: Эмбер Джозеф, ↵ dob: 1988-10-13, ↵ addressLine1: Ap # 770-9459 Quis Av., ↵ штат: Вашингтон, ↵ пригород: Беверли, ↵ yesNo: false, ↵ баланс: 423.00, ↵ клуб: [↵ Dance, ↵ Sports↵] ↵} ↵} code - person Muzna Zafar; 27.11.2019
comment
@MuznaZafar Упс, у меня была опечатка (resposeJson должно было быть responseJson). Я обновил свой ответ исправлением. Вы можете попробовать еще раз? - person jknotek; 27.11.2019
comment
Опечатку уже разобрался и исправил, у меня все еще не работает :( - person Muzna Zafar; 27.11.2019
comment
@MuznaZafar Я только что исправил еще одну опечатку. Пожалуйста, попробуйте еще раз. Если у вас все еще есть проблемы, было бы полезно console.log больше переменных, чтобы увидеть, с чем вы работаете. С моей стороны это сделать сложнее, потому что у меня нет доступа к вашему API. - person jknotek; 27.11.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person Muzna Zafar; 27.11.2019