Získanie a overenie údajov odpovede s istotou REST

ODPOČINOK Najlepšie

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

V tomto tutoriáli sa dozvieme, ako testovať služby REST pomocou zaistenia REST so zameraním na zachytávanie a overovanie údajov odpovedí z našich rozhraní REST API.

2. Nastavenie pre testovaciu triedu

V predchádzajúcich tutoriáloch sme skúmali všeobecne zaistené REST a ukázali sme, ako manipulovať s hlavičkami požiadaviek, cookies a parametrami.

Na základe tohto existujúceho nastavenia sme pridali jednoduchý radič REST, AppController, ktorý interne volá službu, AppService. Tieto triedy použijeme v príkladoch testov.

Aby sme vytvorili našu testovaciu triedu, musíme urobiť trochu viac nastavenia. Odkedy máme test štartovacej pružiny v našej triede môžeme ľahko využiť nástroje na testovanie jari.

Najprv si vytvorme kostru nášho AppControllerIntegrationTest trieda:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT) verejná trieda AppControllerIntegrationTest {@LocalServerPort súkromný int port; private String uri; @PostConstruct public void init () {uri = "// localhost:" + port; } @MockBean AppService appService; // testovacie prípady}

V tomto teste JUnit sme anotovali našu triedu niekoľkými anotáciami špecifickými pre Spring, ktoré lokálne roztáčajú aplikáciu v náhodne dostupnom porte. V @PostConstruct, zachytili sme úplné URI, na ktorom budeme volať REST.

Tiež sme použili @MockBean na AppService, pretože sa musíme vysmievať, že metóda volá túto triedu.

3. Overenie odpovede JSON

JSON je najbežnejší formát používaný v REST API na výmenu údajov. Odpovede môžu pozostávať z jedného objektu JSON alebo z radu objektov JSON. Na obe sa pozrieme v tejto časti.

3.1. Jeden objekt JSON

Povedzme, že musíme otestovať / film / {id} koncový bod, ktorý vracia a Film Objekt JSON, ak id je nájdený.

Vysmejeme sa AppService vyzýva na vrátenie falošných údajov pomocou rámca Mockito:

@Test public void givenMovieId_whenMakingGetRequestToMovieEndpoint_thenReturnMovie () {Movie testMovie = new Movie (1, "movie1", "summary1"); when (appService.findMovie (1)). thenReturn (testMovie); get (uri + "/ film /" + testMovie.getId ()). potom () .assertThat () .statusCode (HttpStatus.OK.value ()) .body ("id", equalTo (testMovie.getId ()) ) .body ("name", equalTo (testMovie.getName ())) .body ("synopsis", notNullValue ()); }

Hore sme sa najskôr vysmievali appService.findMovie (1) volanie na vrátenie objektu. Potom sme zostrojili našu REST URL v dostať () metóda poskytovaná REST-zaručeným na vytváranie GET požiadaviek. Nakoniec sme vyslovili štyri tvrdenia.

Najprv, skontrolovali sme stavový kód odpovede a potom telo prvkov. Na potvrdenie očakávanej hodnoty používame Hamcrest.

Upozorňujeme tiež, že ak je odpoveď JSON vnorená, môžeme vnorený kľúč otestovať pomocou bodka operátor ako „Key1.key2.key3“.

3.2. Extrahovanie odpovede JSON po overení

V niektorých prípadoch bude možno potrebné po overení extrahovať odpoveď, aby sme s ňou mohli vykonať ďalšie operácie.

Odpoveď JSON môžeme extrahovať do triedy pomocou extrakt () metóda:

Výsledok filmu = get (uri + "/ film /" + testMovie.getId ()). Potom () .assertThat () .statusCode (HttpStatus.OK.value ()) .extract () .as (Movie.class); assertThat (výsledok) .isEqualTo (testMovie);

V tomto príklade sme zamerali REST-assured na extrakciu odpovede JSON na a Film objekt a potom sa uplatnil na extrahovanom objekte.

Môžeme tiež extrahovať celú odpoveď na a Reťazec, pomocou extract (). asString () API:

Reťazec responseString = get (uri + "/ film /" + testMovie.getId ()). Potom () .assertThat () .statusCode (HttpStatus.OK.value ()) .extract () .asString (); assertThat (responseString) .isNotEmpty ();

Nakoniec môžeme tiež extrahovať konkrétne pole z JSON odpovede.

Pozrime sa na test POST API, ktorý očakáva a Film Telo JSON a vráti rovnaké, ak bude úspešne vložené:

@Test public void givenMovie_whenMakingPostRequestToMovieEndpoint_thenCorrect () {požiadavka na mapu = nový HashMap (); request.put ("id", "11"); request.put ("meno", "film1"); request.put ("súhrn", "súhrn1"); int movieId = given (). contentType ("application / json") .body (request) .when () .post (uri + "/ movie") .ten () .assertThat () .statusCode (HttpStatus.CREATED.value ()) .extract () .path ("id"); assertThat (movieId) .isEqualTo (11); }

Vyššie sme najskôr vytvorili objekt žiadosti, ktorý potrebujeme POST. Potom sme extrahovali id z vrátenej odpovede JSON pomocou poľa cesta () metóda.

3.3. JSON pole

Môžeme tiež overiť odpoveď, ak ide o pole JSON:

@Test public void whenCallingMoviesEndpoint_thenReturnAllMovies () {Set movieSet = new HashSet (); movieSet.add (new Movie (1, "movie1", "summary1")); movieSet.add (new Movie (2, "movie2", "summary2")); when (appService.getAll ()). thenReturn (movieSet); get (uri + "/ films"). then () .statusCode (HttpStatus.OK.value ()) .assertThat () .body ("size ()", is (2)); }

Opäť sme sa najskôr posmievali appService.getAll () s niektorými údajmi a požiadal náš koncový bod. Potom sme tvrdili statusCode a veľkosť nášho poľa odpovedí.

To je možné opäť vykonať pomocou extrakcie:

Movie [] films = get (uri + "/ films"). Then () .statusCode (200) .extract () .as (Movie []. Class); assertThat (movies.length) .isEqualTo (2);

4. Validácia hlavičiek a cookies

Hlavičku alebo cookie odpovede môžeme overiť pomocou metód s rovnakým názvom:

@Test public void whenCallingWelcomeEndpoint_thenCorrect () {get (uri + "/ welcome"). Then () .assertThat () .header ("sessionId", notNullValue ()) .cookie ("token", notNullValue ()); }

Môžeme tiež extrahovať hlavičky a cookies jednotlivo:

Odozva odozva = get (uri + "/ welcome"); Reťazec headerName = response.getHeader ("sessionId"); Reťazec cookieValue = response.getCookie ("token"); assertThat (headerName) .isNotBlank (); assertThat (cookieValue) .isNotBlank ();

5. Validácia súborov

Ak naše REST API vráti súbor, môžeme použiť asByteArray () metóda na extrahovanie odpovede:

Súbor file = new ClassPathResource ("test.txt"). GetFile (); long fileSize = file.length (); keď (appService.getFile (1)). thenReturn (súbor); byte [] výsledok = get (uri + "/ download / 1"). asByteArray (); assertThat (result.length) .isEqualTo (fileSize);

Tu sme sa najskôr posmievali appService.getFile (1) vrátiť textový súbor, ktorý sa nachádza v našom src / test / zdroje cesta. Potom sme zavolali nášmu koncovému bodu a extrahovali sme odpoveď v a byte [], ktoré sme potom tvrdili, že máme očakávanú hodnotu.

6. Záver

V tomto tutoriáli sme sa pozreli na rôzne spôsoby zachytávania a overovania odpovedí z našich rozhraní REST API pomocou zabezpečenia REST.

Ako obvykle je kód v tomto článku k dispozícii na stránkach Github.

REST spodok

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

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