Bevezetés a MockServer-be

1. Áttekintés

A MockServer egy eszköz a külső HTTP API-k gúnyolására / elcsépelésére.

2. Maven-függőségek

Használni MockServer alkalmazásunkban két függőséget kell hozzáadnunk:

 org.mock-server mockserver-netty 3.10.8 org.mock-server mockserver-client-java 3.10.8 

A függőségek legújabb verziója mockserver-netty és mockserver-client néven érhető el.

3. MockServer Funkcionalitás

Egyszerűen fogalmazva:

  • rögzített válaszok generálása és visszaküldése
  • kérést továbbítson egy másik szerverre
  • visszahívások végrehajtása
  • kérelem igazolása

4. Hogyan kell futni MockServer

Néhány szerveren elindíthatjuk a szervert - vizsgáljuk meg néhány módszerünket.

4.1. Indítás a Maven beépülő modulon keresztül

Ez elindítja a szervert a folyamat-teszt-osztály fázis és állj meg igazolja fázis:

 org.mock-server mockserver-maven-plugin 3.10.8 1080 1090 DEBUG org.mockserver.maven.ExampleInitializationClass folyamat-teszt-osztályok folyamat-teszt-osztályok megkezdi az ellenőrzést 

4.2. Indítás Java API-n keresztül

Használhatjuk a startClientAndServer () Java API a szerver indításához. Általában az összes teszt futtatása előtt indítanánk egy szervert:

nyilvános osztály TestMockServer {private ClientAndServer mockServer; @BeforeClass public void startServer () {mockServer = startClientAndServer (1080); } @AfterClass public void stopServer () {mockServer.stop (); } // ...}

5. Mock kliensek

MockServerClient Az API-t arra használják, hogy képes legyen csatlakozni a MockServer. Modellezi a kéréseket és a megfelelő válaszokat a szervertől.

Több műveletet támogat:

5.1. Várakozások létrehozása álválaszokkal

Az elvárások egy olyan mechanizmus, amellyel kigúnyoljuk az ügyfél kérését és az ebből adódó választ a MockServer-től.

Egy elvárás létrehozásához meg kell határoznunk egy kérés egyezőt és egy választ, amelyet vissza kell adni.

A kéréseket az alábbiak segítségével lehet kielégíteni:

  • elérési út - URL elérési út
  • lekérdezési karakterlánc - URL-paraméterek
  • fejlécek - fejlécek kérése
  • sütik - kliens oldali sütik
  • törzs - POST kérés törzs XPATH, JSON, JSON sémával, reguláris kifejezés, pontos egyezésű egyszerű szöveg vagy törzsparaméterek

Az összes fenti paraméter megadható egyszerű szöveg vagy reguláris kifejezések segítségével.

És egy válaszintézkedés a következőket tartalmazza:

  • állapotkódok - érvényes HTTP állapotkódok pl. 200, 400 stb.
  • test - ez bármilyen tartalmat tartalmazó bájtsorozat
  • fejlécek - válaszfejlécek névvel és egy vagy több értékkel
  • cookie - válasz cookie névvel és egy vagy több értékkel

Lássuk, hogyan tudunk várakozást teremtsen:

public class TestMockServer {private void createExpectationForInvalidAuth () {new MockServerClient ("127.0.0.1", 1080) .when (request () .WithMethod ("POST") .withPath ("/ validate") .withHeader ("\" Content- írja be a \ ", \" application / json \ "") .withBody elemet (pontos ("{{felhasználónév: 'foo', jelszó: 'bar'}")), pontosan (1)) .respond (response () .withStatusCode ( 401) .withHeaders (új Fejléc ("Tartalom-típus", "alkalmazás / json; charset = utf-8"), új Fejléc ("Gyorsítótár-vezérlés", "nyilvános, max-kor = 86400")) .withBody ( "{message: 'helytelen felhasználónév és jelszó kombináció'}") .Delay (TimeUnit.SECONDS, 1)); } // ...}

Itt botladozunk a POST kérést a szerverhez. Meghatároztuk, hogy hányszor kell ezt a kérést felhasználnunk pontosan (1) hívás.

A kérelem beérkezésekor a választ olyan mezőkkel csúfoltuk, mint az állapotkód, a fejlécek és a válasz test.

5.2. Kérelem továbbítása

A várakozás beállítható a kérelem továbbítására. Néhány paraméter leírhatja az előremutató műveletet:

  • házigazda - a házigazda továbbítani pl. www.baeldung.com
  • kikötő - az a port, ahová a kérelmet továbbítani kell, az alapértelmezett port 80
  • rendszer - protokoll pl. HTTP vagy HTTPS

Lássunk egy példát az átirányítási kérelemre:

private void createExpectationForForward () {new MockServerClient ("127.0.0.1", 1080) .when (request () .WithMethod ("GET") .WithPath ("/ index.html"), pontosan (1)) .forward (forward) () .withHost ("www.mock-server.com") .WithPort (80) .withScheme (HttpForward.Scheme.HTTP)); }

Ebben az esetben kigúnyoltunk egy kérést, amely pontosan megüt a MockServeren, majd továbbított egy másik szerverre. A külső előre() módszer meghatározza az előremutató cselekvést és a belső előre() A method hívás segít az URL összeállításában és továbbítja a kérést.

5.3. Visszahívás végrehajtása

A szerver beállítható úgy, hogy visszahívást hajtson végre, amikor egy bizonyos kérést fogad. A visszahívási művelet meghatározhatja a visszahívási osztályt org.mockserver.mock.action.ExpectationCallback felület. Ennek meg kell adnia az alapértelmezett konstruktort, és az osztályúton kell lennie.

Lássunk egy példát a visszahívással kapcsolatos elvárásokra:

private void createExpectationForCallBack () {mockServer .when (request (). withPath ("/ callback")) .callback (callback () .withCallbackClass ("com.baeldung.mock.server.TestExpectationCallback")); }

Itt a külső visszahív() meghatározza a visszahívási műveletet és a belsőt visszahív() A metódus meghatározza a visszahívási módszer osztályának példányát.

Ebben az esetben, amikor a MockServer kérést kap a következővel: /visszahív, akkor a megadott osztályban megvalósított visszahívási kezelési módszer végrehajtásra kerül:

public class TestExpectationCallback implementálja az ExpectationCallback {public HttpResponse handle (HttpRequest httpRequest) {if (httpRequest.getPath (). getValue (). endWith ("/ callback")) {return httpResponse; } else {return notFoundResponse (); }} public static HttpResponse httpResponse = response () .withStatusCode (200); }

5.4. Kérések ellenőrzése

MockServerClient képes ellenőrizni, hogy a tesztelt rendszer küldött-e kérelmet:

private void verifyPostRequest () {new MockServerClient ("localhost", 1080) .verify (request () .withMethod ("POST") .withPath ("/ validate") .withBody (pontos ("{felhasználónév: 'foo', jelszó) : 'bar'} ")), VerificationTimes.exactly (1)); }

Itt a org.mockserver.verify.VerificationTimes osztály adja meg, hogy hányszor kell a Mock Server-nek megfelelnie a kérésnek.

6. Következtetés

Ebben a gyors cikkben a MockServer különféle funkcióit tártuk fel. Megvizsgáltuk a rendelkezésre álló különféle API-kat és azt, hogy miként használhatók összetett rendszerek tesztelésére.

Mint mindig, a cikk teljes kódja elérhető a GitHubon.


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