Результаты автотестов и CLI для CI
-
Импорт результатов автотестов в формате JUnit XML (JUnit, TestNG, pytest, Jest, Playwright, Go…) — из интерфейса или из CI. Тест сопоставляется с кейсом по ключу автотеста (
classname.name) или по ключу кейса в имени теста (test_refund [SHOP-12]). Параметризованные тесты одного кейса сводятся в один результат (любой провал проваливает кейс). Для тестов без пары можно автоматически создавать кейсы. -
API-токены проекта (Настройки): хранятся только хеши, токен действует лишь на маршруты своего проекта.
CLI — npm-пакет tsmc-cli: один файл без зависимостей, нужен только Node 20+. Репозиторий TSMC не нужен:
export TSMC_URL=http://tsmc.example:3000export TSMC_TOKEN=tsmc_… # Проект → Настройки → API-токены (обязателен для всех команд CLI)npx tsmc-cli junit upload build/test-results/*.xml -p SHOP -r "Nightly $BUILD" -b "$BUILD"В репозитории TSMC та же команда — pnpm tsmc … (из исходников), в Docker-образе — tsmc …. Перед каждой
командой CLI спрашивает у сервера версию API (/api/health): со слишком старым сервером не работает, о более
новом предупреждает и предлагает обновиться; tsmc-cli --version показывает обе. Сборка пакета —
pnpm build вместе с веб-интерфейсом или отдельно pnpm --filter @tsmc/cli build (в packages/cli/dist); в CI пакет ставится из архива в чистом контейнере
Node 20 и загружает отчёт. Публикация в npm — тегом cli-v<версия> (версия из packages/cli/package.json),
нужен секрет репозитория NPM_TOKEN.
Флаги: --run-id N (дописать в открытый прогон), --create-missing, --suite NAME, --close,
--fail-on-failed (код выхода 2 при проваленных кейсах). Несколько файлов попадают в один прогон.
Файлы, на которые отчёт ссылается как [[ATTACHMENT|путь]] в выводе теста (так делают Playwright и
плагин JUnit Attachments для Jenkins), загружаются вложениями к результату кейса: путь ищется от папки
отчёта, затем от текущей. --no-attachments — не загружать.
Полная справка: npx tsmc-cli --help.
- REST API:
/api/projects,/api/projects/:project/suites,/api/projects/:project/cases,/api/cases/:id,/api/cases/by-key/SHOP-12,/api/cases/:id/versions,/api/cases/:id/results,/api/projects/:project/runs(+/preview),/api/runs/:id(+/close,/reopen,/archive,/unarchive,/pin,/unpin,/rerun,/cases),/api/projects/:project/milestones,/api/milestones/:id,/api/milestones/:id/report,/api/run-cases/:id(+/refresh,/history),/api/projects/:project/imports/junit,/api/projects/:project/tokens,/api/tokens/:id,/api/projects/:project/export,/api/projects/:project/sync,/api/projects/:project/attachments?caseId=|runCaseId=&name=(тело — сам файл),/api/attachments/:id,/api/cases/:id/attachments,/api/projects/:project/runs/:id/close,/api/projects/:project/integration(+/check),/api/cases/:id/issues,/api/run-cases/:id/issues(+/create),/api/run-cases/:id/issue-draft,/api/issue-links/:id(+/refresh),/api/runs/:id/issues/refresh,/api/projects/:project/dashboard?days=,/api/runs/:id/report,/api/runs/:id/shares,/api/report-shares/:id,/api/shared/reports/:token(без входа).