Почтальон - неопределенные блоки переменных, отправляемые бегуну - PullRequest
0 голосов
/ 11 января 2020

У меня есть сценарий, для которого я использую Postman для выполнения вызовов API с внешним файлом данных CSV.

В этом файле есть набор данных, в котором у меня есть несколько объемов данных для каждой отдельной записи ( от 1 до 3). Когда я запускаю коллекцию, используя Runner, для каждой строки с менее чем 3 записями скрипт завершился неудачно, поскольку он считает оставшиеся записи неопределенными!

Есть ли способ динамически построить тело для каждой отдельной записи Файл CSV?

В CSV у меня есть:


For some lines 1 entry : res_mac1, res_ip1, res_name1

For some lines 2 entries: res_mac1, res_ip1, res_name1, res_mac2, res_ip2, res_name2

For some lines 3 entries: res_mac1, res_ip1, res_name1, res_mac2, res_ip2, res_name2, res_mac3, res_ip3, res_name3

У меня есть следующее тело:

 {
    "fixedIpAssignments": {
        "{{res_mac1}}": {
            "ip": "{{res_ip1}}",
            "name": "{{res_name1}}"
        },
        "{{res_mac2}}": {
            "ip": "{{res_ip2}}",
            "name": "{{res_name2}}"
        },
        "{{res_mac3}}": {
            "ip": "{{res_ip3}}",
            "name": "{{res_name3}}"
        }
    }
}

Однако в ответе у меня есть запросы на Записи CSV с менее чем 3, которые терпят неудачу в соответствии с приведенным ниже примером только с 2:

 {
    "fixedIpAssignments": {
        "11:22:33:44:55:66": {
            "ip": "192.168.1.1",
            "name": "Host 1"
        },
        "22:33:44:55:66:77": {
            "ip": "192.168.1.2",
            "name": "Host 2"
        },
        "{{res_mac3}}": {
            "ip": "{{res_ip3}}",
            "name": "{{res_name3}}"
        }
    }
}

Есть ли способ заблокировать эти неопределенные переменные ключ и данные, сохраняя при этом их в теле, на случай, если новый набор данных имеет переменную?

Я пробовал следующий сценарий предварительного запроса, но он не принимается почтальоном в отношении синтаксиса, а также возвращает массив для резервирования вместо чистого JSON:

_ = require('lodash');

let setCount = _.chain(data)
    .keys()
    .countBy((item) => item.includes('mac'))
    .value()
    .true

var reservations = []; //Not sure an array is the good choice here...


for(var i = 1; i <= setCount; i++) {
    reservations.push(
       data[`res_mac${i}`]: { //Syntax error according to Postman...
            "ip": data[`res_ip${i}`],
            "name": data[`res_name${i}`]
        }
    );
}

let requestBody = {
    "fixedIpAssignments": {
        reservations
    }
};

pm.variables.set('requestBody', JSON.stringify(requestBody));

А затем просто введите следующую команду в Тело:

{{requestBody}}
...