Это 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);