REST Assured oktatóanyag az API automatizálási teszteléséhez (példa)

Mi az a nyugalom?

Biztos lehet benne lehetővé teszi a REST API-k tesztelését java könyvtárak használatával, és jól integrálható a Maven-nel. Nagyon hatékony párosítási technikákkal rendelkezik, így a várt eredmények érvényesítése is meglehetősen egyszerű. A Rest Assured rendelkezik a kérés és a válasz szinte minden részéből származó adatok lekérésére szolgáló módszerekkel, függetlenül attól, hogy milyen bonyolultak a JSON-struktúrák.

A tesztelő közösség számára az API Automation Testing még mindig új és rés. A JSON bonyolultsága miatt az API-tesztelés feltáratlan marad. Ez azonban nem teszi kevésbé fontossá a tesztelési folyamatban. A Rest Assured.io keretrendszer nagyon leegyszerűsítette az alapvető java alapjainak használatát, így nagyon kívánatos megtanulni.

Miért van szükség a nyugalomra?

Képzelje el, hogy megnyitja a Google térképnézetét, és megkeresi azt a helyet, ahová el szeretne menni, azonnal látni fogja a közeli éttermeket, az ingázási lehetőségeket; néhány vezető utazási szolgáltatótól, és megannyi lehetőséget kéznél találhat. Mindannyian tudjuk, hogy ezek nem Google-termékek, akkor hogyan tudja a Google megmutatni. Ezek a szolgáltatók nyilvános API-jait használják. Most, ha felkérnek egy ilyen beállítás tesztelésére, még a felhasználói felület felépítése vagy fejlesztése előtt, az API-k tesztelése rendkívül fontossá válik, és az ismételt tesztelésük különböző adatkombinációkkal nagyon alkalmas eset az automatizálásra.

Korábban dinamikus nyelveket, például groovy-t, rubint használtunk ennek eléréséhez, és ez nagy kihívást jelentett. Ezért az API-tesztelést nem vizsgálták funkcionális teszteléssel.

A Rest Assured használatával azonban az API-k automatizálási tesztelése egyszerű https-kérések küldése felhasználóbarát testreszabással egyszerű, ha valaki rendelkezik alapvető java-háttérrel. Szükséges az API-tesztelés és az integrációs tesztelés megértéséhez, de az automatizálás után a Rest Assured nagyon jó magabiztosságot ad a háttérben, míg a front-end tesztelés csak a felhasználói felületre és az ügyféloldali műveletekre összpontosíthat. A Rest Assured egy nyílt forráskódú, számos további módszerrel és könyvtárak hozzáadásával nagyszerű választássá tette az API automatizálásához.

A Rest Assured.io beállítása ezzel Eclipse

1. lépés) Telepítés Java. Lásd erre útmutató

2. lépés: Töltse le az IDE-t a kezdéshez: fogyatkozás

3. lépés) Telepítse a Maven-t, és állítsa be az eclipse-t. Utal itt .

Nyugodtan állítsa be

  1. Hozzon létre egy Maven Projectet az IDE-ben. Mi Intellij-t használunk, de hasonló struktúrát fog kapni bármely használt IDE-n.
  2. Nyissa meg a POM.xml fájlt
A projekt felépítése
A projekt felépítése

Megnyugodhat.io: For Java verzió < 9 felhasználó:

Adja hozzá az alábbi függőséget a POM.xml fájlhoz:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Megnyugodhat.io : Mert Java 9-es verziójú felhasználók:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Hibaelhárítás:

Ha hibákat lát, és nem biztos abban, hogy a függőségek megfelelően lettek-e letöltve,

  1. Hajtson végre egy maven buildet az összes függőség importálásához, és ismét talál segítséget a Maven beállításához a guru99-en.
  2. Ennek ellenére hibákat lát, majd végrehajt egy maven tisztítást, majd egy maven telepítést, és hiba nélkül kell felépülnie.
  3. Hozzáadhatja az alábbi sorokat a java osztályához, és nem látja, hogy nincsenek fordítási hibák.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Az első egyszerű Rest Assured szkript

Syntax:

A Rest Assured.io szintaxisa a legszebb rész, mivel nagyon BDD-szerű és érthető.

Given(). 
        param("x", "y"). 
        header("z", "w").
when().
Method().
Then(). 
        statusCode(XXX).
        body("x, ”y", equalTo("z"));

Magyarázat:

