Автотесты, CI и мониторинг

Playwright — сценарии в браузере, результат в покрытии

Playwright пишет отчёт, QA Деск делает из него прогон: ключ кейса связывает автотест с ручной проверкой, повтор задания не плодит дубли, а упавший сценарий превращается в дефект.

Почему Playwright

Браузерный автотест не зависит от того, на чём написан бэкенд. Портал на Битрикс24, конфигурация 1С в веб-клиенте, Laravel-админка, SPA на React — для Playwright это одинаковые страницы. Поэтому в разнородном портфеле проектов он окупается быстрее прочего: одна технология автотестов на все продукты сразу.

QA Деск тесты не запускает. Он принимает результат и делает из него то, чего у отчёта в CI нет: историю, покрытие вместе с ручными кейсами и дефект с контекстом.

Настройка репортёра

Playwright умеет писать JUnit XML из коробки:

// playwright.config.ts
export default defineConfig({
  reporter: [
    ['list'],
    ['junit', { outputFile: 'reports/junit.xml' }],
  ],
});

Если в команде принят Allure, подойдёт allure-playwright — приём поддерживает оба формата, выбирать по удобству, а не по нашим требованиям.

Ключ кейса

Результат ложится в строку покрытия только через ключ кейса вида QAD-C17. Проще всего держать его в имени теста:

test('QAD-C17 вход с верным паролем', async ({ page }) => {
  await page.goto('/login');
  // …
});

Приоритет источников для JUnit: property с именем qadesk.case, затем имя теста, затем classname. Для Allure — label qadesk_case, затем fullName, затем name. Регистр не важен: qad-c17 в имени будет распознан. Ключ дефекта (QAD-17) с ключом кейса (QAD-C17) не пересекается — буква C их разводит.

Тесты без ключа не записываются и возвращаются поимённо с причиной. Это осознанно: тихо принять 162 результата и записать восемь — самый неприятный вид зелёного.

Выгрузка из пайплайна

report:
  stage: test
  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 e2e" --env stage --platform web ./reports

QADESK_TOKEN — токен приёма проекта (qdit_…), только из переменных окружения: флагом утилита его не принимает, чтобы он не попал в лог CI.

Код выхода утилиты честный и отвечает за доставку, а не за тесты: 0 — отчёт принят, 1 — не дошёл, 2 — ошибка данных, 3 — только с --strict, если часть тестов не легла в прогон. Гейт «релизить или нет» остаётся за вашим пайплайном.

Шарды, ретраи и повторы

Playwright часто гоняют шардами и с ретраями. Три правила, которые стоит знать заранее:

  • приём идемпотентен по паре «прогон CI + попытка»: перезапуск задания не создаёт второй прогон;
  • разные шарды одного пайплайна — это разное содержимое под одним ключом, поэтому задайте каждому свой --attempt или свой --ci-run-id; одинаковый ключ с другим отчётом получит отказ, а не тихую перезапись;
  • если один кейс встретился дважды (ретрай прошёл со второго раза), в прогон попадает худший исход. Иначе ретраи красили бы прогон зелёным.

Что дальше в деске

Из упавшего результата заводится дефект: окружение, платформа и сборка — поля, к дефекту прикладывается ссылка на прогон. Дальше он идёт по воркфлоу из восьми статусов с проверкой переходов на сервере, а разработке задача ставится в Битрикс24 или SourceCraft — там, где команда уже живёт.

Чего в продукте нет

  • нет запуска тестов и своих раннеров — QA Деск не заменяет CI;
  • нет хранения трейсов и видео Playwright: они остаются артефактами сборки, в дефект прикладывается то, что приложил человек;
  • нет генерации автотестов из кейсов.

С чего начать

  1. Включите репортёр junit рядом с тем, что уже настроено.
  2. Проставьте ключи кейсов у пяти-десяти самых важных сценариев.
  3. Добавьте шаг выгрузки с when: always — см. GitLab CI или SourceCraft CI.
  4. Посмотрите список несматченных в выводе первого запуска: он честно покажет, где разметка ещё не проставлена.

Попробуйте на своём проекте

Заведите проект, загрузите первый отчёт или заведите первый дефект — бесплатный тариф без карты. Нужно демо на ваших сценариях — напишите на hello@qadesk.ru.

Создать проект