QA и тестирование
Что такое интеграционное тестирование?
Интеграционное тестирование (integration testing) проверяет, как несколько компонентов работают вместе: приложение и база данных, сервис и внешнее API, два микросервиса между собой. Каждая часть по отдельности может работать правильно, а на стыке всё равно возникнет ошибка.
Типичные ошибки этого уровня возникают именно на стыках: разные форматы данных, изменённый контракт API, неправильная обработка ошибок соседнего сервиса, проблемы с транзакциями.
В отличие от модульных тестов, интеграционные запускают с настоящими или максимально близкими к настоящим зависимостями, поэтому они медленнее и сложнее в настройке. Их обычно меньше, но именно они находят то, чего не видно внутри отдельного модуля.
Где применяется
Интеграционные тесты находят самые дорогие ошибки — те, что возникают на стыках. Приложение и база, сервис и платёжная система, два микросервиса, которые обмениваются сообщениями: каждая часть по отдельности работает, а вместе они не совпадают в формате данных или обработке ошибок.
В современных проектах такие тесты запускают с настоящими зависимостями в контейнерах: реальная база вместо заглушки, локальный брокер сообщений, эмулятор внешнего API. Это медленнее модульных тестов, поэтому их обычно выносят в отдельный этап конвейера CI.
Пример
Сервис заказов хранит сумму как целое число копеек, а сервис отчётов ждёт дробное значение в гривнах. Модульные тесты обоих сервисов проходят успешно, и расхождение видно только в интеграционном тесте, где сервисы обмениваются настоящим сообщением.
Частые вопросы
Чем интеграционное тестирование отличается от модульного?
Модульный тест проверяет одну функцию отдельно и заменяет все зависимости заглушками. Интеграционный проверяет несколько компонентов вместе, с настоящей базой или сервисом. Он медленнее и сложнее в настройке, но находит ошибки, которых модульные тесты не видят.
Нужна ли для таких тестов настоящая база данных?
Желательно та же, что и в рабочей среде, иначе часть отличий останется незамеченной. Сегодня стандартный подход — запускать базу в контейнере на время тестов. Это реалистично и не требует общего стенда, который делит вся команда.
Как тестировать интеграцию с внешним сервисом?
Чаще всего его заменяют управляемой заглушкой — сервером, который возвращает заранее заданные ответы, в том числе ошибки и задержки. Так проверяют и нормальную работу, и реакцию на сбой. Обращаться к настоящему стороннему сервису в тестах рискованно и нестабильно.
Сколько интеграционных тестов нужно?
Значительно меньше, чем модульных, потому что они дороже в поддержке и медленнее. Разумный подход — плотно покрыть логику модульными тестами, а интеграционными проверять ключевые связи и сценарии, где расхождение приведёт к реальным потерям.
Обучение тестированию в OWU
Освойте профессию QA-инженера на практических курсах с менторами и реальными проектами.
Выбрать курс