【问题标题】:how do I check if a value is in a JSON return or not?如何检查一个值是否在 JSON 返回中?
【发布时间】:2021-05-15 23:48:28
【问题描述】:

我正在 postman 中编写一个测试,我想检查 JSON 返回是否包含名为“RegressieMapTest”的标签。这是我的脚本:

pm.test("Is the folder created correctly?", function(){
var jsonData = pm.response.json();
var objString = JSON.stringify(jsonData);
var obj =  JSON.parse(objString);

for (var i = 0; i < obj.Corsa.Data.length; i++){
    if (obj.Corsa.Data[i].Label == "RegressieMapTest"){
        console.log(obj.Corsa.Data[i].Label);
        pm.expect(obj.Corsa.Data.Label).to.eql("RegressieMapTest");
    }
}
pm.expect.fail();   
})

但它不太好用,每次我运行这个脚本时,它似乎都会自动跳转到 pm.expect.fail(),这很奇怪,因为“RegressieMapTest”在 JSON 返回中。邮递员返回以下消息:

Is the folder created correctly? | AssertionError: expect.fail()

【问题讨论】:

  • 你能分享你的json响应结构吗?

标签: javascript json postman


【解决方案1】:

您的pm.expect.fail(); 始终运行。您希望它仅在找不到该字段时运行。因此,只需在您的检查块中添加一个标志。

pm.test("Is the folder created correctly?", function(){
    var jsonData = pm.response.json();
    var objString = JSON.stringify(jsonData);
    var obj =  JSON.parse(objString);

    var isFound = false;
    for (var i = 0; i < obj.Corsa.Data.length; i++){
        if (obj.Corsa.Data[i].Label == "RegressieMapTest"){
            console.log(obj.Corsa.Data[i].Label);
            pm.expect(obj.Corsa.Data.Label).to.eql("RegressieMapTest");
            isFound = true;
        }
    }

    if (!isFound) {
        pm.expect.fail();
    }
})

【讨论】:

  • 非常感谢!我自己想不通!
【解决方案2】:

pm.respose.json() 等同于 JSON.parse 你不必再做一次

你也可以使用 array.find 方法而不是循环遍历它

pm.test("Is the folder created correctly?", function () {
    var jsonData = pm.response.json();

    pm.expect(obj.Corsa.Data.find(elem => elem.Label === "RegressieMapTest")).to.be.not.undefined

}

如果数组有任何带有标签 RegressieMapTest 的元素,那么它将返回数据 elese 返回未定义,因此我们正在验证它不会返回未定义。意味着它具有价值

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多