我需要在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"
甚至有可能做?
确定,我使用的解决方案是:在第一个请求中,我用
保存了响应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));
});
}