Переезд состоит из двух действий: выгрузить из Postman коллекцию в формате Collection v2.1 и импортировать файл в Tetiva. Переносятся структура папок, запросы, заголовки, тела, авторизация и — отдельным файлом — окружения. Не переносятся скрипты, переменные коллекции и всё, что связано с облаком Postman: их придётся перенести руками, и ниже расписано, что именно проверить.
Шаг 1. Выгрузка из Postman#
- В меню коллекции выберите Export и формат Collection v2.1. Сохраните
.json. - Окружения выгружаются отдельно — по файлу на окружение.
Формат 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, папки — вложенными коллекциями. Глубина вложенности не ограничена.


Соответствие концепций#
| Postman | Tetiva |
|---|---|
| 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…HEAD | GET |
Что не переносится#
| Что | Что делать |
|---|---|
| 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 и метаданные. Подробности — на странице Импорт и экспорт.