Невозможно найти повторяющиеся элементы из ответа API - PullRequest
0 голосов
/ 19 февраля 2020

Мы тестировали API и недавно получили проблему, некоторые клиенты не могут войти на веб-сайт.

Мы обнаружили проблему, и это из-за дублирующих ключей в ответе API, это дает ответ, даже если API содержит дубликат ключа.

Так что тесты не помогают в условиях дублирования ключа, поэтому кто-нибудь может мне помочь или подсказать, как я могу найти, есть ли дублирующий элемент в ответе API.

Инструмент: почтальон

Ниже приведен пример вывода API,

В приведенном ниже выводе JSON из API мы можем найти дубликаты для «operatingSystem», как и этот дубликат ключа, подходит для разных элементов.

Поскольку по каким-то причинам нет возможности отладить API в течение некоторого времени, поэтому необходимо выяснить эти повторяющиеся случаи.

Любая идея или предложения будут высоко оценены. Спасибо заранее.

JSON
eg: {
  "code": 2,
  "deviceId": "ID",
  "deviceName": "Test",
  "platform": "x64",
  "operatingSystem": "test",
  "operatingSystem": "test",
  "gde": 000,
  "productVersion": "0.0",
  "build": "00000",
  "receipt": null
 }

Как мы могли бы справиться с такой ситуацией. Есть ли у нас какой-либо метод для автоматизации / проверки этого случая?

1 Ответ

0 голосов
/ 20 февраля 2020

Вот что вы можете попробовать, хотя это немного запутанно. pm.response.json() нормализует ответ и удаляет любые дубликаты, т.е. вы не сможете их обнаружить. Поэтому вы можете взять ответ в тексте, затем обработать его в списке и найти там дубликаты. Я использовал объект карты, чтобы, если карта уже содержала данный ключ, установить флаг и не пройти тест.

Это не полностью проверено, но оно должно дать вам идею или хотя бы отправную точку для решения проблемы:

var jsonBody = pm.response.text();
var str = jsonBody.substring(1, jsonBody.length-1);
var keyArr = str.split(",");
var keyMap = {};
var foundDups = false;

for (var i = 0; i < keyArr.length; i++) {
    var key = keyArr[i].split(":")[0];

    if(!(key in keyMap)) {
        keyMap[key] = key;
        console.log("added key " + key);
    }
    else {
        console.log("found duplicate: " + key);
        foundDups = true;
        break;
    }
}

pm.test("Look for dups", function() {
    pm.expect(foundDups).to.eql(false);
});
...