Kód Magyarázat
Adott() Az 'Adott' kulcsszó lehetővé teszi a háttér beállítását, itt átadja a kérés fejléceit, a lekérdezés és az elérési út paramétereit, törzsét, cookie-kat. Ez nem kötelező, ha ezekre az elemekre nincs szükség a kérésben
Amikor() A "when" kulcsszó a forgatókönyv alapját jelöli. Például: „amikor” kapsz/küldesz/tesz valamit, csinálj valami mást.
Módszer() Helyettesítse ezt a CRUD műveletek bármelyikével (get/post/put/delete)
Akkor() Az érvényesítési és egyezési feltételek itt találhatók

Most, hogy megvan a beállítások és a szintaxis háttere, készítsük el az első egyszerű tesztünket. Nem baj, ha eddig a struktúra újnak tűnik számodra, a kódolás során az egyes sorokat tovább értelmezed, rá fogsz jönni.

Mit fogsz hozni?

Nyissa meg a böngészőt, és nyomja meg a - https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Győződjön meg róla, hogy az alábbiak szerint lát valamit.

Nyugodtan forgatókönyv

Ha hibaüzenetet kap a böngésző, amikor megpróbál választ kapni a kérésre,

  1. Ellenőrizze, hogy használt-e HTTP-t vagy Http-t. Előfordulhat, hogy böngészőjében olyan beállítások vannak, amelyek nem nyitnak meg nem biztonságos webhelyeket.
  2. Nézze meg, van-e olyan proxyja vagy tűzfala, amely nem akadályozza-e a böngészőt a webhelyek megnyitásában.

*Megjegyzések – itt nem használt fejlécet, sem törzset, sem cookie-t. Ez egy URL volt, és Ön tartalmat is kap az API-tól, és nem tesz közzé vagy frissít semmilyen meglévő tartalmat, ezért ez GET-hívás lesz. Emlékezzen erre, hogy jobban megértse első tesztünket.

A teszted célja:

A szkript célja, hogy ugyanazt a kimenetet nyomtatja ki az IDE-konzolon, mint amit a böngészőben kapott a Nyugodtan megnyugodva.

Kódoljuk ezt az alábbi lépésekkel:

A válasz megszerzése Test

Step 1) Hozzon létre egy „myFirstRestAssuredClass” nevű osztályt

Step 2) Hozzon létre egy „getResponseBody” nevű metódust

Step 3) A korábban megismert szerkezethez hasonlóan, amikor és akkor írja be az alábbi kódot

adott(). -> Nincs szükség fejlécekre, nincs lekérdezés vagy elérési út paraméter.

amikor(). -> Nincs speciális feltétel beállítás

kap('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). ->csak az url-t kell megadni

akkor(). -> Nincs szükség konkrét állításokra

log(). all() -> Az összes válasz lekérése után naplózza a választ, a fejléceket, lényegében mindent, amit a kérés visszaküld Önnek.

public static void getResponseBody(){
   given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();
 
}

Most vegye észre, hogy a használt URL hosszú és kevésbé olvasható. Ha alaposan megnézi, észre fogja venni, hogy 3 lekérdezési paramétert használnak, amelyek

  1. Ügyfél-azonosító
  2. Jelszó
  3. Számlaszám

Biztos lehet benne, hogy minden részt (lekérdezést, elérési utat, fejlécparamétert) külön-külön továbbítunk, így a kód olvashatóbbá és könnyebben karbantarthatóvá válik. Ezenkívül igény szerint paraméterezhetjük az adatokat egy külső fájlból.

A query param használatához visszatérünk a szintaxis definíciójához, és azt látjuk, hogy mindegyik az adott részeként kerül átadásra.

public static void getResponseBody(){
 
   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**Ne feledje, hogy a „test” szót használtuk az „összes” helyett; ez segít abban, hogy a válasznak csak a testét vonjuk ki.

output:

A válasz állapotkódjának lekérése

A következő módszer, amelyet leírunk, az állapotkód beszerzése lesz, és egy állítást is teszünk annak érvényesítésére.

Step 1) Hozzon létre egy getResponseStatus() nevű metódust

Step 2) Használja ugyanazt a kérési struktúrát, mint fent. Másolja és illessze be.

Step 3) A naplózás helyett a Rest Assured beépített „getStatusCode” metódusát használjuk az állapotkód értékének lekéréséhez.

Step 4) Annak állítása érdekében, hogy állapotkódja 200, a következő kulcsszavakat használjuk: assertThat().statusCode(expectedCode)

**Megjegyzés – az URL az egyszerűség kedvéért használt változó. Az URL tartalmazza a teljes API-kérés URL-jét

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

output:

Üzleti igény

Az automatizálás egyik alapszabálya, hogy az ellenőrző pontokat úgy kell elhelyeznünk, hogy a teszt csak akkor menjen tovább, ha minden szükséges feltétel teljesül. Az API tesztelés során a legalapvetőbb ellenőrzés az, hogy ellenőrizzük, hogy a kérés állapotkódja 2XX formátumban van-e.

