Шпаргалка по Postman

Это cheatsheet по работе со standalone-приложением Postman (не Chrome-расширением).

Работа с переменными

Все переменные при работе в Postman могут быть установлены вручную в интерфейсе и имеют свои области видимости (scope).

Переменные в Request Builder

Зависит от области видимости; общий синтаксис:

{{myVariable}}

Примеры:

URL-адрес запроса:

http://{{domain}}/users/{{userId}}

Заголовки (в формате ключ:значение):

X-{{myHeaderName}}:foo

Тело запроса:

{"id": "{{userId}}", "name": "John Doe"}

Глобальные переменные

Стандартные переменные, для быстрых проверок и прототипов.

Рекомендуется одновременно использовать только одну из указанных ниже переменных; а после использования удалять их.

Когда использовать:

  • При передаче данных в другие запросы

Присваивание (задание) глобальных переменных:

pm.globals.set('myVariable', MY_VALUE);

Получение:

pm.globals.get('myVariable');

Альтернативный вариант, в зависимости от области видимости:

pm.variables.get('myVariable');

Удаление

Удаление одной переменной:

pm.globals.unset('myVariable');

Удаление ВСЕХ глобальных переменных (используется редко, но иногда нужно):

pm.globals.clear();

Переменные в Postman-коллекциях

Когда применяются:

  • Как хорошая альтернатива глобальным переменным или переменным окружения
  • для URL-ов или учетных данных аутентификации, если существует только одно окружение

Присваивание:

pm.collectionVariables.set('myVariable', MY_VALUE);

Получение:

pm.collectionVariables.get('myVariable');

Удаление:

pm.collectionVariables.unset('myVariable');

Переменные окружения

Это те, которые привязаны к тестовому окружению. Лучше применять их вместо глобальных, поскольку у них меньше область видимости.

Когда использовать:

  • Для сохранения данных, специфичных для этого тестового окружения
  • URL-адреса и учетные данные аутентификации
  • Передача данных другим запросам

Указание (присваивание):

pm.environment.set('myVariable', MY_VALUE);

Получение:

pm.environment.get('myVariable');

В зависимости от окружения:

pm.variables.get('myVariable');

Удаление:

Удаление одной переменной:

pm.environment.unset("myVariable");

Удаление ВСЕХ переменных окружения:

pm.environment.clear();

Примеры:

pm.environment.set('name', 'John Doe');

console.log(pm.environment.get('name'));

console.log(pm.variables.get('name'));

Определение окружения:

Если нужно узнать, какое окружение активно в данный момент (locahost, production или другое), есть свойство name:

pm.environment.name

Переменные при обработке данных (Data variables)

Существуют только во время выполнения итерации, созданной в раннере коллекций (Collection Runner) или в Newman.

Когда используются:

  • Если есть много наборов данных (датасетов)

Задание (присваивание):

Только из CSV-файла или JSON-файла.

Получение:

