如何将JSON响应与Postman进行比较

如何将JSON响应与Postman进行比较,postman,json-value,Postman,Json Value,我有一个场景来验证数组中的“status”值。响应是动态的,迭代可能会有所不同。我不想在postman环境中保存此值,但需要进行动态检查。从下面的API响应中,我得到了两个实例,第一个是可用的,第二个是SOLDOUT。有人能告诉我如何进行比较吗 响应API: [ { "status": "AVAILABLE", "price": { "baseAveragePrice": 209, "discountedAv

我有一个场景来验证数组中的“status”值。响应是动态的,迭代可能会有所不同。我不想在postman环境中保存此值,但需要进行动态检查。从下面的API响应中,我得到了两个实例,第一个是可用的,第二个是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();
    _.each(jsonData, (arrItem) => {            
        pm.expect(arrItem.status).to.be.oneOf(["AVAILABLE", "SOLDOUT", "NOTRELEASED"]);
    })
});

您的代码片段实际上只适用于一个元素。 您当前的响应是一个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):


动态检查是什么意思?另外,您的响应返回一个数组,因此
jsonData.status
不会给出实际的状态。你必须循环。啊,在发表评论之前,我没有看到你的答案:)这应该是公认的答案,解释得更好,而不仅仅是像我这样的解决方案。@SankarS,如果它解决了你的问题,
pm.test("status Check", function() {
    var jsonData = pm.response.json();

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

});
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"]);
        });
    });

});