Система · fintech
Интеграционный тест-харнесс на testcontainers
Качество + ЗнанияБэкенд / Платформа GotestcontainerstestifyKafkaPostgreSQLgRPCRedis
testcontainers: Postgres · Kafka (TLS+SASL) · Redis · NATS · WireMock сервис поднят in-process ──► реальный контракт, реальные миграции проверки: точный статус · событие · side-effects кошелька
Проблема
На платёжной платформе из 20+ сервисов покрытие было тонким и флаки — моки расходились с реальностью, тесты спали вместо поллинга, а дефекты доходили до прода незамеченными.
Подход
Построил общий testcontainers-харнесс, поднимающий реальную инфру на прогон — PostgreSQL с реальными миграциями, Kafka по TLS + SASL, Redis, NATS плюс WireMock для API провайдеров — буутит каждый сервис in-process против неё и даёт переиспользуемый testkit (хелперы stub/seed/consume, builder-фикстуры). Заменил sleep на поллинг в стиле Eventually и добавил контрактные проверки статусов, публикуемых событий и side-effects в кошельке.
Результат
Довёл 15/15 сервисов платформы до ≥80% покрытия сценариев (HTTP-эндпоинты, Kafka-консьюмеры и gRPC-методы считаются раздельными путями) одним зелёным прогоном — ~126 тестов за ~96с в CI — и добавил интеграционное покрытие для всех 13 PSP-адаптеров. Набор стал «сеткой» для дефектов и регулярно ловил прод-баги до релиза.
Доказательства
Описано в истории работы (Korvax, 2022–настоящее время). Среди пойманных багов — 500 вместо 404 на отсутствующий кошелёк, JWT-мидлвар, пропускавший неаутентифицированные запросы, и потерянная прод-миграция, которой не было в main; разбор — в звонке.
Доступно для: приватный разбор
Интеграционные тесты стоят своего времени только если гоняют реальный контракт: реальный Postgres, реальную Kafka с TLS и SASL, реальные миграции. Буут сервисов in-process против контейнеризованной инфры — вот что делает набор достаточно надёжным, чтобы блокировать релиз, и превращает его из рутины в самое дешёвое место для поиска прод-багов.