qadesk.ru / Автотесты из CI / qadesk-cli

Автотесты · утилита

qadesk-cli — отчёты автотестов в QA Деск из CI

Один статический бинарник без зависимостей. Находит отчёты JUnit XML или Allure в каталоге, отправляет их в QA Деск и печатает ссылку на прогон последней строкой. Код выхода честный: падение тестов на него не влияет — это дело CI-гейта, утилита отвечает за то, что отчёт дошёл.

Скачать

Версия — qadesk-cli version; текущая указана в /cli/VERSION. Исходники — модуль tools/qadesk-cli в репозитории QA Деск (Go 1.23).

curl -fsSL https://qadesk.ru/cli/qadesk-cli-linux-amd64 -o /usr/local/bin/qadesk-cli
chmod +x /usr/local/bin/qadesk-cli
qadesk-cli version

Токен

QADESK_TOKEN — токен приёма проекта (qdit_…): кабинет → Настройки → Интеграции → CI / автотесты, при выбранном проекте. Показывается один раз, называйте по пайплайну. Только из окружения: флагом не принимается, чтобы не светиться в логе CI. Личные токены qdpt_ и JWT не подходят — утилита скажет об этом до отправки.

Использование

qadesk-cli upload [флаги] <путь>...

Путь — файл или каталог (рекурсивно). Формат по умолчанию auto: есть *-result.json — Allure, иначе JUnit по *.xml. Несколько XML-файлов (Surefire, pytest-xdist) склеиваются в один отчёт.

--format junit|allure|autoформат отчёта
--run "имя"имя прогона; по умолчанию — из CI (bitrix-qa regress #12) или имя каталога и время
--env, --platform, --buildprod|stage|test|dev|local; web|ios|android|desktop|api; сборка до 64 символов
--ci-run-id, --attemptключ идемпотентности; по умолчанию — из переменных CI
--no-ciне читать переменные CI — без ключа
--strictкод 3, если часть тестов не легла в прогон
--jsonstdout — только ответ сервера; ход отправки — в stderr
--urlадрес API (иначе QADESK_URL, иначе https://api.qadesk.ru) — для Коробки
--timeout 2m, --retries 3таймаут попытки; повторы при сети и 502/503/504
--quietтолько ошибки и ссылка

Коды выхода: 0 — принят (или уже был принят раньше — утилита скажет об этом вслух); 1 — не дошёл (сеть, 5xx после повторов); 2 — ошибка данных (нет токена или файлов, битый XML, 401/409/422/413); 3 — только с --strict, есть несматченные тесты.

Несматченные тесты не записываются и всегда печатаются поимённо: результат ложится в прогон только через ключ кейса (QAD-C17) в имени теста, property qadesk.case (JUnit) или label qadesk_case (Allure). Ответ 200 без тела контракта (так отвечает SPA-фолбэк на неверный адрес) утилита считает ошибкой, а не успехом.

Идемпотентность

Повтор загрузки — сеть моргнула, задание перезапустили — не создаёт второй прогон, если передан ключ «прогон CI + попытка». Утилита берёт его из окружения:

GitHub ActionsGITHUB_RUN_ID + GITHUB_RUN_ATTEMPT
GitLab CI, GitFlicCI_PIPELINE_ID
JenkinsBUILD_TAG
TeamCityконфигурация + BUILD_NUMBER
прочиеQADESK_CI_RUN_ID + QADESK_CI_ATTEMPT

Там, где CI ключа не даёт, утилита его не выдумывает — ключ из даты молча выключил бы защиту от дублей. Тот же ключ с другим отчётом (шард матрицы, перезапуск тестов) — отказ 409: передайте свой --attempt или свой --ci-run-id на шард.

Примеры

GitLab CI / GitFlic (QADESK_TOKEN — в CI/CD Variables, masked):

report:
  stage: report
  when: always
  script:
    - curl -fsSL https://qadesk.ru/cli/qadesk-cli-linux-amd64 -o qadesk-cli && chmod +x qadesk-cli
    - ./qadesk-cli upload --run "$CI_PROJECT_NAME regress" --env stage ./reports

GitHub Actions:

- name: Отчёт в QA Деск
  if: always()
  env:
    QADESK_TOKEN: ${{ secrets.QADESK_TOKEN }}
  run: |
    curl -fsSL https://qadesk.ru/cli/qadesk-cli-linux-amd64 -o qadesk-cli && chmod +x qadesk-cli
    ./qadesk-cli upload --format allure ./allure-results

Локально: QADESK_TOKEN=qdit_… qadesk-cli upload --no-ci ./allure-results. Без утилиты тот же приём работает одним curl — см. Автотесты из CI.

Попробуйте QA Деск на своих процессах

Зарегистрируйтесь и заведите первый проект за пару минут — или поставьте приложение на портал Битрикс24 и получите пространство с сотрудниками и группами сразу. Нужно живое демо на сценариях вашей команды — напишите нам.

Попробовать

Демо-проект с кейсами и дефектами · перенос кейсов из TestIT и CSV · внедрение силами команды Эм Си Арт