Все разделы

Миграция

Переход с Postman

На этой странице

Ещё выбираете? Сначала посмотрите Tetiva как аналог Postman или скачайте Tetiva и попробуйте импорт на настоящей коллекции.

Переезд состоит из двух действий: выгрузить из Postman коллекцию в формате Collection v2.1 и импортировать файл в Tetiva. Переносятся структура папок, запросы, заголовки, тела, авторизация, описания, сохранённые ответы и — отдельным файлом — окружения. Скрипты переносятся, если при импорте отметить «Импортировать скрипты». Переменные коллекции становятся окружением с её именем. Не переносится всё, что связано с облаком Postman, и ниже расписано, что именно проверить.

Шаг 1. Выгрузка из Postman#

  1. В меню коллекции выберите Export и формат Collection v2.1. Сохраните .json.
  2. Окружения выгружаются отдельно — по файлу на окружение.

Формат v2.0 клиент не примет: импорт остановится с ошибкой unsupported schema, only Postman Collection v2.1 is supported. Если файл достался вам от коллеги и формат неизвестен — откройте его и посмотрите поле info.schema, в нём должно быть v2.1.

Шаг 2. Импорт в Tetiva#

  • В корень панели коллекций — кнопка «Импорт» над деревом коллекций → «Импорт из файла…».
  • Внутрь существующей коллекции — правый клик по ней → «Импорт из файла…». Импортированное дерево ляжет внутрь неё.
  • Выберите .json. Откроется окно подтверждения. В нём видно, сколько в файле папок, запросов и примеров, куда встанет коллекция, на какие хосты ходят запросы, что изменилось при импорте и какие в файле скрипты. Скрипты импортируются, только если отметить «Импортировать скрипты». После «Импортировать» появится уведомление вида Импортирована коллекция «Payments API»: 4 папки · 27 запросов · 3 примера и откроется вкладка новой коллекции.
  • Окружения — селектор окружения в строке запроса → «Настроить окружения…» → кнопка импорта (подсказка «Импорт окружения из Postman или Hoppscotch»). Файл окружения можно выбрать и через «Импорт из файла…».

Корневая коллекция Postman становится обычной коллекцией Tetiva, папки — вложенными коллекциями. Глубина вложенности не ограничена.

Tetiva
v1.3.1
Контекстное меню коллекции в Tetiva с пунктом «Импорт из файла…»Контекстное меню коллекции в Tetiva с пунктом «Импорт из файла…»
«Импорт из файла…» из контекстного меню импортирует файл внутрь выбранной коллекции

Соответствие концепций#

PostmanTetiva
CollectionКоллекция верхнего уровня: имя, описание, авторизация
FolderВложенная коллекция: имя, описание, авторизация
RequestЗапрос: имя, метод, URL, заголовки, тело, авторизация
Отключённый заголовокЗаголовок со снятой галочкой — значение сохраняется
Auth: Bearer, Basic, API KeyТе же типы; у API Key переносятся имя, значение и размещение — header или query
Auth: OAuth 2.0, JWT, Digest, AWS SignatureТе же схемы; гранты OAuth 2.0 и алгоритм JWT переносятся, authorization_code_with_pkce приезжает как Authorization Code
Auth: NTLM, Hawk и прочиеNo Auth; после импорта показывается список того, что не перенеслось
Запрос без блока authInherit: авторизация берётся у папки или коллекции; явный noauth становится No Auth
Описание запросаОписание на вкладке Docs
Body: raw + JSONТело типа JSON
Body: raw + XML или HTMLТело типа XML
Body: raw без языка, текстТело типа Raw
Body: form-dataТело типа Form; поля-файлы нужно выбрать заново
Body: GraphQLЗапрос GraphQL — POST, query и variables на своих местах
Body: x-www-form-urlencodedТело типа Form с исходными ключами, значениями и флажками включения
Body: binaryТело binary без файла — выберите его заново
Pre-request и Tests скриптыPre-request и post-response скрипты, если отметить «Импортировать скрипты»
Сохранённые ответы (Examples)Примеры ответов; пример с телом больше 256 КБ пропускается
Collection variablesОкружение с именем коллекции: выберите его в списке окружений
Environment (отдельный файл)Окружение; переменные с типом secret остаются секретными, выключенные — выключенными
Метод вне списка GET…HEADGET

Что не переносится#

ЧтоЧто делать
Глобальные переменныеФайл globals станет окружением «Globals» или с именем файла: глобального уровня в Tetiva нет
Значения path-переменных (:id)В URL остаётся плейсхолдер — подставьте переменную окружения
Mock-серверы, мониторы, Runner, FlowsАналогов нет

