Введение в Hoverfly на Java

Введение в Hoverfly на Java

1. обзор

В этой статье мы рассмотрим библиотеку JavaHoverfly, которая обеспечивает простой способ создания реальных заглушек / симуляций API.

2. Maven Зависимости

Чтобы использовать Hoverfly, нам нужно добавить одну зависимость Maven:


    io.specto
    hoverfly-java
    0.8.1

Последнюю версию можно найтиhere.

3. Имитация API

Сначала мы настроим Hoverfly для работы в режиме симуляции. The simplest way to define a simulation is by using a DSL.с

Начнем с простого примера, создав экземплярHoverflyRule:

public static final HoverflyRule rule
  = HoverflyRule.inSimulationMode(dsl(
    service("http://www.example.com")
      .get("/api/courses/1")
      .willReturn(success().body(
        jsonWithSingleQuotes("{'id':'1','name':'HCI'}"))));

КлассSimulationSource предоставляет методdsl для инициирования определения API. Кроме того, методHoverflyDSL'sservice позволяет нам определять конечную точку и связанные пути запросов.

Затем мы вызываемwillReturn, чтобы указать, какой ответ мы хотим получить взамен. Мы также использовали методsuccess дляResponseBuilder, чтобы установить статус и тело ответа.

4. Использование JUnit для тестирования

Стабильный API может быть легко протестирован с помощью JUnit.

Давайте создадим простой тест, отправляющий HTTP-запрос, и посмотрим, достигает ли он конечной точки:

responseEntity courseResponse
  = restTemplate.getForEntity("http://www.example.com/api/courses/1", String.class);

assertEquals(HttpStatus.OK, courseResponse.getStatusCode());
assertEquals("{\"id\":\"1\",\"name\":\"HCI\"}", courseResponse.getBody());

Мы использовали экземпляр классаRestTemplate модуля Spring Web для отправки HTTP-запроса.

5. Добавление задержек

Задержки могут быть добавлены глобально, для определенного метода HTTP или для конкретного вызова API.

Вот пример задержки установки кода для запросов с методом POST:

SimulationSource.dsl(
  service("http://www.example.com")
    .post("/api/courses")
    .willReturn(success())
    .andDelay(3, TimeUnit.SECONDS)
    .forMethod("POST")
)

6. Запрос соответствия

Класс фабрикиHoverflyMatchers предоставляет несколько сопоставителей, включаяexactMatch иglobMatch для URL-адресов. Для тела HTTP это обеспечивает.

Для тел HTTP он обеспечивает точное совпадениеJSON/XML и совпадениеJSONPath/XPath.

По умолчанию сопоставлениеexactMatch используется как для сопоставления URL, так и для основного текста.

Вот пример использования разных совпадений:

SimulationSource.dsl(
  service(matches("www.*dung.com"))
    .get(startsWith("/api/student"))
    .queryParam("page", any())
    .willReturn(success())

    .post(equalsTo("/api/student"))
    .body(equalsToJson(jsonWithSingleQuotes("{'id':'1','name':'Joe'}")))
    .willReturn(success())

    .put("/api/student/1")
    .body(matchesJsonPath("$.name"))
    .willReturn(success())

    .post("/api/student")
    .body(equalsToXml("2John"))
    .willReturn(success())

    .put("/api/student/2")
    .body(matchesXPath("/student/name"))
    .willReturn(success()));
)

В этом примере методmatches проверяет URL-адрес с помощьюglobMatch, который разрешает поиск по шаблону.

ЗатемstartsWith проверяет, начинается ли путь запроса с «/api_ / student_». Мы использовали сопоставительany, чтобы разрешить все возможные значения в параметре запроса страницы.

СопоставительequalsToJson гарантирует, что полезная нагрузка тела соответствует точному JSON, указанному здесь. МетодmatchesJsonPath для проверки с элементом на определенном пути JSON существует или нет.

Точно так жеequalsToXml сопоставляет XML, указанный в теле запроса, с представленным здесь. matchesXPath соответствует телу с выражением XPath.

7. Заключение

В этом кратком руководстве мы обсудили использование библиотеки Java Hoverfly. Мы рассмотрели симуляцию HTTP-сервисов, DSL для настройки конечных точек, добавления задержек и использования сопоставителей запросов. Мы также изучили тестирование этих сервисов с использованием JUnit.

Как всегда, фрагменты кода, как всегда, можно найтиover on GitHub.