Документация Tester DSL: миграция с Postman/Newman

Миграция с 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).