
Как мы подружили динамические тесты JUnit 5 с Госуслугами
mkatsal 1 минуту назад Как мы подружили динамические тесты JUnit 5 с Госуслугами Сложный 12 мин 0 Блог компании РТЛабс Тестирование IT-систем * Java * Высоконагруженные системы * Алгоритмы * Кейс Привет, Хабр! На связи...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: mkatsal 1 минуту назад Как мы подружили динамические тесты JUnit 5 с Госуслугами Сложный 12 мин 0 Блог компании РТЛабс Тестирование IT-систем * Java * Высоконагруженные системы * Алгоритмы * Кейс Привет, Хабр! На связи Максим Кацал, руководитель направления автоматизированного тестирования в РТЛабс. Мы с командой на Госуслугах тестируем огромное количество услуг.
В каждой из них — тысячи, миллионы сценариев. Писать автотесты руками — безумие, а поддерживать их очень больно. В статье расскажу, как мы научились генерировать тесты прямо из JSON-схемы услуги.
Технические детали
JUnit 5 + @TestFactory + рекурсивный обход графа маршрутов. Фреймворк, который сам прокладывает путь пользователя по приложению-конструктору, а потом проигрывает его в браузере. Ниже раскрою архитектуру, код, подводные камни, опишу плюсы и минусы такого подхода.
Почему пришлось это придуматьБольше 6 лет назад Госуслуги отказались от одностраничных услуг. Вместо этого появился конструктор форм — бэк + фронт. Он рисует услугу на лету по JSON-схеме.
В JSON описано всё:структура экранов,набор компонентов — поля, кнопки, чекбоксы,логика переходов между экранами. Разработчики массово переводили услуги на новый формат. А команда автотестирования получила головную боль: нужно проверять и сам конструктор, и логику каждой услуги.
Отраслевые последствия
Первая попытка: стандартный подход и почему мы от него отказалисьНа старте выбрали классику: Java + Selenide + PageObject. Тест выглядел так:@Test @DisplayName("По достижению 20 или 45 лет. По месту фактического проживания.
void test() { passportRFPage. selectAtThePlaceOfActualResidence() . submitListOfDocumentsForApplication() .
submitValidatePassportData() . submitValidatePhoneNumber() . submitValidateEmail() .
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





