Introduction à Hoverfly en Java

1. Vue d'ensemble

Dans cet article, nous allons jeter un œil à la bibliothèque Java Hoverfly - qui fournit un moyen facile de créer de vrais stubs / simulations d'API.

2. Dépendances de Maven

Pour utiliser Hoverfly, nous devons ajouter une seule dépendance Maven:

 io.specto hoverfly-java 0.8.1 

La dernière version peut être trouvée ici.

3. Simulation d'une API

Tout d'abord, nous allons configurer Hoverfly pour qu'il s'exécute en mode simulation. La manière la plus simple de définir une simulation consiste à utiliser un DSL.

Commençons par un exemple simple en instanciant l' instance 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'}"))));

La classe SimulationSource fournit une méthode dsl pour lancer la définition d'API. De plus, la méthode de service de HoverflyDSL nous permet de définir un point de terminaison et les chemins de requête associés.

Ensuite, nous appelons willReturn pour indiquer la réponse que nous voulons obtenir en retour. Nous avons également utilisé la méthode de succès de ResponseBuilder pour définir le statut et le corps de la réponse.

4. Utilisation de JUnit pour les tests

L'API stubbed peut être facilement testée à l'aide de JUnit.

Créons un test simple envoyant une requête HTTP et voyons s'il atteint le point de terminaison:

responseEntity courseResponse = restTemplate.getForEntity("//www.baeldung.com/api/courses/1", String.class); assertEquals(HttpStatus.OK, courseResponse.getStatusCode()); assertEquals("{\"id\":\"1\",\"name\":\"HCI\"}", courseResponse.getBody());

Nous avons utilisé l' instance de classe RestTemplate du module Spring Web pour envoyer une requête HTTP.

5. Ajout de délais

Des délais peuvent être ajoutés globalement, pour une méthode HTTP particulière ou pour un appel d'API spécifique.

Voici l'exemple de code de définition du délai sur les demandes avec la méthode POST:

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

6. Request Matcher

La classe d'usine HoverflyMatchers fournit plusieurs correspondants, y compris exactMatch et globMatch pour les URL. Pour le corps HTTP, il fournit.

Pour les corps HTTP, il fournit une correspondance exacte JSON / XML et des correspondances JSONPath / XPath .

Par défaut, le correcteur exactMatch est utilisé pour la correspondance d'URL et de corps.

Voici un exemple d'utilisation de différents matchers:

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())); )

Dans cet exemple, la méthode matches vérifie l'URL avec globMatch qui permet la recherche par caractères génériques.

Puis commence avec vérifie si le chemin de la requête commence par « / api / student ». Nous avons utilisé n'importe quel matcher pour autoriser toutes les valeurs possibles dans le paramètre de requête de page.

Le matcher equalsToJson s'assure que la charge utile du corps correspond au JSON exact donné ici. La méthode matchesJsonPath pour vérifier avec un élément à un chemin JSON particulier existe ou non.

De même, equalsToXml correspond au XML donné dans le corps de la requête avec celui donné ici. Le matchesXPath correspond à un corps avec une expression XPath.

7. Conclusion

Dans ce tutoriel rapide, nous avons discuté de l'utilisation de la bibliothèque Java Hoverfly. Nous avons examiné la simulation des services HTTP, DSL pour la configuration des points de terminaison, l'ajout de retards et l'utilisation de correspondants de demande. Nous avons également envisagé de tester ces services à l'aide de JUnit.

Comme toujours, des extraits de code, comme toujours, peuvent être trouvés sur GitHub.