Как организовать тестирование при недоступности зависимого сервиса
Краткий ответ
Для тестирования при отсутствии сервиса используют заглушки (stubs) и моки (mocks), позволяющие имитировать поведение сервисов. Также применяют инструменты для моделирования отказов, например Chaos Monkey, чтобы проверить устойчивость системы.
Развёрнуто
Краткий ответ
При недоступности одного из сервисов применяют заглушки (stubs) и моки (mocks), чтобы имитировать его поведение и проверить взаимодействие. Для оценки отказоустойчивости системы используют инструменты, такие как Chaos Monkey, которые создают искусственные сбои.
Как это работает
Когда сервис, от которого зависит тестируемая система, становится недоступен, прямое тестирование взаимодействия с ним невозможно. Чтобы не блокировать тестирование, применяют:
- Заглушки (stubs) — упрощённые реализации сервиса, возвращающие предопределённые ответы.
- Моки (mocks) — объекты, которые не только возвращают данные, но и проверяют, что вызовы к ним были сделаны корректно.
Кроме того, для проверки устойчивости к отказам применяют инструменты, которые симулируют сбои в реальном окружении, например:
| Инструмент | Назначение | Особенности |
|---|---|---|
| Chaos Monkey | Имитация случайных сбоев | Помогает выявить слабые места в отказоустойчивости |
| WireMock | Создание HTTP-заглушек | Поддерживает сложные сценарии ответов |
Это позволяет тестировать систему на предмет правильной обработки ошибок и восстановления после сбоев.
Пример
# Использование WireMock для создания заглушки сервиса
1. Запускаем WireMock на локальном сервере.
2. Настраиваем stub, который возвращает ожидаемый ответ на запросы.
3. Тестируем основной сервис, направляя его запросы на WireMock вместо реального сервиса.
Таким образом, тестирование продолжается несмотря на недоступность реального сервиса.
Что важно знать на собеседовании
- Различие между заглушками (stubs) и моками (mocks).
- Как использовать инструменты для создания заглушек и моков (например, WireMock).
- Роль симуляторов сбоев (Chaos Monkey) в проверке отказоустойчивости.
- Важность тестирования взаимодействия системы с внешними сервисами при их недоступности.
- Практические методы реализации интеграционного тестирования с недоступными компонентами.
Тема: Архитектура систем | Уровень: senior