Платформы

Symfony — регресс, который видно целиком

Отчёты PHPUnit, Behat и Panther приезжают в один прогон, сценарии на Gherkin ложатся рядом с ручными кейсами, а дефект несёт окружение, сборку и ссылку на упавший шаг.

Что обычно болит

Symfony-проекты часто живут дольше своих команд: несколько бандлов, унаследованные интеграции, миграции, которые никто не рискует трогать. Тесты в таком проекте обычно есть — и функциональные на PHPUnit, и сценарии на Behat, — но результат каждого прогона остаётся внутри CI. Через полгода никто не скажет, какие бизнес-сценарии реально покрыты, а какие проверяются «на глаз» перед релизом.

Отдельная боль — приёмка. Заказчик хочет видеть, что проверено по функциональности, а не список из 900 зелёных юнитов.

Что даёт QA Деск

Сценарий на Gherkin и ручной кейс — в одной таблице. Behat умеет писать JUnit XML; отчёт превращается в прогон, где сценарий занимает ту же строку, что и ручная проверка с тем же ключом кейса.

Тест-план на релиз. Набор кейсов на приёмку собирается планом, прогон показывает статус каждой проверки, время и исполнителя. Это то, что можно показать заказчику, не пересказывая CI.

Дефект с контекстом. Окружение, платформа и сборка — поля, а не текст: видно, что упало именно на стейдже после свежей миграции.

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

Рецепт: отчёты в прогон

# функциональные тесты
php bin/phpunit --log-junit reports/junit.xml

# сценарии Behat в том же каталоге
vendor/bin/behat --format junit --out reports

Оба отчёта лежат в одном каталоге — утилита склеит несколько XML-файлов в один прогон:

QADESK_TOKEN=qdit_… qadesk-cli upload --run "release regress" --env stage ./reports

Браузерные проверки на Panther пишут тот же PHPUnit-отчёт, поэтому отдельная настройка им не нужна. Если удобнее Playwright — приём от этого не меняется.

Ключ кейса в сценарии Behat

Ключ ставится прямо в заголовке сценария — так он попадёт в имя теста в отчёте:

Сценарий: QAD-C24 оформление подписки с истёкшей картой
  Дано пользователь с истёкшей картой
  Когда он продлевает подписку
  Тогда он видит сообщение об отказе банка

Приоритет источников ключа: property qadesk.case, имя теста, класс. Несматченные результаты не записываются и печатаются поимённо — молчаливая потеря половины отчёта была бы хуже, чем честный список.

Что взять готовым

Тест-кейсы регистрации и авторизации — то место, где в Symfony-проектах с самописной security-конфигурацией регулярно находится лишнее: не инвалидируется сессия, не ограничиваются попытки, восстановление пароля работает по старой ссылке.

Приёмка, которую можно показать

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

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

  • готового бандла или рецепта Flex нет — приём работает по HTTP, утилите не нужен PHP;
  • QA Деск не читает ваш phpunit.xml.dist и не знает про группы тестов — связь между тестом и кейсом одна: ключ;
  • нет двусторонней синхронизации с Jira и Яндекс Трекером: они в дорожной карте, сегодня есть встроенный трекер, Битрикс24 и SourceCraft.

С чего начать

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

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

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

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