Introduksjon til MockServer

1. Oversikt

MockServer er et verktøy for mocking / stubbing av eksterne HTTP APIer.

2. Maven-avhengigheter

Å gjøre bruk av MockServer i vår applikasjon må vi legge til to avhengigheter:

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

Den siste versjonen av avhengighetene er tilgjengelig som mockserver-netty og mockserver-client.

3. MockServer Funksjonalitet

Enkelt sagt, verktøyet kan:

  • generere og returnere faste svar
  • videresend en forespørsel til en annen server
  • utføre tilbakeringinger
  • bekrefte en forespørsel

4. Hvordan løpe MockServer

Vi kan starte serveren på noen få forskjellige måter - la oss utforske noen av disse metodene.

4.1. Lansering via Maven Plugin

Dette vil starte serveren under prosess-test-klasse fase og stopp ved bekrefte fase:

 org.mock-server mockserver-maven-plugin 3.10.8 1080 1090 DEBUG org.mockserver.maven.ExampleInitializationClass prosess-test-klasser prosess-test-klasser start verifiser stopp 

4.2. Lansering via Java API

Vi kan bruke startClientAndServer () Java API for å starte serveren. Vanligvis starter vi en server før vi kjører alle testene:

offentlig klasse TestMockServer {private ClientAndServer mockServer; @BeforeClass offentlig ugyldig startServer () {mockServer = startClientAndServer (1080); } @AfterClass offentlig ugyldig stopServer () {mockServer.stop (); } // ...}

5. Mock klienter

MockServerClient API brukes til å gi mulighet til å koble til MockServer. Den modellerer forespørsler og tilsvarende svar fra serveren.

Den støtter flere operasjoner:

5.1. Å skape forventninger med hånlige svar

Forventninger er en mekanisme der vi håner forespørselen fra en klient og det resulterende svaret fra MockServer.

For å skape en forventning må vi definere en forespørselsmatcher og et svar som skal returneres.

Forespørsler kan matches med:

  • sti - URL-sti
  • spørringsstreng - URL-parametere
  • headers - be headers
  • informasjonskapsler - informasjonskapsler på klientsiden
  • body - POST forespørsel body med XPATH, JSON, JSON skjema, regulært uttrykk, nøyaktig samsvarende vanlig tekst eller brødtekstparametere

Alle parametrene ovenfor kan spesifiseres ved hjelp av ren tekst eller regulære uttrykk.

Og en responshandling vil inneholde:

  • statuskoder - gyldige HTTP-statuskoder f.eks. 200, 400 etc.
  • body - det er sekvensen av byte som inneholder noe innhold
  • overskrifter - svaroverskrifter med navn og en eller flere verdier
  • informasjonskapsler - svarskapsler med navn og en eller flere verdier

La oss se hvordan vi kan skape en forventning:

offentlig klasse TestMockServer {private void createExpectationForInvalidAuth () {new MockServerClient ("127.0.0.1", 1080) .when (request () .withMethod ("POST") .withPath ("/ validate") .withHeader ("\" Content- skriv \ ", \" application / json \ "") .withBody (eksakt ("{brukernavn: 'foo', passord: 'bar'}")), nøyaktig (1)). svar (svar () .withStatusCode ( 401) .withHeaders (ny header ("Content-Type", "application / json; charset = utf-8"), ny header ("Cache-Control", "public, max-age = 86400")) .withBody ( "{melding: 'feil brukernavn og passordkombinasjon'}") .withDelay (TimeUnit.SECONDS, 1)); } // ...}

Her stubber vi a POST forespørsel til serveren. Og vi har spesifisert at hvor mange ganger vi trenger å gjøre denne forespørselen ved hjelp av nøyaktig (1) anrop.

Etter å ha mottatt denne forespørselen har vi spottet et svar med feltene som statuskode, overskrifter og svarorgan.

5.2. Videresende en forespørsel

Forventning kan settes opp for å videresende forespørselen. Noen få parametere kan beskrive den fremadrettede handlingen:

  • vert - verten å videresende til f.eks. www.baeldung.com
  • havn - porten der forespørselen om å bli videresendt, standardport er 80
  • ordningen - protokoll for å bruke f.eks. HTTP eller HTTPS

La oss se et eksempel på videresendingsforespørsel:

privat tomrom createExpectationForForward () {new MockServerClient ("127.0.0.1", 1080) .when (forespørsel () .withMethod ("GET") .withPath ("/ index.html"), nøyaktig (1)). fremover (fremover () .withHost ("www.mock-server.com") .withPort (80) .withScheme (HttpForward.Scheme.HTTP)); }

I dette tilfellet har vi spottet en forespørsel som vil treffe MockServer nøyaktig de og deretter videresendt til en annen server. Det ytre framover() metoden spesifiserer fremover handling og indre framover() method call hjelper med å konstruere URL-en og videresender forespørselen.

5.3. Utføre en tilbakeringing

Serveren kan innstilles til å utføre en tilbakeringing når den mottar en bestemt forespørsel. Tilbakeringingshandling kan definere tilbakeringingsklasse som implementeres org.mockserver.mock.action.ExpectationCallback grensesnitt. Den skal ha standardkonstruktøren og skal være på klassestien.

La oss se et eksempel på forventning med tilbakeringing:

privat tomrom createExpectationForCallBack () {mockServer .when (forespørsel (). withPath ("/ tilbakering")). tilbakering (tilbakering () .withCallbackClass ("com.baeldung.mock.server.TestExpectationCallback")); }

Her det ytre Ring tilbake() spesifiserer tilbakeringingshandling og den indre Ring tilbake() metoden spesifiserer forekomsten av tilbakekallingsmetodeklassen.

I dette tilfellet når MockServer mottar en forespørsel med /Ring tilbake, deretter vil tilbakekallingshåndteringsmetoden implementert i den angitte klassen bli utført:

offentlig klasse TestExpectationCallback implementerer ExpectationCallback {public HttpResponse handle (HttpRequest httpRequest) {if (httpRequest.getPath (). getValue (). endsWith ("/ callback")) {return httpResponse; } annet {return notFoundResponse (); }} offentlig statisk HttpResponse httpResponse = respons () .withStatusCode (200); }

5.4. Bekrefte forespørsler

MockServerClient har mulighet til å sjekke om systemet under test sendte en forespørsel:

private void verifiserePostRequest () {new MockServerClient ("localhost", 1080) .verify (forespørsel () .withMethod ("POST") .withPath ("/ validate") .withBody (exact ("{brukernavn: 'foo', passord) : 'bar'} ")), VerificationTimes. nøyaktig (1)); }

Her, den org.mockserver.verify.VerificationTimes klasse brukes til å spesifisere antall ganger Mock Server skal matche forespørselen.

6. Konklusjon

I denne raske artikkelen har vi utforsket forskjellige funksjoner i MockServer. Vi har også utforsket de forskjellige API-ene som tilbys, og hvordan de kan brukes til å teste komplekse systemer.

Som alltid er den fullstendige koden for denne artikkelen tilgjengelig på GitHub.


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