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.