Útmutató a REST-biztosított

Jackson Top

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. Bemutatkozás

A REST-assured célja a REST API-k tesztelésének és validálásának egyszerűsítése, és nagyban befolyásolják azokat a dinamikus nyelvekben használt tesztelési technikák, mint a Ruby és a Groovy.

A könyvtár szilárdan támogatja a HTTP-t, természetesen az igékkel és a szokásos HTTP műveletekkel kezdve, de jóval túlmutat ezen alapokon.

Ebben az útmutatóban fogunk fedezze fel a Pihenést és a Hamcrest segítségével fogjuk érvényesíteni. Ha még nem ismeri a Hamcrest-et, akkor először kövesse az oktatóanyagot: Tesztelés a Hamcrest-tel.

Ezenkívül a REST-assured fejlettebb eseteinek megismeréséhez nézze meg a többi cikkünket:

  • NYUGODT - biztosított Groovy-val
  • JSON séma érvényesítése REST-biztosított
  • Paraméterek, fejlécek és cookie-k REST-biztosított

Most merüljünk el egy egyszerű példával.

2. Egyszerű példa teszt

Mielőtt elkezdenénk, győződjünk meg arról, hogy tesztjeink a következő statikus importálással rendelkeznek:

io.restassured.RestAssured. * io.restassured.matcher.RestAssuredMatchers. * org.hamcrest.Matchers. *

Erre szükségünk lesz, hogy a tesztek egyszerűek legyenek és könnyen hozzáférhessenek a fő API-khoz.

Kezdjük az egyszerű példával - egy alapvető fogadási rendszer, amely néhány adatot tesz közzé a játékokhoz:

{"id": "390", "data": {"leagueId": 35, "homeTeam": "Norvégia", "visitTeam": "Anglia",}, "odds": [{"price": "1.30 "," név ":" 1 "}, {" ár ":" 5,25 "," név ":" X "}]}

Tegyük fel, hogy ez a JSON válasza a lokálisan telepített API megütéséből - // localhost: 8080 / events? id = 390. :

Most a REST-assured segítségével ellenőrizzük a JSON válasz néhány érdekes tulajdonságát:

@Test public void givenUrl_whenSuccessOnGetsResponseAndJsonHasRequiredKV_thenCorrect () {get ("/ events? Id = 390"). Then (). StatusCode (200) .assertThat () .body ("data.leagueId", egyenlőTo (35)); }

Tehát, amit itt tettünk, azt ellenőriztük, hogy hívást kaptunk-e a végpontra / események? id = 390 a-t tartalmazó testtel reagál JSON húr akinek ligaId a adat objektum 35.

Nézzünk meg egy érdekesebb példát. Tegyük fel, hogy szeretné ellenőrizni, hogy a esély tömbnek vannak rekordjai az árakkal 1.30 és 5.25:

