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

1. Общ преглед

В тази статия ще разгледаме библиотеката на Hoverfly Java - която осигурява лесен начин за създаване на истински API заглъхвания / симулации.

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

За да използваме Hoverfly, трябва да добавим една зависимост на Maven:

 io.specto hoverfly-java 0.8.1 

Най-новата версия можете да намерите тук.

3. Симулиране на API

Първо ще конфигурираме Hoverfly да работи в режим на симулация. Най-простият начин за дефиниране на симулация е чрез използване на DSL.

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

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

Класът SimulationSource осигурява dsl метод за иницииране на дефиницията на API. Също така, методът на услугата HoverflyDSL ни позволява да дефинираме крайна точка и свързани пътища на заявки.

След това извикваме willReturn, за да посочим кой отговор искаме да получим в замяна. Също така използвахме метода за успех на ResponseBuilder, за да зададем състоянието и тялото на отговора.

4. Използване на JUnit за тестване

Stubbed API може лесно да бъде тестван с помощта на JUnit.

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

responseEntity courseResponse = restTemplate.getForEntity("//www.baeldung.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("//www.baeldung.com") .post("/api/courses") .willReturn(success()) .andDelay(3, TimeUnit.SECONDS) .forMethod("POST") )

6. Заявка за съвпадение

Фабричният клас на HoverflyMatchers предлага няколко съвпадения, включително точноMatch и globMatch за URL адреси. За HTTP тяло, което предоставя.

За HTTP тела осигурява JSON / XML точно съвпадение и JSONPath / XPath съвпадения.

По подразбиране matchMatchMatch се използва както за 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())); )

В този пример, методът за съвпадение на метода проверява URL с globMatch, който позволява търсене на заместващи символи.

След това startWith проверява дали пътят на заявката започва с „ / api / student “. Използвахме всяко съвпадение, за да разрешим всички възможни стойности в параметъра за заявка за страница.

В equalsToJson съгласувателя гарантира, че полезният товар на тялото съответства точно на JSON даден тук. Методът matchJsonPath за проверка с елемент в определен JSON Path съществува или не.

По същия начин equalsToXml съвпада с XML, даден в тялото на заявката, с този, даден тук. В matchesXPath съвпада с тяло с израз на XPath.

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

В този бърз урок обсъдихме използването на библиотеката на Java Hoverfly. Разгледахме симулиране на HTTP услуги, DSL за конфигуриране на крайни точки, добавяне на закъснения и използване на съвпадения на заявките. Също така разгледахме тестването на тези услуги с помощта на JUnit.

Както винаги, кодови фрагменти, както винаги, могат да бъдат намерени в GitHub.