Бывали ли у вас ситуации, когда для тестирования нужен сервис, а он ещё не готов, нестабилен или доступ к нему ограничен? В такие моменты на помощь приходят стабы и моки. Один из самых удобных инструментов для этого — WireMock. Он позволяет легко эмулировать работу backend-сервисов, подменяя реальные ответы на заранее подготовленные.
В этой статье я расскажу, как запустить wiremock-standalone.jar, и покажу, почему этот инструмент одинаково полезен как мануальным тестировщикам, так и автоматизаторам.
Содержание
Что такое WireMock и зачем он нужен
WireMock — это мощный инструмент для создания стабов и моков, который позволяет эмулировать HTTP API. Он особенно полезен в ситуациях, когда:
- Backend-сервис ещё не готов или находится в разработке. 
- Доступ к реальному API ограничен или платный. 
- Вам нужно протестировать различные сценарии (успех, ошибка, пустой ответ) без изменения данных на реальном сервере. 
Где взять WireMock
Вы можете скачать WireMock в виде JAR-файла, который сразу готов к запуску. Есть два основных варианта, и важно понимать разницу между ними.
1. WireMock Standalone (fat JAR)
 Это "толстая" версия, которая включает в себя все необходимые зависимости. Она идеально подходит для мануального тестирования и быстрых проверок, так как вам не нужно ничего настраивать. Просто скачайте файл и запустите его.
2. WireMock (обычный JAR)
 Это "тонкая" версия, которая используется как библиотека в проектах. Она не содержит зависимостей, поэтому её обычно подключают через менеджеры зависимостей, такие как Maven или Gradle. Этот вариант подходит для автоматизации и интеграции в тестовые фреймворки.
Полезные ссылки:
Запуск WireMock в "ручном" (standalone) режиме
Для запуска wiremock-standalone.jar вам потребуется только Java 11 или выше.
1. Проверка версии Java:
 Откройте терминал или командную строку и выполните команду:
java -version
Если Java не установлена, скачайте JDK с официального сайта Oracle или OpenJDK.
2. Запуск сервера:
 Скачайте файл wiremock-standalone-3.13.1.jar и запустите его с помощью команды:
java -jar wiremock-standalone-3.13.1.jar --port 8080
После запуска в консоли появятся сообщения о старте сервера. Теперь WireMock доступен по адресу http://localhost:8080.
Основные параметры запуска:
- --port <номер>: Указать порт (по умолчанию 8080).
- --verbose: Включить подробный лог работы.
- --root-dir <путь>: Указать папку, где будут храниться стабы и ответы.
- --record-mappings: Включить режим записи, чтобы WireMock сохранял все запросы и ответы в JSON-файлы.
Админ-интерфейс WireMock
WireMock работает как два сервиса одновременно:
 1.  Эмулятор API: Отдаёт ответы на запросы.
 2.  Админ-сервер: Позволяет управлять стабами в реальном времени.
Основные эндпоинты администратора:
- http://localhost:8080/__admin/mappings— показывает все загруженные стабы.
- http://localhost:8080/__admin/requests— список всех запросов, которые получил WireMock.
- http://localhost:8080/__admin/— корневой путь для админских команд (например, добавление или удаление стаба через POST/DELETE).
WireMock для мануального тестирования
Одно из самых полезных применений WireMock для QA — создание простых стабов вручную. Это позволяет тестировщикам проверять работу frontend или мобильного приложения без доступного backend.
Папки mappings и __files
WireMock хранит стабы в папке mappings. Каждый стаб — это отдельный JSON-файл, который описывает:
- URL, на который нужно реагировать. 
- HTTP-метод (GET, POST и т.д.). 
- Ответ, который возвращает сервер. 
Папка __files используется для хранения тел ответов, если они слишком большие и их удобнее вынести в отдельные файлы.
Пример простого GET-эндпоинта:
 Создадим файл mappings/get-hello.json:
{
  "request": {
    "method": "GET",
    "url": "/hello"
  },
  "response": {
    "status": 200,
    "body": "Привет от WireMock!",
    "headers": {
      "Content-Type": "text/plain"
    }
  }
}
После запуска WireMock запрос к http://localhost:8080/hello вернёт Привет от WireMock!.
WireMock для автоматизации
WireMock можно интегрировать прямо в автотесты на Java, чтобы создавать динамические стабы и использовать их в интеграционных или E2E тестах.
 Пример интеграции с JUnit 5:
import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
public class WireMockExampleTest {
    private static WireMockServer wireMockServer;
    @BeforeAll
    public static void setup() {
        wireMockServer = new WireMockServer(8080);
        wireMockServer.start();
        configureFor("localhost", 8080);
        stubFor(get(urlEqualTo("/hello"))
            .willReturn(aResponse()
                .withStatus(200)
                .withBody("Привет от WireMock!")));
    }
    @Test
    public void testHelloEndpoint() {
        // Здесь выполняем HTTP-запрос к WireMock и проверяем результат
    }
    @AfterAll
    public static void teardown() {
        wireMockServer.stop();
    }
}
Практические кейсы использования WireMock
WireMock полезен в реальных QA-сценариях. Вот несколько типичных кейсов:
  - Тестирование, когда сервис недоступен: Продолжайте тестирование, используя моки, пока backend-сервис ещё в разработке.
  - Проверка обработки ошибок: Эмулируйте различные HTTP-статусы (400, 500) и проверяйте, как приложение реагирует на них.
  - Изоляция микросервисов: Тестируйте один сервис, заменяя другие зависимости стабами. Это делает тесты более стабильными и быстрыми.
Заключение
WireMock — это универсальный инструмент для тестировщиков, который одинаково полезен как мануальным, так и автоматизированным QA. Он позволяет быстро создавать стабы, изолировать сервисы и тестировать приложения, когда реальный backend ещё не готов или недоступен.
Преимущества:
  - Быстро подставляет ответы вместо реального сервиса.
  - Работает как standalone (без сборки проекта).
  - Легко интегрируется в автотесты на Java, JUnit, TestNG.
  - Идеален для изоляции микросервисов.
 
          