Перейти к содержимому

Результаты автотестов и 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:3000
export 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 (без входа).