Válaszadatok megszerzése és ellenőrzése REST-biztosított
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 FOLYAMATOT1. Á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ó