Полезные заготовки JavaScript-скриптов для автоматизации тестирования API с подробными комментариями
Этот скрипт используется, когда API возвращает массив объектов, и нам нужно собрать определённое поле (например, productId
) из каждого объекта. Это полезно для подготовки данных для следующего запроса, например — создания заказа из списка товаров.
// Получаем JSON-ответ от сервера
const jsonData = pm.response.json();
// Проверяем, является ли ответ массивом
if (Array.isArray(jsonData)) {
// Создаём новый массив, в который попадут все значения productId
const productIds = jsonData.map(item => item.productId);
// Сохраняем полученный массив как строку в переменную коллекции
pm.collectionVariables.set("productIds", JSON.stringify(productIds));
}
map()
// это метод массива, который позволяет пройтись по каждому
// элементу массива и применить к нему функцию.
// В данном случае мы берём каждый объект из массива jsonData
// и применяем к нему функцию, которая возвращает значение productId.
item => item.productId
// это стрелочная функция, которая принимает один аргумент (item)
// и возвращает значение productId из этого объекта.
// То есть мы берём каждый объект из массива jsonData,
// извлекаем из него productId и возвращаем его в новый массив.
//Если у нас есть исходный массив:
const jsonData = [
{ productId: 1, name: "Товар 1" },
{ productId: 2, name: "Товар 2" },
{ productId: 3, name: "Товар 3" }
];
//То после выполнения map() мы получим новый массив:
const productIds = [1, 2, 3];
//Сохраняем полученный массив как строку в переменную коллекции
pm.collectionVariables.set("productIds", JSON.stringify(productIds));
Иногда переменные создаются только для промежуточных шагов. Чтобы не засорять окружение, их удобно удалять автоматически. Этот скрипт сначала добавляет имя переменной в специальный список, а в конце — удаляет все из него.
// Устанавливаем переменную stepToken со значением "abc123"
pm.collectionVariables.set("stepToken", "abc123");
// Получаем уже существующий список временных переменных
let tempVars = pm.collectionVariables.get("tempVars");
// Преобразуем строку в массив, если переменная существует, иначе создаём пустой
tempVars = tempVars ? JSON.parse(tempVars) : [];
// Добавляем новое имя переменной в список
tempVars.push("stepToken");
// Сохраняем обновлённый список
pm.collectionVariables.set("tempVars", JSON.stringify(tempVars));
// Создаем переменную stepToken со значением "abc123"
// мы понимаем, что это временная переменная,
// которая будет использоваться только в этом запросе или тесте.
pm.collectionVariables.set("stepToken", "abc123");
// Получаем уже существующий список временных переменных
let tempVars = pm.collectionVariables.get("tempVars");
// Здесь мы получаем значение переменной окружения "tempVars", которая
// предположительно содержит строку с JSON-представлением массива имён
// временных переменных.
// Преобразуем строку в массив, если переменная существует,
// иначе создаём пустой
tempVars = tempVars ? JSON.parse(tempVars) : [];
// ? - Это тернарный оператор, который проверяет:
// - Если tempVars существует (не null, не undefined), то преобразуем
// JSON-строку в JavaScript-объект (в данном случае массив) с помощью JSON.parse()
// - Если tempVars не существует, то создаём пустой массив []
// Добавляем новое имя переменной в список
tempVars.push("stepToken");
// push() - это функция, которая добавляет новый элемент в конец массива.
// В нашем случае мы добавляем строку "stepToken" в массив tempVars.
// Таким образом мы отслеживаем, что переменная "stepToken" была создана.
// Сохраняем обновлённый список
pm.collectionVariables.set("tempVars", JSON.stringify(tempVars));
// JSON.stringify() преобразует JavaScript-объект (в данном случае массив)
// в JSON-строку.
// pm.collectionVariables.set() сохраняет эту строку обратно в переменную окружения "tempVars".
// Это нужно, потому что Postman может хранить в переменных окружения
// только строковые значения.
// Пример: Если изначально tempVars содержал массив ["userId", "authToken"]
// После выполнения кода он будет содержать ["userId", "authToken", "stepToken"]
// Получаем список временных переменных (или создаём пустой массив)
const tempVars = JSON.parse(pm.collectionVariables.get("tempVars") || "[]");
// Проходимся по каждой переменной и удаляем её
tempVars.forEach(name => {
pm.collectionVariables.unset(name);
});
// Удаляем сам список
pm.collectionVariables.unset("tempVars");
const tempVars = JSON.parse(pm.collectionVariables.get("tempVars") || "[]");
// pm.collectionVariables.get("tempVars") пытается получить значение переменной "tempVars"
// Оператор || (логическое ИЛИ) используется для предоставления
// значения по умолчанию "[]" (пустой массив в виде строки),
// если переменная "tempVars" не существует или равна null/undefined
// JSON.parse() преобразует JSON-строку в JavaScript-объект (в данном случае массив)
// Результат сохраняется в константу tempVars
// Проходимся по каждой переменной и удаляем её
tempVars.forEach(name => {
pm.collectionVariables.unset(name);
});
// forEach() - это метод перебора массива, который выполняет указанную в скобках функцию
// один раз для каждого элемента в массиве
// name => { ... } - это стрелочная функция, которая принимает один аргумент (name) -
// имя переменной из массива tempVars
// pm.collectionVariables.unset(name) - удаляет переменную коллекции с указанным именем
// Таким образом, этот код удаляет все переменные, имена которых
// были сохранены в массиве tempVars
// Удаляем сам список - если необходимо
pm.collectionVariables.unset("tempVars");
// После удаления всех временных переменных, мы также удаляем
// и саму переменную "tempVars", которая содержала их список
// Это завершает процесс очистки
// Пример: Если tempVars содержал массив ["userId", "authToken", "stepToken"]
// Этот код удалит переменные "userId", "authToken", "stepToken"
// А затем удалит и саму переменную "tempVars"
Этот скрипт нужен, если вы получаете объект с вложенными данными (например, auth.token.access
) и хотите сохранить доступный токен в переменную окружения для следующих запросов.
// Получаем JSON-объект из ответа
const jsonData = pm.response.json();
// Безопасно получаем значение вложенного поля access
const token = jsonData?.auth?.token?.access;
// Если токен существует, сохраняем его в переменные коллекции
if (token) {
pm.collectionVariables.set("accessToken", token);
}
// Получаем JSON-объект из ответа
const jsonData = pm.response.json();
// Преобразует тело ответа из JSON-строки в JavaScript-объект
// Безопасно получаем значение вложенного поля access
const token = jsonData?.auth?.token?.access;
// ?. - это оператор опциональной цепочки, который проверяет
// существование каждого свойства перед обращением к следующему.
// Он позволяет избежать ошибок, если какое-то из промежуточных
// свойств (jsonData, auth, token) отсутствует или равно null/undefined
// Если токен существует, сохраняем его в переменные коллекции
if (token) {
pm.collectionVariables.set("accessToken", token);
}
// Проверяем, что token не пустой (не null, не undefined, не '')
// и сохраняем его значение в переменную коллекции "accessToken"
// Пример входных данных:
// {"auth": {"token": {"access": "eyJhbG..."} } }
// Результат: accessToken = "eyJhbG..."
Если в ответе приходит массив, и вам нужно найти один объект по условию (например, товар категории "Одежда"), этот скрипт поможет извлечь нужный объект и сохранить, например, его ID.
// Получаем массив из JSON-ответа
const jsonData = pm.response.json();
// Ищем первый объект, у которого category = "Одежда"
const item = jsonData.find(i => i.category === "Одежда");
// Если такой объект найден, сохраняем его productId
if (item) {
pm.collectionVariables.set("clothingProductId", item.productId);
}
// Ищем первый объект, у которого category = "Одежда"
const item = jsonData.find(i => i.category === "Одежда");
// find() - метод массива, который возвращает первый элемент,
// удовлетворяющий условию в переданной функции
// i => i.category === "Одежда" - стрелочная функция, проверяющая
// равно ли свойство category текущего элемента строке "Одежда"
// Если такой объект найден, сохраняем его productId
if (item) {
pm.collectionVariables.set("clothingProductId", item.productId);
}
// Проверяем, что объект найден (не null, не undefined)
// и сохраняем его productId в переменную коллекции "clothingProductId"
// Пример входных данных:
[
{ productId: 101, category: "Электроника" },
{ productId: 202, category: "Одежда" },
{ productId: 303, category: "Мебель" }
]
// Результат:
clothingProductId = 202
Когда вы хотите отправить массив товаров в теле запроса (например, при создании накладной), можно заранее сформировать такой массив и сохранить в переменную. Скрипт берёт первые 3 товара и собирает нужную структуру.
// Получаем JSON-массив из ответа
const jsonData = pm.response.json();
// Выбираем первые 3 товара
const items = jsonData.slice(0, 3).map((item, index) => ({
id: `item-${index + 1}`, // Уникальный ID внутри массива
productId: item.productId, // ID продукта из ответа
quantity: 10 // Желаемое количество
}));
// Сохраняем массив как строку JSON в переменную коллекции
pm.collectionVariables.set("orderItems", JSON.stringify(items));
// Выбираем первые 3 товара
const items = jsonData.slice(0, 3).map((item, index) => ({
id: `item-${index + 1}`, // Уникальный ID внутри массива
productId: item.productId, // ID продукта из ответа
quantity: 10 // Желаемое количество
}));
slice(0, 3) - выбирает подмассив, начиная с индекса 0 до 3 (не включая 3)
map() - создает новый массив, преобразуя каждый элемент
(item, index) => ({ ... }) - стрелочная функция с двумя параметрами:
// - item: текущий элемент массива
// - index: индекс текущего элемента
// Функция возвращает новый объект с полями id, productId и quantity
// Сохраняем массив как строку JSON в переменную коллекции
pm.collectionVariables.set("orderItems", JSON.stringify(items));
// JSON.stringify() преобразует массив объектов в JSON-строку
// Сохраняем результат в переменную коллекции "orderItems"
// Пример входных данных:
[
{ productId: 101, name: "Товар 1" },
{ productId: 202, name: "Товар 2" },
{ productId: 303, name: "Товар 3" },
{ productId: 404, name: "Товар 4" }
]
// Результат в orderItems:
[
{ "id": "item-1", "productId": 101, "quantity": 10 },
{ "id": "item-2", "productId": 202, "quantity": 10 },
{ "id": "item-3", "productId": 303, "quantity": 10 }
]
Если вам нужно передать несколько ID в query-параметре, например ?ids=1,2,3
, этот скрипт превращает массив _id в строку и сохраняет результат.
// Получаем JSON-массив из ответа
const jsonData = pm.response.json();
// Извлекаем все значения _id и объединяем их через запятую
const ids = jsonData.map(obj => obj._id);
// Сохраняем строку в переменную
pm.variables.set("idsCsv", ids.join(","));
// Извлекаем все значения _id и объединяем их через запятую
const ids = jsonData.map(obj => obj._id);
map() - создает новый массив, извлекая свойство _id из каждого объекта
obj => obj._id - стрелочная функция, которая принимает объект
и возвращает значение его свойства _id
// Сохраняем строку в переменную
pm.variables.set("idsCsv", ids.join(","));
join(",") - метод массива, объединяющий все элементы в строку
с разделителем-запятой между элементами
Результат сохраняется в переменную запроса "idsCsv"
// Пример входных данных:
[
{ _id: "a1b2c3", name: "Товар 1" },
{ _id: "d4e5f6", name: "Товар 2" },
{ _id: "g7h8i9", name: "Товар 3" }
]
// Результат:
idsCsv = "a1b2c3,d4e5f6,g7h8i9"
Иногда нужные данные приходят не в теле ответа, а в заголовках. Например, токен авторизации может быть в заголовке x-access-token
. Этот скрипт показывает, как извлечь такое значение.
// Получаем значение заголовка по ключу
const token = pm.response.headers.get("x-access-token");
// Если заголовок найден, сохраняем его значение
if (token) {
pm.environment.set("token", token);
}