使用输入 JSON 验证 Postman 响应数据

问题描述 投票:0回答:1

我有一个输入 json 文件,如下所示:

{
    "interfaceIndex": "1234",
    "portName": "1/2/3",
    "portType": "LAN",
    "adminStatus": "up",
    "operStatus": "down",
    "managementPort": "No",
    "primaryRack": "1",
    "primarySlot": "8",
    "primaryPort": "5",
    "secondaryRack": "",
    "secondarySlot": "",
    "secondaryPort": "",
    "protectionMode": "",
    "sfpDescription": "test",
    "speed": "0",
    "neType": "test1",
    "oldAdminStatus": "",
    "portDisplayName": "LAN 1/2/3",
    "deviceVariant": "test11"
}

下面是通过postman的请求体

{

   "neName": "{{neName}}",
   "primarySlot": "2", 
   "primaryPort": "3" 
}

回应:

{
    "interfaceIndex": "1234",
    "neName": "BA12",
    "neIp": "1.1.1.1",
    "context": "",
    "portName": "1/2/3",
    "portType": "LAN",
    "adminStatus": "up",
    "operStatus": "",
    "managementPort": "No",
    "primaryRack": "1",
    "primarySlot": "2",
    "primaryPort": "3",
    "secondaryRack": "",
    "secondarySlot": "",
    "secondaryPort": "",
    "protectionMode": "",
    "sfpDescription": "",
    "speed": "0",
    "neType": "test1",
    "oldAdminStatus": "",
    "portDisplayName": "LAN 1/2/3",
    "deviceVariant": "test11"
}

我想使用 input.json 验证 API 响应数据。到目前为止我已经做了类似的事情:

pm.test("Validate interfaceIndex", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.interfaceIndex).to.eql(data['interfaceIndex']);
});
pm.test("Validate neName", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.neName).to.eql(pm.environment.get("neName2"));
});
pm.test("Validate neIp", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.neIp).to.eql(pm.environment.get("neIp"))
});
.....

但是如果没有对测试中的密钥进行硬编码,我想循环遍历响应数据中的每个项目并希望与 input.json 匹配。

postman
1个回答
0
投票

比较循环:循环使用

inputJson
迭代
Object.entries(inputJson)
对象中的每个键值对。

从 API 收到的响应与

inputJson
中指定的预期结构和值相匹配。如果所有属性及其值匹配,则测试通过。如果存在任何差异,则测试失败,表明响应结构或值不符合预期。

这个

tests
代码可以验证您的数据

const inputJson = {
    "interfaceIndex": "1234",
    "portName": "1/2/3",
    "portType": "LAN",
    "adminStatus": "up",
    "operStatus": "down",
    "managementPort": "No",
    "primaryRack": "1",
    "primarySlot": "8",
    "primaryPort": "5",
    "secondaryRack": "",
    "secondarySlot": "",
    "secondaryPort": "",
    "protectionMode": "",
    "sfpDescription": "test",
    "speed": "0",
    "neType": "test1",
    "oldAdminStatus": "",
    "portDisplayName": "LAN 1/2/3",
    "deviceVariant": "test11"
}
const outputJson = pm.response.json();

for (const [inputKey, inputValue] of Object.entries(inputJson)) {
    console.log("input \"" + inputKey + "\" : \"" + inputValue + "\" ==> \"" + outputJson[inputKey]);
    pm.expect(outputJson[inputKey]).to.eql(inputJson[inputKey]);
}

结果

© www.soinside.com 2019 - 2024. All rights reserved.