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