【问题标题】:How to compare JSON Response with Postman如何将 JSON 响应与 Postman 进行比较
【发布时间】:2020-09-25 11:24:30
【问题描述】:

我有一个场景来验证数组中的“状态”值。响应是动态的,# 迭代可能会有所不同。我不想在我的邮递员环境中保存这个值,但需要进行动态检查。从我下面的 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"]);
});

【问题讨论】:

  • 动态检查是什么意思?此外,您的响应返回一个数组,因此 jsonData.status 不会给您实际状态。您必须循环播放。

标签: postman json-value


【解决方案1】:

如果您尝试检查响应中的所有 status 值,您可以像这样遍历它们:

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

【讨论】:

  • 啊,在发表评论之前我没有看到你的答案:)
【解决方案2】:

你的 sn-p 实际上是为一个元素工作的。 您当前的响应是 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 个测试。一项通用测试“状态检查”和一项针对每个 Array 项目的测试(在本例中为 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"]);
        });
    });

});

【讨论】:

  • 这应该是公认的答案,它已经得到了更好的解释,而不仅仅是一个解决方案,就像我的一样。
  • @SankarS,如果它解决了你的问题,请accept the answer
猜你喜欢
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
相关资源
最近更新 更多