Dobivanje i provjera podataka o odgovorima uz REST-osigurano

OSTALO Vrh

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

U ovom uputstvu razgovarat ćemo o testiranju REST usluga koristeći REST-assured, s naglaskom na hvatanje i potvrđivanje podataka odgovora iz naših REST API-ja.

2. Postavljanje test klase

U prethodnim vodičima istražili smo REST-assured općenito i pokazali smo kako manipulirati zaglavljima zahtjeva, kolačićima i parametrima.

Nadovezujući se na ovu postojeću postavku, dodali smo jednostavan REST kontroler, AppController, koja interno poziva uslugu, AppService. Te ćemo tečajeve koristiti u našim primjerima testova.

Da bismo stvorili našu testnu klasu, moramo malo više podesiti. Otkad imamo proljetni-boot-starter-test u našem putu do razreda lako možemo iskoristiti uslužne programe za proljetno testiranje.

Prvo, stvorimo kostur našeg AppControllerIntegrationTest razred:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT) javna klasa AppControllerIntegrationTest {@LocalServerPort private int port; privatni niz uri; @PostConstruct javna void init () {uri = "// localhost:" + port; } @MockBean AppService appService; // test slučajevi}

U ovom JUnit testu označili smo svoj razred s nekoliko Spring-specific bilješki koje lokalno vrte aplikaciju u slučajno dostupnom priključku. U @PostConstruct, snimili smo puni URI na kojem ćemo upućivati ​​REST pozive.

Također smo koristili @MockBean na AppService, jer se trebamo rugati pozivima metoda na ovoj klasi.

3. Provjera valjanosti JSON odgovora

JSON je najčešći format koji se koristi u REST API-ima za razmjenu podataka. Odgovori se mogu sastojati od jednog JSON objekta ili niza JSON objekata. Oboje ćemo pogledati u ovom odjeljku.

3.1. Pojedinačni JSON objekt

Recimo da moramo testirati / film / {id} krajnja točka, koja vraća a Film JSON objekt ako je iskaznica pronađeno je.

Rugati ćemo se AppService poziva da se vrate neki lažni podaci pomoću Mockito okvira:

@Test javna praznina givenMovieId_whenMakingGetRequestToMovieEndpoint_thenReturnMovie () {Movie testMovie = novi film (1, "film1", "summary1"); kada (appService.findMovie (1)). thenReturn (testMovie); get (uri + "/ movie /" + testMovie.getId ()). then () .assertThat () .statusCode (HttpStatus.OK.value ()) .body ("id", jednakTo (testMovie.getId ()) ) .body ("ime", jednakTo (testMovie.getName ())) .body ("sinopsis", notNullValue ()); }

Iznad smo se prvo rugali appService.findMovie (1) poziv za povratak predmeta. Zatim smo konstruirali naš REST URL u dobiti() metoda koju pruža REST-assured za podnošenje GET zahtjeva. Napokon smo iznijeli četiri tvrdnje.

Prvi, provjerili smo kod statusa odgovora, a zatim tijelo elementi. Koristimo Hamcrest za utvrđivanje očekivane vrijednosti.

Također imajte na umu da ako je odgovor JSON ugniježđen, možemo testirati ugniježđeni ključ pomoću točka poput operatora "Key1.key2.key3".

3.2. Izdvajanje JSON odgovora nakon provjere valjanosti

U nekim ćemo slučajevima možda trebati izdvojiti odgovor nakon provjere valjanosti i izvršiti dodatne operacije na njemu.

JSON odgovor možemo izdvojiti u klasu pomoću ekstrakt() metoda:

Rezultat filma = get (uri + "/ movie /" + testMovie.getId ()). Then () .assertThat () .statusCode (HttpStatus.OK.value ()) .extract () .as (Movie.class); assertThat (rezultat) .isEqualTo (testMovie);

U ovom smo primjeru uputili REST-assured da izdvoji JSON odgovor na a Film objekt, a zatim ustvrdi na izvađenom objektu.

Također možemo izdvojiti cijeli odgovor na a Niz, koristiti ekstrakt (). asString () API:

String responseString = get (uri + "/ movie /" + testMovie.getId ()). Then () .assertThat () .statusCode (HttpStatus.OK.value ()) .extract () .asString (); assertThat (responseString) .isNotEmpty ();

Konačno, možemo izvući određeno polje i iz odgovora JSON.

Pogledajmo test za POST API koji očekuje a Film JSON tijelo i vratit će ga isto ako je uspješno umetnuto:

@Test javna praznina givenMovie_whenMakingPostRequestToMovieEndpoint_thenCorrect () {Zahtjev za kartom = novi HashMap (); request.put ("id", "11"); request.put ("ime", "film1"); request.put ("sinopsis", "sažetak1"); int movieId = given (). contentType ("application / json") .body (zahtjev) .when () .post (uri + "/ movie"). then () .assertThat () .statusCode (HttpStatus.CREATED.value ()) .extract () .path ("id"); assertThat (movieId) .isEqualTo (11); }

Iznad smo prvo napravili objekt zahtjeva koji moramo POSTATI. Zatim smo izvadili iskaznica polje iz vraćenog JSON odgovora pomoću staza() metoda.

3.3. JSON niz

Odgovor također možemo provjeriti je li to JSON niz:

@Test public void whenCallingMoviesEndpoint_thenReturnAllMovies () {Set movieSet = new HashSet (); movieSet.add (novi Film (1, "film1", "sažetak1")); movieSet.add (novi Film (2, "movie2", "summary2")); kada (appService.getAll ()). thenReturn (movieSet); get (uri + "/ movies"). then () .statusCode (HttpStatus.OK.value ()) .assertThat () .body ("size ()", is (2)); }

Opet smo se prvo rugali appService.getAll () s nekim podacima i uputio zahtjev našoj krajnjoj točki. Tada smo ustvrdili statusCode i veličina našeg niza odgovora.

To se opet može učiniti ekstrakcijom:

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

4. Provjera valjanosti zaglavlja i kolačića

Zaglavlje ili kolačić odgovora možemo provjeriti pomoću istoimenih metoda:

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

Zaglavlja i kolačiće također možemo izdvojiti pojedinačno:

Odgovor odgovora = get (uri + "/ welcome"); Niz headerName = response.getHeader ("sessionId"); Niz cookieValue = response.getCookie ("token"); assertThat (headerName) .isNotBlank (); assertThat (cookieValue) .isNotBlank ();

5. Provjera valjanosti datoteka

Ako naš REST API vrati datoteku, možemo koristiti asByteArray () metoda za izdvajanje odgovora:

Datoteka datoteke = new ClassPathResource ("test.txt"). GetFile (); long fileSize = file.length (); kada (appService.getFile (1)). thenReturn (datoteka); bajt [] rezultat = get (uri + "/ download / 1"). asByteArray (); assertThat (result.length) .isEqualTo (fileSize);

Evo, prvo smo se rugali appService.getFile (1) za povratak tekstualne datoteke koja je prisutna u našem src / test / resources staza. Zatim smo nazvali krajnju točku i izvukli odgovor u a bajt[], za koju smo tada tvrdili da ima očekivanu vrijednost.

6. Zaključak

U ovom smo tutorijalu istražili različite načine hvatanja i provjere valjanosti odgovora iz naših REST API-ja koristeći REST-assured.

Kao i obično, kôd u ovom članku dostupan je na Githubu.

OSTALO dno

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

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