Introduksjon til Hoverfly i Java
1. Oversikt
I denne artikkelen ser vi på Hoverfly Java-biblioteket - som gir en enkel måte å lage ekte API-stubber / simuleringer på.
2. Maven-avhengigheter
For å bruke Hoverfly, må vi legge til en enkelt Maven-avhengighet:
io.specto hoverfly-java 0.8.1
Den nyeste versjonen finner du her.
3. Simulering av et API
Først konfigurerer vi Hoverfly til å kjøre i simuleringsmodus. Den enkleste måten å definere en simulering på er å bruke en DSL.
La oss starte med et enkelt eksempel ved å sette i gang HoverflyRule forekomst:
offentlig statisk endelig HoverflyRule regel = HoverflyRule.inSimulationMode (dsl (service ("// www.baeldung.com") .get ("/ api / kurs / 1") .willReturn (suksess (). body (jsonWithSingleQuotes ("{') id ':' 1 ',' name ':' HCI '} "))));
De Simuleringskilde klasse gir en dsl metode for å starte API-definisjonen. Også, HoverflyDSL‘S service metoden lar oss definere et sluttpunkt og tilknyttede forespørselsbaner.
Så ringer vi vil returnere for å oppgi hvilket svar vi ønsker å få tilbake. Vi brukte også suksess Metode av ResponseBuilder for å stille svarstatus og kropp.
4. Bruke JUnit for testing
Stubbed API kan enkelt testes ved hjelp av JUnit.
La oss lage en enkel test som sender en HTTP-forespørsel og ser om den når endepunktet:
responseEntity courseResponse = restTemplate.getForEntity ("// www.baeldung.com/api/courses/1", String.class); assertEquals (HttpStatus.OK, courseResponse.getStatusCode ()); assertEquals ("{\" id \ ": \" 1 \ ", \" name \ ": \" HCI \ "}", courseResponse.getBody ());
Vi brukte Spring Web-moduler RestTemplate klasseinstans for å sende en HTTP-forespørsel.
5. Legge til forsinkelser
Forsinkelser kan legges til globalt, for en bestemt HTTP-metode eller for en spesifikk API-samtale.
Her er eksemplet på forsinkelse av kodeinnstilling på forespørsler med POST-metoden:
SimulationSource.dsl (service ("// www.baeldung.com") .post ("/ api / courses") .willReturn (success ()). AndDelay (3, TimeUnit.SECONDS) .forMethod ("POST"))
6. Be om matcher
HoverflyMatchers fabrikk klasse gir flere matchere inkludert nøyaktig treff og globMatch for nettadresser. For HTTP-kropp gir det.
For HTTP-organer gir den det JSON / XML eksakt samsvar og JSONPath / XPath fyrstikker.
Som standard er nøyaktig treff matcher brukes til både URL og body matching.
Her er eksempel på bruk av forskjellige matchere:
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 (suksess ()) .put ("/ api / student / 2") .body (matchesXPath ("/ student / name")) .willReturn (suksess ())); )
I dette eksemplet, fyrstikker metoden sjekker URL med globMatch som tillater jokertegnsøk.
Deretter begynner med sjekker om forespørselsstien starter med “/api/student“. Vi brukte noen matcher for å tillate alle mulige verdier i sideparameter.
De tilsvarer ToJson matcher sørger for at kroppsnyttelasten samsvarer med den eksakte JSON gitt her. De samsvarer med JsonPath metoden for å sjekke med et element på en bestemt JSON-bane eksisterer eller ikke.
På samme måte, tilsvarer ToXml samsvarer med XML som er gitt i forespørsel, med den som er gitt her. De matchesXPath matcher en kropp med et XPath-uttrykk.
7. Konklusjon
I denne raske opplæringen diskuterte vi bruken av Hoverfly Java-biblioteket. Vi så på å simulere HTTP-tjenester, DSL for å konfigurere endepunkter, legge til forsinkelser og bruk av forespørselsmatchere. Vi så også på å teste disse tjenestene ved hjelp av JUnit.
Som alltid kan kodebiter, som alltid, bli funnet på GitHub.