Документация Migrators (массовая миграция)

Migrators (массовая миграция тест-кейсов)

mockarty-cli migrate <source> массово импортирует тест-кейсы из
upstream-TCM в namespace Mockarty. Идемпотентно — повторный запуск
безопасен (дубликат externalId учитывается как Skipped).

Поддерживаемые источники

Источник Статус Формат токена Заметки
testit Готов --from-token <PrivateToken hex> /api/v2/autoTests/search — только автотесты. Ручной каталог (секции, work items, шаги, атрибуты) переносится живым pull’ом из Интеграции с TestIT
testrail Готов --from-token <email:apikey> Basic auth; v6 + v7 envelopes
qase Готов --from-token <api-token> Заголовок Token <hex>
zephyr Готов --from-token <JWT> Zephyr Scale cloud (Bearer)
allure Stub — Используйте reverse exporter (Mockarty TCM → Allure-results); чтение с Allure-сервера не поддерживается

Общие флаги

Флаг Назначение
--from-url Базовый URL upstream API
--from-token Токен upstream
--from-project id project/workspace в upstream
--to-namespace Namespace Mockarty (default MOCKARTY_NAMESPACE)
--dry-run Только fetch — без записи в Mockarty
--concurrency Параллельные uploads (1..32, default 4)
--page-size Размер страницы upstream
--insecure Пропустить TLS verification (НЕ для прод)

Mockarty connection — обычные env vars (MOCKARTY_SERVER /
MOCKARTY_TOKEN).

Пример: TestIT

mockarty-cli migrate testit \
    --from-url     https://testit.example.com \
    --from-token   "$TMS_PRIVATE_TOKEN" \
    --from-project 0fff7e91-…-12d4 \
    --to-namespace team-a \
    --dry-run                    # уберите для реального импорта

Вывод:

[testit]    1  tit-1  Login flow
[testit]    2  tit-2  Checkout
...

--- migration report (testit) ---
  duration:  1.234s
  fetched:   357
  imported:  357
  skipped:   0
  failed:    0

При повторе все 357 уйдут в skipped.

Пример: TestRail

Basic auth. Передавайте сырое email:apikey — CLI закодирует в base64.

mockarty-cli migrate testrail \
    --from-url     https://my.testrail.io \
    --from-token   "qa@example.com:ABCDEF…" \
    --from-project 12 \
    --to-namespace team-b

Каноническая схема

Все источники конвертируются в один payload:

{
  "externalId":     "<source>-<id>",
  "source":         "testit|testrail|qase|zephyr|allure",
  "title":          "...",
  "description":    "...",
  "preconditions":  "...",
  "postconditions": "...",
  "priority":       "low|medium|high",
  "steps": [
    {"action": "...", "expectedResult": "...", "orderIndex": 1}
  ],
  "labels":   {"<source>:<key>:<value>": "<value>"},
  "metadata": {"<source>": {"…": "полный upstream row"}}
}

Полный upstream row сохраняется в metadata.<source> для будущей
delta-синхронизации.

Troubleshooting

401 на Ping. Проверьте формат токена. TestIT ждёт
PrivateToken <hex>, TestRail — <email>:<apikey>, QASE — сырой
токен, Zephyr — JWT (CLI принимает с/без Bearer префикса).

mockarty POST: status 409. В отчёте отобразится как Skipped
— кейс уже импортирован.

Миграция зависает. Запустите --dry-run чтобы проверить
connectivity + counts, потом увеличьте --concurrency.