Válaszadatok megszerzése és ellenőrzése REST-biztosított

REST felső

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Áttekintés

Ebben az oktatóanyagban megvitatjuk, hogyan tesztelhetjük a REST szolgáltatásokat a REST-assured segítségével, különös tekintettel a következőkre: a válaszadatok rögzítése és érvényesítése a REST API-kból.

2. Beállítás a tesztosztályhoz

Korábbi oktatóanyagok során általában a REST-assured-et vizsgáltuk, és megmutattuk, hogyan kell kezelni a kérés fejlécét, a sütiket és a paramétereket.

Erre a meglévő beállításra építve felvettünk egy egyszerű REST vezérlőt, AppController, amely belsőleg hív egy szolgáltatást, AppService. Ezeket az osztályokat a tesztpéldáinkban fogjuk használni.

A tesztosztály létrehozásához egy kicsit több beállítást kell elvégeznünk. Mivel van tavasz-csomagtartó-indító-teszt osztályunkban könnyen kihasználhatjuk a Spring testing segédprogramokat.

Először hozzuk létre a mi csontvázat AppControllerIntegrationTest osztály:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT) public class AppControllerIntegrationTest {@LocalServerPort private int port; magánhúr uri; @PostConstruct public void init () {uri = "// localhost:" + port; } @MockBean AppService appService; //teszt esetek }

Ebben a JUnit tesztben néhány Spring-specifikus jelöléssel jegyzeteltük az osztályunkat, amelyek az alkalmazást egy véletlenszerűen elérhető portban helyben felpörgetik. Ban ben @PostConstruct, elfogtuk a teljes URI-t, amelyen REST hívásokat fogunk indítani.

Mi is használtuk @MockBean tovább AppService, mivel gúnyolódnunk kell a módszerhívásokra ebben az osztályban.

3. A JSON válasz validálása

A JSON a REST API-kban leggyakrabban használt adatcsere-formátum. A válaszok állhatnak egyetlen JSON-objektumból vagy JSON-objektumok tömbjéből. Ebben a szakaszban mindkettőt megvizsgáljuk.

3.1. Egyetlen JSON-objektum

Tegyük fel, hogy tesztelnünk kell a / film / {id} végpont, amely a Film JSON objektum, ha a id található.

Gúnyolódni fogunk AppService felhívások néhány áladat visszaadására a Mockito keretrendszer használatával:

@Test public void givenMovieId_whenMakingGetRequestToMovieEndpoint_thenReturnMovie () {Movie testMovie = new Movie (1, "film1", "összefoglaló1"); mikor (appService.findMovie (1)). thenReturn (testMovie); get (uri + "/ film /" + testMovie.getId ()). majd () .assertThat () .statusCode (HttpStatus.OK.value ()) .body ("id", equalTo (testMovie.getId ()) ) .body ("név", equalTo (testMovie.getName ())) .body ("szinopszis", notNullValue ()); }

Fentebb először gúnyoltuk a appService.findMovie (1) hívás egy objektum visszaküldéséhez. Ezután elkészítettük a REST URL-t a kap() a REST által biztosított módszer a GET kérések benyújtására. Végül négy állítást fogalmaztunk meg.

Első, ellenőriztük a válasz állapotkódját, majd a test elemek. A várható érték érvényesítéséhez a Hamcrest szolgáltatást használjuk.

Vegye figyelembe azt is, hogy ha a válasz JSON be van ágyazva, akkor tesztelhetünk egy beágyazott kulcsot a pont üzemeltető, mint „Key1.key2.key3”.

3.2. A JSON válasz kivonása validálás után

Bizonyos esetekben előfordulhat, hogy érvényesítés után ki kell nyernünk a választ, hogy további műveleteket hajtsunk végre rajta.

A JSON választ egy osztályra vonhatjuk ki, a kivonat() módszer:

Film eredménye = get (uri + "/ film /" + testMovie.getId ()). Majd () .assertThat () .statusCode (HttpStatus.OK.value ()) .extract () .as (Movie.class); assertThat (eredmény) .isEqualTo (testMovie);

Ebben a példában arra irányítottuk a REST-assured-t, hogy kivonjuk a JSON válaszát a Film objektumot, majd érvényesítették a kibontott objektumon.

Kivonhatjuk az a teljes válaszát is Húr, használni a kivonat (). asString () API:

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

Végül, kivonhatunk egy adott mezőt a válasz JSON-ból is.

Nézzünk meg egy tesztet egy POST API-ra, amely elvárja a Film JSON törzs, és ugyanezt adja vissza, ha sikeresen beillesztette:

@Test public void givenMovie_whenMakingPostRequestToMovieEndpoint_thenCorrect () {Map request = new HashMap (); request.put ("id", "11"); request.put ("név", "film1"); request.put ("összefoglaló", "összefoglaló1"); int movieId = megadott (). contentType ("alkalmazás / json") .body (kérés) .mikor () .post (uri + "/ film") .then () .assertThat () .statusCode (HttpStatus.CREATED.value ()) .extract () .path ("id"); assertThat (movieId) .isEqualTo (11); }

A fentiekben előbb elkészítettük azt a kérésobjektumot, amelyre POST-ot kell küldeni. Ezután kivontuk a id mező a visszaküldött JSON válaszból a pálya() módszer.

3.3. JSON tömb

A választ is ellenőrizhetjük, ha JSON tömb:

@Test public void whenCallingMoviesEndpoint_thenReturnAllMovies () {Set movieSet = new HashSet (); movieSet.add (új film (1, "film1", "összefoglaló1")); movieSet.add (új film (2, "film2", "összefoglaló2")); mikor (appService.getAll ()). thenReturn (movieSet); get (uri + "/ filmek"). majd () .statusCode (HttpStatus.OK.value ()) .assertThat () .body ("size ()", az (2)); }

Ismét először gúnyoltuk a appService.getAll () néhány adattal, és kérelmet nyújtott be a végpontunkhoz. Ezután állítottuk a statusCode és méret válasz tömbünk.

Ez megint kivonással történhet:

Film [] filmek = get (uri + "/ filmek"). Majd () .statusCode (200) .extract () .as (Movie []. Class); assertThat (filmek.hossz) .isEqualTo (2);

4. Fejlécek és sütik ellenőrzése

A válasz fejlécét vagy cookie-ját azonos nevű módszerekkel ellenőrizhetjük:

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

A fejléceket és a sütiket külön-külön is kivonhatjuk:

Válasz válasz = get (uri + "/ welcome"); String headerName = response.getHeader ("sessionId"); String cookieValue = response.getCookie ("token"); assertThat (headerName) .isNotBlank (); assertThat (cookieValue) .isNotBlank ();

5. Fájlok ellenőrzése

Ha a REST API-nk visszaad egy fájlt, használhatjuk a asByteArray () módszer a válasz kivonására:

Fájlfájl = new ClassPathResource ("test.txt"). GetFile (); long fileSize = fájl.length (); mikor (appService.getFile (1)). thenReturn (fájl); bájt [] eredmény = get (uri + "/ letöltés / 1"). asByteArray (); assertThat (eredmény.hossz) .isEqualTo (fileSize);

Itt először gúnyolódtunk appService.getFile (1) hogy visszatérjen egy szöveges fájl, amely jelen van a src / test / resources pálya. Ezután felhívtunk a végpontunkra, és kivontuk a választ a byte[], amiről aztán azt állítottuk, hogy az elvárt érték.

6. Következtetés

Ebben az oktatóanyagban különböző módszereket kerestünk a REST API-kból érkező válaszok rögzítésére és érvényesítésére a REST-assured segítségével.

Szokás szerint a cikk kódja elérhető a Githubon.

REST alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT