Автотесты · утилита
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, --build | prod|stage|test|dev|local; web|ios|android|desktop|api; сборка до 64 символов |
| --ci-run-id, --attempt | ключ идемпотентности; по умолчанию — из переменных CI |
| --no-ci | не читать переменные CI — без ключа |
| --strict | код 3, если часть тестов не легла в прогон |
| --json | stdout — только ответ сервера; ход отправки — в 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 Actions | GITHUB_RUN_ID + GITHUB_RUN_ATTEMPT |
| GitLab CI, GitFlic | CI_PIPELINE_ID |
| Jenkins | BUILD_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 · внедрение силами команды Эм Си Арт