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.