Все разделы

Миграция

Переход с Postman

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

Переезд состоит из двух действий: выгрузить из 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#

  • В корень панели коллекций — кнопка со стрелкой вниз в шапке панели, подсказка Import Postman Collection.
  • Внутрь существующей коллекции — правый клик по ней, пункт Import Postman Collection. Импортированное дерево ляжет внутрь неё.
  • Выберите .json. После разбора появится уведомление вида «Imported: 4 folders, 27 requests».
  • Окружения — селектор окружения в строке запроса → Manage Environments… → кнопка импорта (подсказка Import Postman Environment).

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

Tetiva
v0.17.0
Контекстное меню коллекции в Tetiva с пунктом Import Postman CollectionКонтекстное меню коллекции в Tetiva с пунктом Import Postman Collection
Тот же пункт меню импортирует файл внутрь выбранной коллекции

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

PostmanTetiva
CollectionКоллекция верхнего уровня: имя, описание, авторизация
FolderВложенная коллекция: имя, описание, авторизация
RequestЗапрос: имя, метод, URL, заголовки, тело, авторизация
Отключённый заголовокЗаголовок со снятой галочкой — значение сохраняется
Auth: Bearer, Basic, API KeyТе же типы; у API Key переносятся имя и значение, а размещение теряется — ключ всегда оказывается в header
Auth: OAuth 2.0, AWS, Digest, NTLM и прочиеNo Auth — настраивать заново
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Пусто — перенабрать во вкладке Body
Body: binaryПусто — выбрать файл заново
Environment (отдельный файл)Окружение; переменные с типом secret остаются секретными
Метод вне списка GET…HEADGET

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

ЧтоЧто делать
Pre-request и Tests скрипты — на всех уровняхПереписать: см. таблицу pm.* ниже
Переменные коллекции и глобальные переменныеПеренести в окружение
Описание отдельного запросаУ коллекций и папок описание переносится, у запросов его негде хранить
Значения path-переменных (:id)В URL остаётся плейсхолдер — подставьте переменную окружения
Examples, mock-серверы, мониторы, Runner, FlowsАналогов нет

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

Авторизация по наследству. В Postman запрос без собственного блока auth берёт авторизацию у коллекции. При импорте такой запрос получает No Auth, и токен коллекции к нему не применится. Откройте вкладку Auth у таких запросов и выберите Inherit — дальше цепочка наследования работает вверх по дереву коллекций, см. Авторизация.

Размещение API Key. Импортёр всегда кладёт ключ в заголовок, даже если в Postman он лежал в query-строке. Проверьте переключатель Add to во вкладке Auth у таких запросов.

Тела urlencoded и binary. Их содержимое не переносится: соберите форму заново на вкладке Body.

Переменные окружения. Импортируются все значения из файла, включая выключенные в Postman, и все приходят включёнными. Пройдитесь по списку и снимите лишние галочки.

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

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

Скрипты Tetiva выполняются на движке goja — это JavaScript, но не Node и не браузер. Объект pm реализован частично, поэтому тесты из Postman почти всегда требуют правки. Полное описание — на странице Скрипты.

ВызовСтатус
pm.environment.get(key), set(key, value), unset(key)Работает
pm.request.method, pm.request.url, pm.request.protocolРаботает; url — строка, а не объект
pm.request.headers.upsert({ key, value }), pm.request.headers.remove(key)Работает; других методов у headers нет
pm.response.code, pm.response.statusText, pm.response.text(), pm.response.json()Работает в post-response скрипте; statusText — только gRPC, у HTTP и GraphQL там undefined
pm.response.statusЕсть, но это алиас кода — число, а не строка «OK», как в Postman
pm.test(name, fn)Работает; результаты видны на вкладке Tests
console.log, info, warn, errorРаботает, вывод складывается в консоль запуска
pm.expect(...), pm.response.to.have.status(...)Нет — проверки пишутся через throw
pm.globals, pm.collectionVariables, pm.variablesНет — используйте pm.environment
pm.sendRequest(), pm.setNextRequest()Нет
require(), работа с файлами и сетью из скриптаНет — песочница закрыта, лимит выполнения 5 секунд

Типичный тест переписывается в три строки. Было в Postman:

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

Стало в Tetiva:

pm.test('status is 200', () => {
  if (pm.response.code !== 200) throw new Error('got ' + pm.response.code)
})
pm.environment.set('token', pm.response.json().access_token)

Проверка проваливается, если функция бросила исключение, — текст ошибки попадает в строку теста на вкладке Tests.

Обратно в Postman#

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

Два ограничения экспорта: скрипты в файл не попадают, а gRPC- и WebSocket-запросы формат Postman не описывает — от них останутся имя, адрес и тело, но не сервис, метод, путь к .proto и метаданные. Подробности — на странице Импорт и экспорт.

обновлено