Что проверить после импорта#

Авторизация по наследству. Запрос без собственного блока auth импортируется с режимом Inherit и, как в Postman, берёт авторизацию у папки или коллекции выше по дереву. Явный noauth становится No Auth. Как работает цепочка наследования, описано на странице Авторизация.

Скрипты. Импортируются, только если в окне подтверждения отмечено «Импортировать скрипты». Объект pm в Tetiva реализован частично, поэтому неподдерживаемые вызовы pm.* придётся поправить руками — см. таблицу ниже.

Схемы, которых нет. NTLM, Hawk и прочая экзотика приезжают как No Auth, но не молча: после импорта висит уведомление со списком — по строке на блок авторизации, с именем коллекции, папки или запроса и причиной. Пройдитесь по нему и настройте эти запросы заново, см. Авторизация.

Файлы. Тело binary и поля-файлы в form-data приезжают без файла: выберите его заново на вкладке Body.

Переменные окружения. Выключенные в Postman переменные остаются выключенными. Переменные коллекции попадают в отдельное окружение, и пока вы его не выберете, {{переменные}} из них не подставятся.

Секреты. Переменные с типом secret остаются секретными, но значения в файле Postman лежат открытым текстом — не оставляйте выгрузку в общей папке.

Скрипты: что понимает pm.*#

Скрипты Tetiva выполняются на движке goja — это JavaScript, но не Node и не браузер. Объект pm реализован частично: тесты на pm.test и pm.expect обычно работают без правок, а pm.sendRequest, pm.globals и require придётся заменить. Полное описание — на странице Скрипты.

ВызовСтатус
pm.environment.get(key), set(key, value), unset(key)Работает
pm.variables.get, set, unset, has, replaceIn, toObjectРаботает: значение из pre-скрипта подставляется в {{переменные}} этого запроса и видно его post-скрипту, но в окружение не сохраняется; get при отсутствии локального значения берёт его из окружения
pm.request.method, pm.request.url, pm.request.protocolРаботает; url — строка, а не объект, protocol — http, grpc, graphql или websocket
pm.request.headers.add({ key, value }), upsert({ key, value }), remove(key)Работает; регистр имени не важен, как в Postman, других методов у headers нет
pm.response.code, pm.response.statusText, pm.response.text(), pm.response.json()Работает в post-response скрипте; statusText — только gRPC, у HTTP и GraphQL там undefined. Есть и headers.get(name), headers.has(name), responseTime
pm.response.statusРаботает: текст статуса, «OK», как в Postman; у gRPC — имя статуса
pm.test(name, fn)Работает; результаты видны на вкладке Tests
console.log, info, warn, errorРаботает, вывод складывается в консоль запуска; объекты и массивы печатаются как JSON
btoa(), atob()Работает, так что pre-скрипт, собирающий заголовок Basic, переносится как есть; atob читает и base64url, например payload JWT
pm.expect(...), pm.response.to.have.status(...)Работает: chai 4.5, как в Postman; pm.response.to умеет status, header, body, jsonBody, json и классы статусов
pm.collectionVariables.get/set/unsetРаботает с переменными активного окружения
pm.globalsНет: вызов падает с ошибкой pm.globals is not supported in Tetiva; use pm.environment
pm.sendRequest(), pm.setNextRequest()Нет; pm.sendRequest падает с сообщением, что скриптам сеть недоступна
require(), работа с файлами и сетью из скриптаНет — песочница закрыта, лимит выполнения 5 секунд

Типичный тест из Postman работает без правок:

pm.test("status is 200", function () {
    pm.response.to.have.status(200);
});
pm.environment.set("token", pm.response.json().access_token);

Тест проваливается, если не выполнилось утверждение или функция бросила исключение. Для проваленного утверждения вкладка Tests показывает только его сообщение, как в Postman, а для другой ошибки — ещё и номер строки, где она возникла. Pre-скрипт, бросивший исключение вне pm.test, останавливает отправку, как и в Postman: панель ответа пишет Request not sent, текст ошибки и её строку. Post-скрипт с ошибкой сохраняет тесты, которые успели пройти.

Обратно в Postman#

Экспорт работает в ту же сторону: правый клик по коллекции → «Экспорт в Postman», файл сохраняется как <имя>.postman_collection.json в формате v2.1. Окружение выгружается из окна «Окружения» пунктом «Экспорт в Postman».

Скрипты и примеры ответов экспортируются. gRPC-запросы формат Postman не описывает, поэтому они пропускаются с предупреждением. У WebSocket-запроса в файл попадают адрес и заголовки, но не сообщения. Подробности — на странице Импорт и экспорт.

обновлено