Какой у вас опыт написания скриптов в Postman?

Ответ

Есть опыт использования Postman Scripting (JavaScript) для автоматизации тестирования API и настройки запросов.

Основные сценарии применения:

  • Тесты (Tests tab): Валидация ответов сервера.
  • Пре-реквесты (Pre-request Scripts): Подготовка данных перед отправкой запроса.
  • Работа с переменными: Управление переменными окружения, коллекции и глобальными переменными.
  • Автоматизация коллекций: Запуск цепочек запросов с передачей данных между ними.

Примеры кода:

// ===== ПРЕ-РЕКВЕСТ =====
// Генерация динамических данных
const randomId = Math.floor(Math.random() * 1000);
pm.environment.set("dynamic_user_id", randomId);

// Подпись запроса (упрощенный пример)
const crypto = require('crypto-js');
const secret = pm.environment.get('api_secret');
const signature = crypto.HmacSHA256(pm.request.body, secret).toString();
pm.request.headers.add({key: 'X-Signature', value: signature});

// ===== ТЕСТЫ =====
// Проверка статуса и структуры ответа
pm.test("Status is 200 OK", function () {
    pm.response.to.have.status(200);
});

pm.test("Response has valid JSON schema", function () {
    const schema = {
        "type": "object",
        "properties": {
            "id": {"type": "number"},
            "name": {"type": "string"}
        },
        "required": ["id", "name"]
    };
    pm.response.to.have.jsonSchema(schema);
});

// Проверка бизнес-логики
pm.test("New user ID is returned", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.id).to.be.a('number');
    pm.expect(jsonData.id).to.eql(pm.environment.get("dynamic_user_id"));
});

// Сохранение данных для следующего запроса в коллекции
pm.environment.set("auth_token", pm.response.json().accessToken);

Ответ 18+ 🔞

А, вот это тема, блядь! Postman Scripting, ёпта! Это ж когда тебе уже надоело, как обезьяна, кнопки тыкать, и хочется, чтобы всё само, сука, делалось. Как по маслу, блядь!

Смотри, в чём прикол, ёбана. Ты пишешь на JavaScript'е, но не на том, который в браузере, а на своём, постинском. И там можно такую хуйню отчебучить, что сам потом офигеешь.

Где это впендюрить можно:

  • Тесты (Tests) — это чтобы после запроса проверить, не наебал ли тебя сервер. Типа, статус 200 ли, JSON правильный ли, или там какая-то бизнес-логика соблюдается.
  • Пре-реквесты (Pre-request Scripts) — это чтобы перед тем, как запрос улетит, подготовить всё, как надо. Сгенерить какой-нибудь токен, подписать запрос, хуй знает что ещё.
  • Переменные — это святое, блядь! Ты можешь из скрипта лезть в переменные окружения, коллекции, глобальные — и хуярить туда-сюда данные. Как шарманка, только автоматическая.
  • Коллекции автоматом — вот это вообще песня. Запустил коллекцию, а она сама, сука, запрос за запросом гоняет, данные передаёт, токены подставляет. Красота, ёпта!

Вот, смотри, как это выглядит, на живых примерах:

// ===== ПРЕ-РЕКВЕСТ (Перед отправкой) =====
// Сгенерим ID пользователя, чтоб не повторяться, как последний мудак
const randomId = Math.floor(Math.random() * 1000);
pm.environment.set("dynamic_user_id", randomId); // Запихнули в переменные

// А вот, допустим, надо запрос подписать, чтоб тебя не послали нахуй
const crypto = require('crypto-js'); // Библиотека есть встроенная
const secret = pm.environment.get('api_secret'); // Достали секрет из переменных
const signature = crypto.HmacSHA256(pm.request.body, secret).toString(); // Намутили подпись
pm.request.headers.add({key: 'X-Signature', value: signature}); // И в заголовок её, блядь!

// ===== ТЕСТЫ (После ответа) =====
// Первым делом — статус проверить. 200? Или опять 500, сука?
pm.test("Status is 200 OK", function () {
    pm.response.to.have.status(200);
});

// А JSON-то правильный пришёл? Не абы какая хуйня?
pm.test("Response has valid JSON schema", function () {
    const schema = {
        "type": "object",
        "properties": {
            "id": {"type": "number"},
            "name": {"type": "string"}
        },
        "required": ["id", "name"]
    };
    pm.response.to.have.jsonSchema(schema); // Эта штука сравнит с шаблоном
});

// А теперь бизнес-логика. Тот ли ID вернули, который мы отправили?
pm.test("New user ID is returned", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.id).to.be.a('number'); // Чтоб число было, а не строка
    pm.expect(jsonData.id).to.eql(pm.environment.get("dynamic_user_id")); // И чтоб совпадало с нашим!
});

// И, наконец, самое вкусное — сохраняем токен для следующих запросов
// Чтоб не авторизоваться каждый раз, как лох последний
pm.environment.set("auth_token", pm.response.json().accessToken);

Вот и вся магия, блядь. Сначала кажется, что овердохуища кода, но как вникнешь — проще пареной репы. Главное начать, а там уже сам не заметишь, как начнёшь такие скрипты писать, что Postman у тебя будет почти как робот, сука, работать.