asman.malikov_ EN

Система · 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 против контейнеризованной инфры — вот что делает набор достаточно надёжным, чтобы блокировать релиз, и превращает его из рутины в самое дешёвое место для поиска прод-багов.

AI-читаемая запись (Markdown) · ← Назад к библиотеке