Útmutató a 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. 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ó