Что такое сервисная виртуализация (Service Virtualization) в тестировании?

«Что такое сервисная виртуализация (Service Virtualization) в тестировании?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сервисная виртуализация (Service Virtualization) — это техника, при которой поведение зависимых компонентов системы (внешних API, баз данных, микросервисов) имитируется для целей тестирования. Она используется, когда реальные сервисы недоступны, дороги, нестабильны или их состояние сложно воспроизвести.

Ключевые преимущества:

  • Независимость от окружения: Тесты можно запускать без доступа к реальным внешним системам.
  • Эмуляция сложных сценариев: Легко моделировать редкие или ошибочные состояния (например, таймауты, коды ответов 500).
  • Ускорение выполнения тестов: Заглушки работают локально, что быстрее сетевых вызовов.
  • Параллельная разработка: Команды могут работать над модулями, зависящими от ещё не готовых сервисов.

Пример использования WireMock (Java):

import com.github.tomakehurst.wiremock.WireMockServer;
import static com.github.tomakehurst.wiremock.client.WireMock.*;

public class ServiceVirtualizationExample {
    public static void main(String[] args) {
        // Запуск виртуального сервера на порту 8080
        WireMockServer wireMockServer = new WireMockServer(8080);
        wireMockServer.start();

        // Настройка заглушки для конкретного эндпоинта
        stubFor(get(urlEqualTo("/api/user/1"))
                .willReturn(aResponse()
                        .withStatus(200)
                        .withHeader("Content-Type", "application/json")
                        .withBody("{"id": 1, "name": "John"}")));

        // Теперь код тестируемого приложения может отправлять запросы на http://localhost:8080/api/user/1
        // и получать предопределённый ответ.
    }
}

Популярные инструменты: WireMock, Mountebank, Hoverfly, MockServer.