Как сравнить ответ JSON с почтальоном

У меня есть сценарий для проверки значения «статуса» в массиве. Ответ динамический, и # итерация может отличаться. Я не хочу сохранять это значение в среде почтальона, но мне нужно выполнить динамическую проверку. Из моего нижеприведенного ответа API я получил 2 экземпляра: 1-й с ДОСТУПНЫМ, 2-й с ПРОДАНО. Может ли кто-нибудь подсказать мне, как мне провести сравнение?

Ответ 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"]);
});

person Sankar S    schedule 06.05.2019    source источник
comment
Что вы имеете в виду под динамической проверкой? кроме того, ваш ответ возвращает массив, поэтому jsonData.status не даст вам фактического статуса. Вы должны сделать это в цикле.   -  person Divyang Desai    schedule 06.05.2019


Ответы (2)


Если вы пытаетесь проверить все значение status в ответе, вы можете перебирать их следующим образом:

pm.test("status Check", function () {
    var jsonData = pm.response.json();
    _.each(jsonData, (arrItem) => {            
        pm.expect(arrItem.status).to.be.oneOf(["AVAILABLE", "SOLDOUT", "NOTRELEASED"]);
    })
});
person Danny Dainton    schedule 06.05.2019
comment
ах, я не видел вашего ответа, прежде чем опубликовать комментарий :) - person Divyang Desai; 06.05.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, если все они в порядке, и с FAILED, если один из них не прошел.

один тест

Если вы хотите увидеть более подробную информацию в своем результате теста, я бы предложил добавить каждый из них в один вложенный тест. С этим решением у вас будет 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"]);
        });
    });

});

один тест на элемент массива

person DieGraueEminenz    schedule 06.05.2019
comment
Это должен быть принятый ответ, он объяснен намного лучше, а не просто решение, как у меня. - person Danny Dainton; 06.05.2019
comment
@SankarS, пожалуйста, примите ответ, если он решил вашу проблему, - person Divyang Desai; 07.05.2019