@Test public void givenUrl_whenJsonResponseHasArrayWithGivenValuesUnderKey_thenCorrect () {get ("/ events? Id = 390"). Then (). AssertThat () .body ("odds.price", hasItems ("1.30", "5.25"); }

3. Pihentetett beállítás

Ha a kedvenc függőségi eszköz a Maven, akkor a következő függőséget adjuk hozzá a pom.xml fájl:

 io.pihentető nyugodt 3.3.3 teszt 

A legfrissebb verzió eléréséhez kövesse ezt a linket.

A REST-assured kihasználja a Hamcrest-párosok erejét állításainak végrehajtásához, ezért ezt a függőséget is fel kell tüntetnünk:

 org.hamcrest hamcrest-all 2.1 

A legfrissebb verzió mindig ezen a linken lesz elérhető.

4. Névtelen JSON gyökér érvényesítése

Vegyünk egy tömböt, amely objektumok helyett primitíveket tartalmaz:

[1, 2, 3]

Ezt nevezik névtelen JSON-gyökérnek, vagyis nincs kulcs-érték pár, ennek ellenére továbbra is érvényes JSON-adatok.

Az érvényesítést egy ilyen szcenárióban futtathatjuk a $ szimbólum vagy egy üres karakterlánc („”), mint útvonal. Tegyük fel, hogy a fenti szolgáltatást keresztül tesszük elérhetővé // localhost: 8080 / json akkor a REST-assured segítségével így érvényesíthetjük:

mikor (). get ("/ json"). akkor (). body ("$", hasItems (1, 2, 3));

vagy így:

mikor (). get ("/ json"). akkor (). body ("", hasItems (1, 2, 3));

5. Úszók és párosok

Amikor elkezdjük a REST-assured használatát a REST szolgáltatásaink teszteléséhez, meg kell értenünk, hogy a JSON válaszokban szereplő lebegőpontos számok primitív típushoz vannak hozzárendelve úszó.

A ... haszna úszó típus nem cserélhető fel a következővel: kettős mint sok java forgatókönyv esetén.

Például ez a válasz:

{"páratlan": {"ár": "1,30", "ck": 12,2, "név": "1"}}

tegyük fel, hogy a következő tesztet futtatjuk a ck:

get ("/ páratlan"). majd (). assertThat (). body ("páratlan.ck", egyenlőTo (12.2));

Ez a teszt akkor is sikertelen lesz, ha az általunk tesztelt érték megegyezik a válasz értékével. Ez azért van, mert összehasonlítjuk a kettős nem pedig a úszó.

Ahhoz, hogy működjön, kifejezetten meg kell határoznunk az operandust az egyenlő matcher módszer, mint a úszó, így:

get ("/ páratlan"). majd (). assertThat (). body ("páratlan.ck", egyenlőTo (12.2f));

6. A kérési módszer megadása

Általában egy kérést egy olyan módszer meghívásával hajtunk végre, mint a kap(), megfelel a használni kívánt kérési módszernek.

Továbbá, a HTTP igét megadhatjuk a kérés() módszer:

@Test public void whenRequestGet_thenOK () {when (). Request ("GET", "/users/eugenp").then().statusCode(200); }

A fenti példa megegyezik a használatával kap() közvetlenül.

Hasonlóképpen küldhetünk is FEJ, CSATLAKOZZON és OPCIÓK kérések:

@Test public void whenRequestHead_thenOK () {when (). Request ("HEAD", "/users/eugenp").then().statusCode(200); }

POST kérés is hasonló szintaxist követ, és megadhatjuk a test a val vel() és test() mód.

Ezért, hogy hozzon létre egy új Páratlan elküldésével a POST kérés:

@Test public void whenRequestedPost_thenCreated () {with (). Body (new Odd (5.25f, 1, 13.1f, "X")) .when () .request ("POST", "/ odds / new") .then () .statusCode (201); }

A Páratlan objektumként elküldve test automatikusan átalakul JSON-vá. Átadhatunk bármelyiket is Húr amit a miénkként akarunk elküldeni POSTtest.

7. Alapértelmezett értékek konfigurálása

Sok alapértelmezett értéket konfigurálhatunk a tesztekhez:

@A nyilvános void beállítása előtt () {RestAssured.baseURI = "//api.github.com"; RestAssured.port = 443; }

Itt beállítunk egy alap URI-t és portot a kéréseinkhez. Ezek mellett konfigurálhatjuk az alap elérési útját, a gyökérpatikat és a hitelesítést is.

Megjegyzés: visszaállíthatjuk a standard REST által biztosított alapértelmezéseket is:

RestAssured.reset ();

8. Mérje meg a válaszidőt

Lássuk, hogyan tudunk mérje meg a válaszidőt a idő() és timeIn () módszerei Válasz tárgy:

@Test public void whenMeasureResponseTime_thenOK () {Response response = RestAssured.get ("/ users / eugenp"); long timeInMS = válasz.idő (); hosszú időInS = response.timeIn (TimeUnit.SECONDS); assertEquals (timeInS, timeInMS / 1000); }

Vegye figyelembe, hogy:

  • idő() a válaszidő milliszekundumban történő megadására szolgál
  • timeIn () arra szolgál, hogy lekérdezzük a válaszidőt a megadott időegységben

8.1. Ellenőrizze a válaszidőt

A válaszidőt - ezredmásodpercekben - egyszerűséggel is érvényesíthetjük hosszúMérkőzés:

@Test public void whenValidateResponseTime_thenSuccess () {when (). Get ("/ users / eugenp"). Then (). Time (lessThan (5000L)); }

Ha a válaszidőt egy másik időegységben akarjuk érvényesíteni, akkor a idő() meccs egy másodperccel TimeUnit paraméter:

@Test public void whenValidateResponseTimeInSeconds_thenSuccess () {when (). Get ("/ users / eugenp"). Then (). Time (lessThan (5L), TimeUnit.SECONDS); }

9. XML válaszellenőrzés

Nemcsak egy JSON-választ, hanem az XML-t is érvényesíteni tudja.

Tegyük fel, hogy kérelmet intézünk // localhost: 8080 / alkalmazottak és a következő választ kapjuk:

  Jane Daisy f 

Ellenőrizhetjük, hogy a keresztnév van Jane így:

@Test public void givenUrl_whenXmlResponseValueTestsEqual_thenCorrect () {post ("/ alkalmazottak"). Then (). AssertThat () .body ("alkalmazottak.alkalmazott. keresztneve", equalTo ("Jane")); }

Azt is ellenőrizhetjük, hogy minden érték megfelel-e a várt értékeinknek, ha test-illesztőket láncolunk így:

@Test public void givenUrl_whenMultipleXmlValuesTestEqual_thenCorrect () {post ("/ alkalmazottak"). Then (). AssertThat () .body ("alkalmazottak.alkalmazott. keresztneve", equalTo ("Jane")) .body ("alkalmazottak.alkalmazott) .last-name ", egyenlőTo (" Százszorszép ")) .body (" alkalmazottak.alkalmazott.szex ", egyenlőTo (" f ")); }

Vagy a rövidített változatot változó argumentumokkal használhatja:

@Test public void givenUrl_whenMultipleXmlValuesTestEqualInShortHand_thenCorrect () {post ("/ alkalmazottak") .then (). AssertThat (). Body ("alkalmazottak.alkalmazott. keresztnév", egyenlőTo ("Jane"), "alkalmazottak.alkalmazott.lista- név ", egyenlőTo (" Százszorszép ")," alkalmazottak.alkalmazott.szex ", egyenlőTo (" f ")); }

10. XPath for XML

A válaszainkat az XPath segítségével is ellenőrizhetjük. Vegyük figyelembe az alábbi példát, amely egy párost hajt végre a keresztnév:

@Test public void givenUrl_whenValidatesXmlUsingXpath_thenCorrect () {post ("/ alkalmazottak"). Majd (). AssertThat (). body (hasXPath ("/ alkalmazottak / alkalmazott / keresztnév", tartalmazzaString ("Ja"))); }

Az XPath elfogadja a egyenlő páros:

@Test public void givenUrl_whenValidatesXmlUsingXpath2_thenCorrect () {post ("/ alkalmazottak"). Then (). AssertThat () .body (hasXPath ("/ alkalmazottak / alkalmazott / keresztnév [text () = 'Jane']")); }

11. Naplózási teszt részletei

11.1. Napló kérelem részletei

Először nézzük meg, hogyan kell naplózza a kérelem teljes adatait a log (). all ():

@Test public void whenLogRequest_thenOK () {megadott (). Log (). All () .when (). Get ("/ users / eugenp") .then (). StatusCode (200); }

Ez valami ilyesmit fog naplózni:

Kérés módja: GET Kérés URI: //api.github.com:443/users/eugenp Proxy: Paraméterek kérése: Lekérdezési paraméterek: Forma paraméterek: Útvonal paraméterek: Több rész: Fejlécek: Elfogadás = * / * Cookie-k: Törzs: 

A kérés csak egyes részeinek naplózásához megvan a napló () módszerrel kombinálva params (), body (), headers (), cookie-k (), method (), path () például napló. (). params ().

Vegye figyelembe, hogy más használt könyvtárak vagy szűrők megváltoztathatják a szerverre küldötteket, ezért ezeket csak a kezdeti kérelem specifikációjának naplózásához szabad használni.

11.2. Naplózza a válasz részleteit

Hasonlóképpen naplózhatjuk a válasz részleteit.

A következő példában csak a választest naplózása történik:

@Test public void whenLogResponse_thenOK () {when (). Get ("/ repos / eugenp / tutorials") .then (). Log (). Body (). StatusCode (200); }

Minta kimenet:

{"id": 9754983, "name": "tutorials", "full_name": "eugenp / tutorials", "private": false, "html_url": "//github.com/eugenp/tutorials", "leírás" : "A \" REST With Spring \ "kurzus:", "villa": hamis, "méret": 72371, "licenc": {"kulcs": "mit", "név": "MIT licenc", "spdx_id ":" MIT "," url ":" //api.github.com/licenses/mit "}, ...}

11.3. Napló válasz, ha állapot lép fel

Arra is lehetőségünk van, hogy csak akkor naplózzuk a választ, ha hiba történt, vagy az állapotkód megegyezik egy adott értékkel:

@Test public void whenLogResponseIfErrorOccuries_thenSuccess () {when (). Get ("/ users / eugenp") .then (). Log (). IfError (); mikor (). get ("/ users / eugenp"). akkor (). log (). ifStatusCodeIsEqualTo (500); mikor (). get ("/ users / eugenp"). akkor (). log (). ifStatusCodeMatches (nagyobbThan (200)); }

11.4. Napló, ha az érvényesítés nem sikerült

A kérést és a választ is csak akkor tudjuk naplózni, ha az érvényesítés nem sikerült:

@Test public void whenLogOnlyIfValidationFailed_thenSuccess () {when (). Get ("/ users / eugenp") .then (). Log (). IfValidationFails (). StatusCode (200); adott (). log (). ifValidationFails (). mikor (). get ("/ users / eugenp"). akkor (). statusCode (200); }

Ebben a példában azt akarjuk ellenőrizni, hogy az állapotkód 200. Csak akkor, ha ez nem sikerül, a kérés és a válasz naplózásra kerül.

12. Következtetés

Ebben az oktatóanyagban van feltárta a REST által biztosított keretet és megvizsgálta a legfontosabb jellemzőit, amelyekkel tesztelhetjük a RESTful szolgáltatásainkat és érvényesíthetjük válaszaikat.

Ezen példák és kódrészletek teljes megvalósítása megtalálható a REST által biztosított GitHub projektben.

Jackson 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