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