Как сравнить ответ JSON с почтальоном - PullRequest
1 голос
/ 06 мая 2019

У меня есть сценарий для проверки значения «status» в массиве. Ответ является динамическим и # итерация может варьироваться. Я не хочу сохранять это значение в своей среде почтальона, но мне нужно выполнить динамическую проверку. Из моего ответа API ниже, я получил 2 экземпляра, первый с AVAILABLE, второй с SOLDOUT. Может кто-нибудь предложить мне, как я могу сделать сравнение?

API ответа:

[
    {
        "status": "AVAILABLE",
        "price": {
            "baseAveragePrice": 209,
            "discountedAveragePrice": 209
        },
        "Fee": 39,
        "flag": false
    },
    {
        "status": "SOLDOUT",
        "price": {
            "baseAveragePrice": 209,
            "discountedAveragePrice": 209
        },
        "Fee": 39,
        "flag": true
    },
]

pm.test("status Check", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.status).to.be.oneOf(["AVAILABLE", "SOLDOUT", "NOTRELEASED"]);
});

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Ваш фрагмент на самом деле работает для одного элемента. Ваш текущий ответ представляет собой JSON-массив. Поэтому вам нужно повторить проверку по всему массиву.

Одно из решений:

pm.test("status Check", function() {
    var jsonData = pm.response.json();

    jsonData.forEach(function(arrayElement) {
        pm.expect(arrayElement.status).to.be.oneOf(["AVAILABLE", "SOLDOUT", "NOTRELEASED"]);
    });

});

Это вернет один тест «Проверка состояния» с помощью OK, если все они в порядке, и с ошибкой, если один из них завершится неудачей.

one single test

Если вы хотите увидеть больше деталей в результатах теста, я бы предложил добавить каждый из них в один вложенный тест. С этим решением у вас будет 3 теста. Один общий тест «Проверка состояния» и один тест для каждого элемента массива (в данном случае 2):

pm.test("status Check", function() {
    var jsonData = pm.response.json();

    jsonData.forEach(function(arrayElement) {
        pm.test("Status is either 'AVAILABLE','SOLDOUT' or 'NOTRELEASED'", function() {
            pm.expect(arrayElement.status).to.be.oneOf(["AVAILABLE", "SOLDOUT", "NOTRELEASED"]);
        });
    });

});

one test per array-item

1 голос
/ 06 мая 2019

Если вы пытаетесь проверить все значения status в ответе, вы можете перебрать их так:

pm.test("status Check", function () {
    var jsonData = pm.response.json();
    _.each(jsonData, (arrItem) => {            
        pm.expect(arrItem.status).to.be.oneOf(["AVAILABLE", "SOLDOUT", "NOTRELEASED"]);
    })
});
...