Как заблокировать отправку неопределенных переменных на Почтальон? - PullRequest
2 голосов
/ 12 апреля 2019

Я использую Postman для запуска теста API, используя файл CSV в качестве данных внешнего файла. В файле CSV есть несколько наборов данных с различным объемом данных, некоторые с данными, а некоторые без. Когда я запускаю сборщик коллекций, и он запускает первый набор данных, он терпит неудачу, потому что есть переменные, которые не были определены, и API выдает ошибку данных.

В CSV

  1. Набор данных 1

    • заказ, ID клиента, штрих-код 1, количество 1, цена 1
  2. Набор данных 2

    • заказ, ID клиента, штрих-код 1, количество 1, цена 1, штрих-код 2, количество 2, цена 2
  3. Набор данных 3

    • заказ, ID клиента, штрих-код 1, количество 1, цена 1, штрих-код 2, количество 2, цена 2, штрих-код 3, количество 3, цена 3
In the body I've added that extra variables in case it is available in a data set.

{
  "order"  :  "{{orderId}}",
  "clientId" : "{{clientId}}",
  "skus"  :  [
        {
            "barcode": {{barcode1}},
            "quantity": {{quantity1}},
            "unitPrice": {{price1}}
        },
         {
            "barcode": {{barcode2}},
            "quantity": {{quantity2}},
            "unitPrice": {{price2}}
        },
         {
            "barcode": {{barcode3}},
            "quantity": {{quantity3}},
            "unitPrice": {{price3}}
        }
    ]

}

Это ответ:

{
 "order" : "1000305408",
 "clientId" : "30",
 "skus" : [
 {
 "barcode": 123123123,
 "quantity": 1,
 "unitPrice": 100
 },
 {
 "barcode": {{barcode2}},
 "quantity": {{quantity2}},
 "unitPrice": {{price2}}
 }
 ]
} 

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

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

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

Я просто проверяю, сколько существует наборов штрих-кодов, и, используя это, я готовлю setCount, который будет использоваться для циклического перебора данных и создания skus элементов.

Сценарий предварительного запроса:

_ = require('lodash');

// Here we'll know how many unit counts we have, I am checking barcode only.
let setCount = _.chain(data) // data is the actual iteration data from the csv file, don't worry just run the script.
    .keys()
    .countBy((item) => item.includes('barcode'))
    .value()
    .true,

    skus = [];


for(var i = 1; i <= setCount; i++) {
    skus.push({
        barcode: data[`barcode${i}`],
        quantity: data[`quantity${i}`],
        unitPrice: data[`unitprice${i}`]
    });
}

let requestBody = {
    order: data["orderId"],
    clientId: data["clientId"],
    skus: skus
};

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

По вашему запросу Body tab сделайте следующее:

Установите тело в raw с помощью JSON и добавьте {{requestBody}} в качестве переменной в теле.

Вы можете сослаться на скриншот, если есть какая-то путаница. raw json body

1 голос
/ 12 апреля 2019

Для динамического создания JSON вам понадобится Сценарий предварительного запроса .

По сути, это понадобится:

var body = {
    order : pm.environment.get('orderId'),
    clientId : pm.environment.get('clientId'),
    skus : []
};

for (var i = 1; i <= 3; i++) {
    var barcode = pm.environment.get('barcode' + i);
    if (barcode) {
        var quantity = pm.environment.get('quantity' + i);
        var price = pm.environment.get('price' + i);
        var obj = {
            barcode : barcode,
            quantity : quantity,
            unitPrice : price
        }
        body.skus.push(obj);
    }
}
pm.environment.set('dynamic_json', JSON.stringify(body));

Затем в Вкладка Body , в которую вы обычно помещаете фиксированный JSON, используйте только это:

{{dynamic_json}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...