Миграция с Postman / Newman на Mockarty Tester
Это руководство поможет перенести проверки Postman в код рядом с тестами
вашего приложения. Вы узнаете, как импортировать коллекцию в сценарий Mockarty
Tester или переписать проверки по шагам. Если вы хотите оставить готовый файл
коллекции и запускать его в CI, используйте руководство по переходу с
Postman/Newman.
Два пути импорта. Если у вас уже есть
.postman_collection.json
— CLI конвертирует его в каноничный IR и сгенерирует
Go/Python/Java исходник автоматически. Если начинаете с нуля —
пишите Tester chain напрямую, его API сделан читаемым как
Postman’ная связка «Pre-request Script + Tests + Send».
Кратко
| Postman | Mockarty Tester |
|---|---|
pm.sendRequest(...) |
t.HTTP().GET(...) / .POST(...) |
pm.test("name", fn) |
Один шаг чейна — название берёт глагол assert’а |
pm.expect(x).to.equal(y) |
.ExpectJSONPath("$.x", y) |
pm.response.code |
.ExpectStatus(200) |
pm.response.json() |
.ExpectJSONPath("$.field", value) |
pm.environment.set("k", v) |
.Extract("$.k", "v") / t.SetVar("k", v) |
pm.environment.get("k") |
{{k}} шаблон в любой строке чейна |
| Папки коллекции | t.Wrap("group name", func() { ... }) |
| Pre-request script | Обычный код перед чейном |
| Environment-файл | Map в WithVar(...) или t.SetVar(...) |
pm.expect(arr.length).to.equal(2) |
.ExpectJSONArrayLen("$.arr", 2) |
| Bearer auth | .Header("Authorization", "Bearer {{token}}") |
Автоматический импорт Postman-коллекции
mockarty-cli flow import users.postman_collection.json -o users.ir.json
mockarty-cli flow gen users.ir.json -o users_test.go
mockarty-cli flow run users_test.go
Импортёр маппит папки → Wrap-блоки, запросы → HTTP-шаги,
bearer/apikey/basic auth → заголовки. Test-скрипты Postman сохраняются
как postman_script-шаги IR — round-trip без потерь.
Целевой язык кодогенерации
flow gen по умолчанию выдаёт Go. Флаг --to py | java | kotlin
переключает на другой SDK:
mockarty-cli flow gen users.ir.json --to py -o users_test.py
mockarty-cli flow gen users.ir.json --to java -o UsersTest.java
mockarty-cli flow gen users.ir.json --to kotlin -o UsersTest.kt
Все четыре вывода работают с одним и тем же Mockarty Tester surface,
поэтому flow, написанный один раз, переносится в тестовый suite на
любом языке без переписывания утверждений и extracts. --package
управляет пакетом Go / Java / Kotlin (игнорируется для Python);
--base-url зашивает базовый URL в код вместо чтения
MOCKARTY_BASE_URL из окружения при запуске.
Запуск IR-документа на сервере
Когда не хочется поднимать локальный toolchain, flow exec
отправляет IR прямо в админ-узел Mockarty и печатает агрегированный
результат:
mockarty-cli flow exec users.ir.json --server https://mocks.example
# status: passed
# duration: 124ms
CLI завершается с ненулевым кодом при failed-статусе — естественно
ложится в shell с set -e. Связка с flow import заменяет Newman
в CI:
mockarty-cli flow import users.postman_collection.json -o users.ir.json && \
mockarty-cli flow exec users.ir.json
Миграция вручную — построчное сравнение
Коллекция Postman (JSON, сокращённо)
{
"info": {"name": "Login flow"},
"item": [{
"name": "login",
"request": {
"method": "POST",
"url": "{{base_url}}/login",
"body": {"mode":"raw","raw":"{\"user\":\"alice\"}"}
},
"event":[{"listen":"test","script":{"exec":[
"pm.test('status', function () { pm.expect(pm.response.code).to.equal(200); });",
"var data = pm.response.json();",
"pm.environment.set('token', data.token);"
]}}]
}, {
"name": "me",
"request": {
"method": "GET",
"url": "{{base_url}}/me",
"header": [{"key":"Authorization","value":"Bearer {{token}}"}]
},
"event":[{"listen":"test","script":{"exec":[
"pm.test('user', function () { pm.expect(pm.response.json().user).to.equal('alice'); });"
]}}]
}]
}
Mockarty Tester — Go
package main
import (
"log"
"os"
"github.com/mockarty/mockarty-go/tester"
)
func main() {
t := tester.New(tester.WithBaseURL(os.Getenv("BASE_URL")))
t.HTTP().POST("/login").
JSON(map[string]any{"user": "alice"}).
ExpectStatus(200).
Extract("$.token", "token")
t.HTTP().GET("/me").
Header("Authorization", "Bearer {{token}}").
ExpectJSONPath("$.user", "alice")
t.Finish()
if !t.OK() {
for _, e := range t.Errors() { log.Println(e) }
os.Exit(1)
}
}
Mockarty Tester — Python
from mockarty.tester import Tester
with Tester(base_url="http://localhost:8080") as t:
(t.http().post("/login")
.json({"user": "alice"})
.expect_status(200)
.extract("$.token", "token"))
(t.http().get("/me")
.header("Authorization", "Bearer {{token}}")
.expect_json_path("$.user", "alice"))
assert t.ok(), t.errors()
Mockarty Tester — Java
Tester t = new Tester.Builder().baseUrl(System.getenv("BASE_URL")).build();
t.http().post("/login")
.json(Map.of("user", "alice"))
.expectStatus(200)
.extract("$.token", "token");
t.http().get("/me")
.header("Authorization", "Bearer {{token}}")
.expectJsonPath("$.user", "alice");
t.finish();
if (!t.ok()) throw new AssertionError(t.errors());
Что Tester даёт чего нет у Newman
- Мульти-протокол — одна и та же лексика чейна работает для HTTP,
gRPC, GraphQL, WebSocket, SSE, Kafka, RabbitMQ, SOAP и DB. Postman
HTTP-центричный. - Настоящий runtime языка — идиомы Go / Python / Java, не
sandboxed JS-подмножество. Используйте IDE с автокомплитом,
командные библиотеки, CI-секреты. - Allure-вывод по умолчанию — оберни тест в
allure.WithTestи
каждый вызов чейна летит как Allure-шаг.mockarty-cli allure uploadгрузит в TCM. - Переменные между протоколами — Extract’нул токен из HTTP-логина,
используешь его в Kafka-заголовке на следующем шаге без плумбинга.
Загрузка результата в TCM
После прогона чейна — отправь результат как external run:
client.ExternalRuns().Report(ctx, "qa",
t.ToExternalRun(tester.ExternalRunOptions{
CaseName: "Login flow",
AutoCreate: true,
}),
)
Каждый шаг чейна попадает в external-run как ExternalStep с
protocol / method / URL в metadata — страница TCM run рендерит их
так же как нативные test-plan шаги.
См. также: миграция Postman mock-сервера
(для пользователей, заменяющих WireMock-стиль mock-сервера, не
test-runner).