pm.iterationData.get('myVariable);

В зависимости от области видимости:

pm.variables.get('myVariable');

Удаление:

Как создать, так и удалить можно только из файла CSV или JSON.

Локальные переменные

Локальные переменные доступны только в том запросе, который их задал, или при работе раннера Newman / Collection.

Когда применяются:

  • Когда нужно оверрайдить область видимости переменной, по какой-то причине.

Указание:

pm.variables.set('myVariable', MY_VALUE);

Получение:

pm.variables.get('myVariable', MY_VALUE);

Удаление:

Локальные переменные удаляются автоматически, после выполнения тестов.

Динамические переменные

Все динамические переменные могут объединяться со строками, это происходит когда генерируются динамические или какие-то специфические данные.

Пример JSON-тела:

{"name": "John Doe", "email": "john.doe.{{$timestamp}}@example.com"}

Если в Postman-скриптах нужны подобные динамические данные, можно применять replaceIn.

pm.variables.replaceIn('{{$randomFirstName}}'); // returns a String

Переменные в логах и дебаг

Можно открыть консоль Postman и использовать console.log в тестовом скрипте.

Пример:

var myVar = pm.globals.get("myVar");

console.log(myVar);

Assertions (ассерты)

Примечание: нужно сначала добавить в колбек pm.test.

Пример:

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

Проверка статус-кода

Проверка, что статус-код ОК, 200:

pm.response.to.have.status(200);

Одновременная проверка нескольких статус-кодов:

pm.expect(pm.response.code).to.be.oneOf([201,202]);

Проверка времени ответа

Проверить, что время отклика менее 100 мс:

pm.expect(pm.response.responseTime).to.be.below(9);

Заголовки

Что заголовок существует:

pm.response.to.have.header('X-Cache');

Что у заголовка есть значение:

pm.expect(pm.response.headers.get('X-Cache')).to.eql('HIT');

Cookies

Что куки существует:

pm.expect(pm.cookies.has('sessionId')).to.be.true;

Что у него есть значение:

pm.expect(pm.cookies.get('sessionId')).to.eql('ad3se3ss8sg7sg3');

Тело

Любой тип контента / HTML-ответа

Точное соответствие тела:

pm.response.to.have.body("OK");

pm.response.to.have.body('{"success"=true}');

Частичное совпадение/вхождение в теле:

pm.expect(pm.response.text()).to.include('Order placed.');

JSON-ответы

Обработка тела (нужна при всех assertions):

const response = pm.response.json();

Простая проверка значения:

pm.expect(response.age).to.eql(30);

pm.expect(response.name).to.eql('John');

Проверка вложенных значений:

pm.expect(response.products.0.category).to.eql('Detergent');

XML-ответы

Конвертация XML-тела в JSON:

const response = xml2Json(responseBody);

Пропуск тестов

Стандартно применяется pm.test.skip. Скипнутые тесты будут отображаться в репортах.

Пример:

pm.test.skip("Status code is 200", () => {
    pm.response.to.have.status(200);
});

Пропуск какого-то теста по условию:

const shouldBeSkipped = true; // some condition

(shouldBeSkipped ? pm.test.skip : pm.test)("Status code is 200", () => {
    pm.response.to.have.status(200);
});

Fail теста

Можно задать fail теста без ассерта:

pm.expect.fail('This failed because ...');

Postman Sandbox

pm

Это объект, содержащий запускаемый скрипт, он может обращаться к переменным и имеет доступ к readonly-копии запроса и ответа.

pm.sendRequest

Позволяет отправлять простые HTTP(S) GET-запросы из тестов и скриптов. 

Пример:

pm.sendRequest('https://httpbin.org/get', (error, response) => {
    if (error) throw new Error(error);
    console.log(response.json());
});

Полный HTTP POST-запрос с JSON-телом:

const payload = { name: 'John', age: 29};

const options = {
    method: 'POST',
    url: 'https://httpbin.org/post',
    header: 'X-Foo:foo',
    body: {
        mode: 'raw',
        raw: JSON.stringify(payload)
    }
};
pm.sendRequest(options, (error, response) => {
    if (error) throw new Error(error);
    console.log(response.json());
});

POST-запрос с данными из форм (Postman добавит заголовок multipart/form-data):

const options = {
    'method': 'POST',
    'url': 'https://httpbin.org/post',
    'body': {
            'mode': 'formdata',
            'formdata': [
                {'key':'foo', 'value':'bar'},
                {'key':'bar', 'value':'foo'}
            ]
    }
};
pm.sendRequest(options, (error, response) => {
    if (error) throw new Error(error);
    console.log(response.json());
});

Отправка файла с данными из формы POST-запросом

В целях безопасности — невозможно загрузить файл из скрипта с помощью pm.sendRequest. Нельзя читать или записывать файлы из скриптов.

Postman Echo

Хелпер для тестирования запросов. Подробная документация здесь.

Получить текущее время UTC pre-request-скриптом:

pm.sendRequest('https://postman-echo.com/time/now', function (err, res) {
    if (err) { console.log(err); }
    else {
        var currentTime = res.stream.toString();
        console.log(currentTime);
        pm.environment.set("currentTime", currentTime);
    }
});

Workflows

Работают только в автоматических прогонах коллекций (в Collection Runner или Newman), но не внутри standalone-приложения Postman. 

Установка, какой запрос будет выполняться следующим:

postman.setNextRequest(“Request name");

Прекращение отправки запросов / остановка прогона коллекции

postman.setNextRequest(null);

Источник

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас