postman 使用数组验证JSON的方法

7uzetpgm  于 5个月前  发布在  Postman
关注(0)|答案(1)|浏览(59)

我正在使用Postman做一些回归测试,我在Pre-request Script选项卡上有以下函数:

postman.setGlobalVariable("verifyResponseChildValueMatchesExact", (children, key, value) => {
    pm.test(`A node with these parents '${children}' in the response should contain this key / value pair '${key}: ${value}'`, function() {
        const targetJson = eval(globals.getResponseChild)(children);
        if (!targetJson) throw new EvalError(`Node with parents '${children}' does not exist.`);
        pm.expect(Object.keys(targetJson)).to.include(key);
        pm.expect(targetJson[key]).to.eql(value);
    });
});

字符串
我称之为使用:

eval.globals.verifyResponseChildValueMatchesExact(["my_key"], "my_value", my_number)


待验证的响应为:

{
    "data": {
        "my_key": 42
    }
}


我需要的是一个函数,它遵循该结构,但能够验证数组中任何位置的键和值

{
    "data": [
        {
            "my_key": 42
        }
    ]
}


如果可能的话(在同一功能中)

{
    "data": [
        {
            "my_key": 42,
            "my_key2": {
                "my_key3": "value"
            }
        }
    ]
}


例如:data,在位置0有一个名为“my_key”的孩子,它的值是42。这就是我需要验证的

aiqt4smr

aiqt4smr1#

您将需要一个函数来递归地检查需求是否为真。

// Function to recursively search for key-value pair in nested objects
function findKeyValuePair(obj, targetKey, targetValue) {
    for (const prop in obj) {
        if (obj.hasOwnProperty(prop)) {
            if (prop === targetKey && obj[prop] === targetValue) {
                return true;
            } else if (typeof obj[prop] === 'object') {
                if (findKeyValuePair(obj[prop], targetKey, targetValue)) {
                    return true;
                }
            }
        }
    }
    return false;
}

const keyValuePairExists = findKeyValuePair(targetJson, key, value);

字符串

相关问题