Как сравнить два ответа json и увидеть различия в Postman? - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно создать тесты в Postman, где я сравниваю два ответа на два разных запроса и хочу увидеть, в чем (если есть что-то) разница между ними. Дело в том, что я могу получить ответ json, который может содержать что угодно, тогда мне нужно проверить, дал ли один и тот же ответ в другой среде один и тот же ответ. Сейчас я делаю это так:

В первом запросе я сохраняю responsee:

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'));
});

Но в этом случае я просто смотрю, есть ли разница, поэтому мне приходится go каждый раз просматривать множество строк, чтобы найти, что было не так.

Мне нужно получить, когда у меня будет первый ответ например:

[
    {
        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" 

А это вообще возможно?

1 Ответ

0 голосов
/ 09 июня 2020

Хорошо, решение, с которым я работал: в первом запросе я сохранил ответ с помощью

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', который создает тест, когда есть разница в ответах, и этот тест называется разницей, а также сохраняется в консоли как 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));
});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...