如何比较两个json响应并查看Postman中的差异?

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

我需要在Postman中创建测试,在该测试中我比较两个不同请求的两个响应,并且我想查看它们之间的区别(如果有的话)。情况是我可以得到可以包含任何内容的json响应,然后我需要检查在不同环境下相同的请求是否给出了相同的响应。现在,我就是这样:

在第一个请求中,我保存响应者:

pm.globals.set('response', pm.response.json());

在第二个请求中,我将响应与保存的响应进行比较:

pm.test('Should have identical responses as previous', () => {
pm.expect(pm.response.json()).to.deep.equal(pm.globals.get('response'));
});

但是在这种情况下,我只是看是否有任何区别,因此每次都必须经过很多行才能找出问题所在。

我需要得到的是我的第一次答复,例如:

[
    {
        color: "red",
        value: "#f00"
    },
    {
        color: "green",
        value: "#0f0"
    }
]

和第二个类似:

[
    {
        color: "red",
        value: "#f00"
    },
    {
        color: "green",
        value: "#0f2"
    }
]

我想在运行结果中获取信息,例如:

there is difference in line: value: "#0f2"

in first response there was value: "#0f0" and in second there is value: "#0f2" 

甚至有可能做?

comparison postman
1个回答
0
投票

确定,我使用的解决方案是:在第一个请求中,我用

保存了响应
pm.globals.set('respa', pm.response.json());

第二秒,我使用函数来查找差异:

function diff(obj1, obj2) {
    const result = {};
    if (Object.is(obj1, obj2)) {
        return undefined;
    }
    if (!obj2 || typeof obj2 !== 'object') {
        return obj2;
    }
    Object.keys(obj1).concat(Object.keys(obj2)).forEach(key => {
        if (obj2[key] !== obj1[key] && !Object.is(obj1[key], obj2[key])) {
            result[key] = obj2[key];
        }
        if (typeof obj2[key] === 'object' && typeof obj1[key] === 'object') {
            const value = diff(obj1[key], obj2[key]);
            if (value !== undefined) {
                result[key] = value;
            }
        }
    });
    return result;
}

然后在第二个响应中,我添加了'if',当响应有所不同时创建测试,该测试被命名为difference,并且也保存在控制台中为json。

   pm.globals.set('respb', pm.response.json());
if (!Object.is(pm.globals.get('respb'), pm.globals.get('respa'))) {
    const result = diff(pm.globals.get('respb'), pm.globals.get('res12'));
    console.log(result);
    pm.test('Difference' + JSON.stringify(result), () => {
    pm.expect(0).to.equal(pm.globals.get(1));
});
}
© www.soinside.com 2019 - 2024. All rights reserved.