Как посчитать длину json, возвращенную с помощью Почтальона? - PullRequest
0 голосов
/ 29 апреля 2020

Я отправляю запрос, который возвращает мне что-то вроде:

{
    "items": [
        {
            "id": 86154,
            ...
        },
        {
            "id": 86194,
            ...
        }
}

Я бы хотел посчитать размер этого массива в разделе теста Почтальона. Поэтому я написал:

var body = JSON.parse(pm.response.json());
tests["Count: "  + body.items] = true;

enter image description here

Как вы можете видеть выше, это не сработало. Я новичок и в PostMan, и в Javascript, наверное, поэтому.

Ответы [ 4 ]

2 голосов
/ 29 апреля 2020

Простой ответ - получить то же самое, используя новый pm.* API-синтаксис:

pm.test(`Count: ${pm.response.json().items.length}`)

Синтаксис, который вы использовали, неверен JSON.parse(pm.response.json()) - Вы можете просто использовать pm.response.json() и отбросить JSON.parse().

Чтобы получить количество объектов, вам просто нужно использовать свойство .length .

Я не уверен что вы проверяете, но этот простой тест будет проверять или утверждать, что у вас есть 2 объекта (как ваш пример) в массиве:

let body = pm.response.json()
pm.test("Check the Items array length", () => {
    pm.expect(body.items.length).to.equal(2)
})

Это использует более новый синтаксис pm.test(), подробнее об этом и все остальные pm.* API-методы можно найти здесь:

https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/

Если вы просто хотите выйти из системы и не добавлять ее в тест , вы можете использовать console.log(pm.response.json().items.length) на вкладке Tests и увидеть это на консоли почтальона.

1 голос
/ 29 апреля 2020

.json() возвращает обещание. попробуйте вот так:

(async () => {
   var body = await pm.response.json();
   tests["Count: "  + body.items] = true; 
})()

или вот так:

pm.response.json().then(body => {
   tests["Count: "  + body.items] = true;
});
1 голос
/ 29 апреля 2020

Вам нужно определить тест в почтальоне, а затем внутри, чтобы вы могли проверить номер объекта в ответе, как показано в коде ниже.

pm.test("Item count should be 5", function () {
  var jsonData = pm.response.json();
  pm.expect(jsonData.items.length).to.eql(5);
});

Я использовал статистику c считать, но в ваших тестовых сценариях вы также можете использовать Dynami c переменных

0 голосов
/ 29 апреля 2020
var body = JSON.parse(responseBody);
tests["Count: "  + Object.keys(body.items).length] = true;

Я полагаю, почтальон вернул json и, возможно, не всегда нужно его анализировать. Затем вы подсчитываете длину ваших "предметов", используя https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...