Bevezetés a Java Hoverfly-ba

1. Áttekintés

Ebben a cikkben megnézzük a Hoverfly Java könyvtárat - amely egyszerű módszert kínál a valódi API-csonkok / szimulációk létrehozására.

2. Maven-függőségek

A Hoverfly használatához egyetlen Maven-függőséget kell hozzáadnunk:

 io.specto hoverfly-java 0.8.1 

A legújabb verzió itt található.

3. API modellezése

Először konfiguráljuk a Hoverfly-t szimulációs módban történő futtatásra. A szimuláció legegyszerűbb módja a DSL használata.

Kezdjük egy egyszerű példával a HoverflyRule példa:

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

A SimulationSource osztály biztosítja a dsl módszer az API definíció kezdeményezésére. Is, HoverflyDSL’S szolgáltatás A módszer lehetővé teszi számunkra, hogy meghatározzunk egy végpontot és a hozzá tartozó kérési útvonalakat.

Akkor hívunk vissza fog térni hogy melyik választ szeretnénk kapni cserébe. Mi is használtuk siker a metódusa ResponseBuilder a válaszállapot és a test beállításához.

4. Használata JUnit teszteléshez

A Stubbed API könnyen tesztelhető a JUnit használatával.

Hozzunk létre egy egyszerű tesztet, amely HTTP-kérést küld, és nézzük meg, hogy eléri-e a végpontot:

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

A Spring Web modulokat használtuk RestTemplate osztálypéldány HTTP-kérés küldéséhez.

5. Késések hozzáadása

A késések globálisan hozzáadhatók egy adott HTTP-módszerhez vagy egy adott API-híváshoz.

Itt van a példa a kód beállításának késleltetésére a POST módszerrel rendelkező kéréseknél:

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

6. Kérjen egyezőt

HoverflyMatchers gyári osztályban több gyufát is kínál pontosMeccs és globMatch URL-ekhez. A HTTP törzs számára biztosítja.

A HTTP-testek számára biztosítja JSON / XML pontos egyezés és JSONPath / XPath mérkőzések.

Alapértelmezés szerint a pontosMeccs az egyező az URL és a test egyezéséhez egyaránt használható.

Itt van a példa a különböző mérkőzések használatára:

SimulationSource.dsl (service (match ("www. * Dung.com")) .get (startsWith ("/ api / student")) .queryParam ("page", any ()) .willReturn (siker ()). post (equalsTo ("/ api / student")) .body (equalsToJson (jsonWithSingleQuotes ("{'id': '1', 'név': 'Joe'}") "))) .willReturn (siker ()) .put ("/ api / student / 1") .body (mérkőzésekJsonPath ("$. név")) .willReturn (siker ()) .post ("/ api / hallgató") .body (equalsToXml ("2John")). willReturn (siker ()) .put ("/ api / hallgató / 2") .body (mérkőzésekXPath ("/ tanuló / név")) .willReturn (siker ())); )

Ebben a példában mérkőzések metódus ellenőrzi az URL-t a globMatch amely lehetővé teszi a helyettesítő karakterek keresését.

Azután kezdődikVel ellenőrzi, hogy a kérelem elérési útja „/api/diák“. Használtuk Bármi matcher lehetővé teszi az összes lehetséges értéket az oldal lekérdezési paraméterében.

A equalsToJson a matcher biztosítja, hogy a test hasznos terhelése megegyezzen az itt megadott JSON-nal. A mérkőzésekJsonPath létezik vagy nem létezik egy adott JSON útvonal elemével történő ellenőrzés módja.

Hasonlóképpen, equalsToXml megfelel a kérelem törzsében megadott XML-nek az itt megadottal. A mérkőzésekXPath testet illeszt egy XPath kifejezéssel.

7. Következtetés

Ebben a gyors bemutatóban megvitattuk a Hoverfly Java könyvtár használatát. Megvizsgáltuk a HTTP-szolgáltatások, a DSL szimulációját a végpontok konfigurálásához, késedelmek hozzáadásához és a kérelem-egyeztetők használatához. Megvizsgáltuk ezen szolgáltatások tesztelését a JUnit segítségével.

Mint mindig, a kódrészletek, mint mindig, a GitHubon találhatók.


$config[zx-auto] not found$config[zx-overlay] not found