Массив из переменной отправляется как почтальон как строка - PullRequest
0 голосов
/ 05 марта 2019

Я собрал данные из ответа и поместил их в массив в «Тестах».console.log показывает, что я получил массив:

enter image description here

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

enter image description here

Как установить обычный массив?

Ответ от собранных мной данных:

{
  "sent": 0,
  "remaining": 1000000,
  "gifts": [
    {
        "id": 43468,
        "amount": 50000,
        "can_gift_back": true
    },
    {
        "id": 43469,
        "amount": 50000,
        "can_gift_back": true
    }
  ]
}

Мой код на вкладке "Тесты":

let jsonData = pm.response.json();
let gifts = jsonData.gifts;

//calculate array length
function objectLength(obj) {
    var result = 0;
        for(var prop in obj) {
            if (obj.hasOwnProperty(prop)) {
            result++;
            }    
        }
    return result;
}
let arrayLength = objectLength(gifts);

//push response data to the array
var giftsArray = [];
for (var i = 0; i < arrayLength; i++) {
        var giftsIDs = gifts[i].id;
        giftsArray.push(giftsIDs);
    }
pm.environment.set("giftsToCollect", giftsArray);

UPD:

  1. После использования кода из ответа по-разному я получил такой вопрос.

Точка 1 на рисунке описывает способ поведения при использовании stringify

Точка 2 описывает поведение, когда stringify не используется enter image description here 2. Пример запроса JSON с вручную введенными идентификаторами enter image description here

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Вы можете захватить все значения id в массиве, используя Lodash , который является внешним модулем, который вы можете использовать в приложении Postman.

Сохранение array в качестве переменной после этого аналогично тому, как вы это уже делали, но я добавил JSON.stringify() к значению массива, или оно сохранится в виде строки.

let giftsArray = []

_.each(pm.response.json().gifts, (item) => {
    giftsArray.push(item.id)
})

pm.environment.set('giftsToCollect', JSON.stringify(giftsArray))

После этого вы сможете ссылаться на переменную окружения следующим образом:

gift_ids: {{giftsToCollect}}

Я смоделировал данные запроса локально, просто чтобы показать вам, как они собирают значения из данных.

Postman

0 голосов
/ 06 марта 2019

Рабочий способ - добавить pm.sendRequest с данными из второго теста на вкладку "Тесты" 1-го теста.В этом случае 2-й тест не выполняется в целом, но подарки собираются.Это не лучшее решение, но оно работает.

let jsonData = pm.response.json();

let giftsArray = [];

_.each(pm.response.json().gifts, (item) => {
    giftsArray.push(item.id);
});

pm.sendRequest({
    url: 'http://url/api/gifts/collect',
    method: 'POST',
    header: {
        'Content-type': 'application/json',
        'Host': 'url',
        'accept-encoding': 'gzip, deflate',
        'Connection': 'keep-alive'
    },
    body: {
        mode: 'raw',
        raw: JSON.stringify({'api_token': '48696295110ba1e8f9937820dc9b6626', 'user_id': '100650741100901', 'gift_ids': giftsArray, 'version': '6.0.0'})
    }
}, function (err, res) {
console.log(res);
}); 
...