A teljes kód eddig:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

     getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

*Jegyzet:

  1. A 200 sikeres válasz erre a forgatókönyvre. Időnként a kérésnek is sikertelennek kell lennie, és akkor használhatja a 4XX-et vagy az 5XX-et. Próbálja meg megváltoztatni az állapotkódot érvénytelen paraméterek megadásával, és ellenőrizze.
  2. Amikor egy feltételt érvényesítünk, nem lesz nyomtatás a konzolon, hacsak nem történik hiba.

Szkript a válasz különböző részeinek lekéréséhez

A választörzs és a válasz állapotkódjának lekérése már szerepel a fenti szegmensben. Érdemes megjegyezni, hogy a válasz különböző részeinek lekéréséhez a „kivonat” kulcsszó nagyon fontos.

Fejléc

A Rest Assured egy nagyon egyszerű nyelv, és a fejlécek lekérése ugyanolyan egyszerű. A metódus neve headers(). Hasonlóan az előzőhöz, létrehozunk egy önálló módszert is ennek érdekében.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Kérjük, vegye figyelembe, hogy a 'given().when()' itt kimaradt, és a kódsor a get(-ből kezdődik, ez azért van, mert itt nincs előfeltétel vagy ellenőrzés a kérés eléréséhez és a válasz megérkezéséhez. Ilyen esetekben nem kötelező ugyanazt használni.

Kimenet:

Üzleti igény:

Sokszor az engedélyezési tokent vagy egy munkamenet cookie-t kell használnia a következő kéréshez, és többnyire ezek az adatok a válasz fejléceként jelennek meg.

Válaszidő

A válasz lekéréséhez szükséges idő eléréséhez a háttérrendszerből vagy más downstream rendszerekből a Rest Assured egy „timeIn” nevű metódust biztosít megfelelő timeUnit értékkel, amely lekéri a válasz visszaküldéséhez szükséges időt.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

output:

Üzleti igény:

Az API-k tesztelésének nagyon fontos jellemzője a válaszidejük, az alkalmazás teljesítményének mérése. Vegye figyelembe, hogy a hívás időtartama több vagy kevesebb időt vehet igénybe az internet sebességétől, az API akkori teljesítményétől, a szerver terhelésétől és egyéb, az időt befolyásoló tényezőktől függően.

Content-Type

A válasz content-Type-ját a „contentType ()” metódussal kaphatja meg.

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

teljesítmény

Üzleti igény:

Időnként a tartalomtípus beszerzése elengedhetetlen annak biztosításához, hogy ne legyenek biztonsági rések a több eredetű fenyegetéseknél, vagy csak annak biztosításához, hogy az átadott tartalom megfeleljen az API szabványainak.

Egyedi JSON-elem lekérése

A kapott válaszból ki kell számítani a végösszeget, minden összeget le kell kérni és összegezni.

Lépések:

Step 1) Az összeg mező egy kulcs „kimutatásokkal” rendelkező tömbön belül található, amely viszont az „eredmény” kulcsot tartalmazó listában található.

Step 2) Nyugodtan megnyugodhat, mechanizmust biztosít az API értékeinek eléréséhez az „útvonal” használatával

Step 3) Az összegek eléréséhez vezető út: „eredmény.kimutatások.ÖSSZEG”. Gondolj úgy, mint az Xpath a szelénben.

Step 4) Hozza le az összes összeget egy gyűjteményben, majd az összes értéket hurkolja ki az összeg kiszámításához

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

Megjegyzés: Mivel az összeg értéke string adattípusú, egész számmá konvertáljuk, és azt használjuk összegzésre.

output:

Összegzésként

  • A Rest Assured a java-könyvtárak egy csoportja, amely lehetővé teszi számunkra az automatizálást Rest API tesztelés
  • Nyugodj meg Java-alapú, és a mag ismerete Java elég a tanuláshoz
  • Segít lekérni a kérések és válaszok értékeit bonyolult JSON-struktúrákból
  • Az API a kérés testreszabható különféle fejlécekkel, lekérdezésekkel, elérési útparaméterekkel és bármilyen beállítandó munkamenettel vagy cookie-kkal.
  • Segít beállítani az állításokat és feltételeket.
  • Míg a Nyugodt megnyugvás nagyon hasznos, ha a válasz JSON típusú, előfordulhat, hogy módszerei nem működnek zökkenőmentesen, ha a tartalomtípus azonosítója HTML vagy egyszerű szöveg.

Foglald össze ezt a bejegyzést a következőképpen: