Úvod do MockServeru

1. Prehľad

MockServer je nástroj na vysmievanie sa / stubding externých HTTP API.

2. Maven závislosti

Využiť MockServer v našej aplikácii musíme pridať dve závislosti:

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

Najnovšia verzia závislostí je k dispozícii ako mockserver-netty a mockserver-client.

3. MockServer Funkčnosť

Jednoducho povedané, nástroj môže:

  • generovať a vracať pevné odpovede
  • preposlať požiadavku na iný server
  • uskutočňovať spätné volania
  • overiť žiadosť

4. Ako bežať MockServer

Server môžeme spustiť niekoľkými rôznymi spôsobmi - preskúmajme niektoré z týchto metód.

4.1. Spúšťa sa cez Maven Plugin

Server sa spustí počas trieda procesných testov fázy a zastavte sa na overiť fáza:

 org.mock-server mockserver-maven-plugin 3.10.8 1080 1090 DEBUG org.mockserver.maven.ExampleInitializationClass procesné testovacie triedy procesné testovacie triedy štart overiť overiť stop 

4.2. Spustenie cez Java API

Môžeme použiť startClientAndServer () Java API na spustenie servera. Spravidla by sme spustili server pred spustením všetkých testov:

verejná trieda TestMockServer {private ClientAndServer mockServer; @BeforeClass public void startServer () {mockServer = startClientAndServer (1080); } @AfterClass public void stopServer () {mockServer.stop (); } // ...}

5. Vysmievaní sa klienti

MockServerClient API sa používa na zabezpečenie schopnosti pripojiť sa k internetu MockServer. Modeluje požiadavky a zodpovedajúce odpovede zo servera.

Podporuje viac operácií:

5.1. Vytváranie očakávaní pomocou simulovaných odpovedí

Očakávania sú mechanizmom, ktorým sa vysmievame požiadavke od klienta a výslednej odpovedi od MockServeru.

Aby sme vytvorili očakávanie, musíme definovať porovnávač požiadaviek a odpoveď, ktorá by sa mala vrátiť.

K požiadavkám je možné priradiť:

  • cesta - URL cesta
  • reťazec dotazu - parametre URL
  • hlavičky - vyžiadať hlavičky
  • cookies - cookies na strane klienta
  • body - telo žiadosti POST so schémami XPATH, JSON, JSON, regulárnym výrazom, presnou zhodou s textom alebo parametrami tela

Všetky vyššie uvedené parametre je možné určiť pomocou obyčajného textu alebo regulárnych výrazov.

A reakcia bude obsahovať:

  • stavové kódy - platné stavové kódy HTTP napr. 200, 400 atď.
  • body - je to postupnosť bajtov obsahujúcich akýkoľvek obsah
  • hlavičky - hlavičky odpovedí s menom a jednou alebo viacerými hodnotami
  • cookies - odpovede cookies s menom a jednou alebo viacerými hodnotami

Pozrime sa, ako môžeme vytvoriť očakávanie:

verejná trieda TestMockServer {private void createExpectationForInvalidAuth () {new MockServerClient ("127.0.0.1", 1080) .when (request () .withMethod ("POST") .withPath ("/ validate") .withHeader ("\" Content- typ \ ", \" application / json \ "") .withBody (presné ("{používateľské meno: 'foo', heslo: 'bar'}")), presne (1)) .respond (response () .withStatusCode ( 401) .withHeaders (new Header ("Content-Type", "application / json; charset = utf-8"), new Header ("Cache-Control", "public, max-age = 86400")) .withBody ( "{message: 'nesprávna kombinácia používateľského mena a hesla'}") .withDelay (TimeUnit.SECONDS, 1)); } // ...}

Tu bodáme a POST požiadavka na server. A špecifikovali sme, koľkokrát musíme urobiť túto požiadavku pomocou presne (1) hovor.

Pri prijatí tejto žiadosti sme sa vysmievali odpovedi s poľami ako stavový kód, hlavičky a telo odpovede.

5.2. Preposlanie žiadosti

Je možné nastaviť očakávanie na preposlanie žiadosti. Nasledujúca akcia môže opísať niekoľko parametrov:

  • hostiteľ - hostiteľ preposlať napr. www.baeldung.com
  • prístav - port, na ktorý sa má poslať požiadavka, predvolený port je 80
  • schéma - protokol na použitie napr. HTTP alebo HTTPS

Pozrime sa na príklad žiadosti o preposlanie:

private void createExpectationForForward () {new MockServerClient ("127.0.0.1", 1080) .when (request () .withMethod ("GET") .withPath ("/ index.html"), presne (1)) .forward (vpred () .withHost ("www.mock-server.com") .withPort (80) .withScheme (HttpForward.Scheme.HTTP)); }

V tomto prípade sme sa vysmievali požiadavke, ktorá presne zasiahne MockServer a potom ju preposlala na iný server. Vonkajšie dopredu () metóda určuje akciu dopredu a vnútornú dopredu () volanie metódy pomáha konštruovať URL a preposlať požiadavku.

5.3. Vykonanie spätného volania

Server je možné nastaviť tak, aby pri prijatí konkrétnej žiadosti uskutočnil spätné volanie. Akcia spätného volania môže definovať triedu spätného volania, ktorá sa implementuje org.mockserver.mock.action.ExpectationCallback rozhranie. Mal by mať predvolený konštruktor a mal by byť na ceste triedy.

Pozrime sa na príklad očakávania spätného volania:

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

Tu vonkajšie zavolaj späť() určuje akciu spätného volania a vnútornú zavolaj späť() metóda určuje inštanciu triedy metódy spätného volania.

V takom prípade, keď MockServer dostane žiadosť s /zavolaj späť, potom sa vykoná metóda spracovania spätného volania implementovaná v zadanej triede:

verejná trieda TestExpectationCallback implementuje ExpectationCallback {public HttpResponse handle (HttpRequest httpRequest) {if (httpRequest.getPath (). getValue (). endsWith ("/ callback")) {return httpResponse; } else {return notFoundResponse (); }} public static HttpResponse httpResponse = response () .withStatusCode (200); }

5.4. Overovanie žiadostí

MockServerClient má schopnosť skontrolovať, či testovaný systém odoslal požiadavku:

private void verifyPostRequest () {new MockServerClient ("localhost", 1080) .verify (request () .withMethod ("POST") .withPath ("/ validate") .withBody (exact ("{username: 'foo', heslo : 'bar'} ")), VerificationTimes.exactly (1)); }

Tu je org.mockserver.verify.VerificationTimes triedy sa používa na zadanie počtu prípadov, kedy by sa Mock Server mal zhodovať s požiadavkou.

6. Záver

V tomto rýchlom článku sme preskúmali rôzne funkcie servera MockServer. Preskúmali sme tiež rôzne poskytované API a ako sa dajú použiť na testovanie zložitých systémov.

Úplný kód tohto článku je ako vždy k dispozícii na stránkach GitHub.


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