Писал ли SWAP-сервисы с нуля

«Писал ли SWAP-сервисы с нуля» — вопрос из категории Other, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, в контексте тестирования я разрабатывал мок-сервисы (или "swap"-сервисы) с нуля для изоляции тестируемой системы и эмуляции поведения внешних или еще не готовых зависимостей. Это ключевая практика для тестирования интеграций и сложных сценариев.

Основные инструменты и подходы, которые я использовал:

  1. WireMock (Java): Мощный фреймворк для стабирования HTTP-сервисов. Я создавал отдельные тестовые классы или конфигурационные файлы, которые запускали мок-сервер с заданными ответами.

    import static com.github.tomakehurst.wiremock.client.WireMock.*;
    
    public class PaymentServiceMock {
        public void setupStubForSuccess() {
            // Настройка мока для успешного ответа платежного шлюза
            stubFor(post(urlPathEqualTo("/api/v1/pay"))
                    .willReturn(aResponse()
                            .withStatus(200)
                            .withHeader("Content-Type", "application/json")
                            .withBody("{ "transactionId": "txn_12345", "status": "SUCCESS" }")));
        }
    
        public void setupStubForFailure() {
            // Настройка мока для ответа об ошибке
            stubFor(post(urlPathEqualTo("/api/v1/pay"))
                    .willReturn(aResponse()
                            .withStatus(402)
                            .withBody("{ "error": "Insufficient funds" }")));
        }
    }
  2. MockServer: Альтернатива WireMock с похожим функционалом, также использовал для эмуляции REST и SOAP API.

  3. Подход "Service Virtualization": Для более сложных случаев (например, эмуляция протоколов, отличных от HTTP) использовал специализированные инструменты вроде Hoverfly или Mountebank.

Цель: Создание предсказуемого и контролируемого тестового окружения, которое позволяет проверять, как основное приложение реагирует на различные ответы зависимостей (успех, ошибки, таймауты, некорректные данные).