---
type: system
title: Интеграционный тест-харнесс на testcontainers
domain: fintech
services: [quality-knowledge, backend-platform]
skills: [Интеграционное тестирование, Архитектура тестов, CI/CD, Надёжность]
technologies: [Go, testcontainers, testify, Kafka, PostgreSQL, gRPC, Redis]
problem: На платёжной платформе из 20+ сервисов покрытие было тонким и флаки — моки расходились с реальностью, тесты спали вместо поллинга, а дефекты доходили до прода незамеченными.
approach: Построил общий testcontainers-харнесс, поднимающий реальную инфру на прогон — PostgreSQL с реальными миграциями, Kafka по TLS + SASL, Redis, NATS плюс WireMock для API провайдеров — буутит каждый сервис in-process против неё и даёт переиспользуемый testkit (хелперы stub/seed/consume, builder-фикстуры). Заменил sleep на поллинг в стиле Eventually и добавил контрактные проверки статусов, публикуемых событий и side-effects в кошельке.
result: Довёл 15/15 сервисов платформы до ≥80% покрытия сценариев (HTTP-эндпоинты, Kafka-консьюмеры и gRPC-методы считаются раздельными путями) одним зелёным прогоном — ~126 тестов за ~96с в CI — и добавил интеграционное покрытие для всех 13 PSP-адаптеров. Набор стал «сеткой» для дефектов и регулярно ловил прод-баги до релиза.
evidence: Описано в истории работы (Korvax, 2022–настоящее время). Среди пойманных багов — 500 вместо 404 на отсутствующий кошелёк, JWT-мидлвар, пропускавший неаутентифицированные запросы, и потерянная прод-миграция, которой не было в main; разбор — в звонке.
public_links: []
available_for: приватный разбор
language: ru
canonical: https://asmanmalikov.com/ru/proof/integration-testing-harness/
---

# Интеграционный тест-харнесс на testcontainers

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