Бывали ли у вас ситуации, когда для тестирования нужен сервис, а он ещё не готов, нестабилен или доступ к нему ограничен? В такие моменты на помощь приходят стабы и моки. Один из самых удобных инструментов для этого — 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.
 - Идеален для изоляции микросервисов.

Комментарии (0)