REST Assured Tutorial API automatiseerimise testimiseks (näide)

Mis on kindel olek?

Võite olla kindel võimaldab testida REST API-sid Java teekide abil ja integreerub hästi Maveniga. Sellel on väga tõhusad sobitamistehnikad, nii et oodatud tulemuste kinnitamine on samuti üsna lihtne. Rest Assuredil on meetodid andmete toomiseks peaaegu igast päringu ja vastuse osast, olenemata sellest, kui keerulised on JSON-struktuurid.

Testimiskogukonna jaoks on API automatiseerimise testimine endiselt uus ja nišš. JSON-i keerukus jätab API testimise uurimata. Kuid see ei muuda seda testimisprotsessis vähem oluliseks. Rest Assured.io raamistik on muutnud selle Java põhitõdede kasutamise väga lihtsaks, muutes selle õppimiseks väga soovitavaks.

Miks on vaja enesekindlat?

Kujutage ette, et avate Google'i kaardivaate ja otsite kohta, kuhu soovite minna, näete kohe lähedal asuvaid restorane, näete edasi-tagasi reisimise võimalusi; mõne juhtiva reisiteenuse pakkuja käest ja näete oma käeulatuses nii palju võimalusi. Me kõik teame, et need ei ole Google'i tooted, siis kuidas Google suudab seda näidata. Nad kasutavad nende pakkujate avatud API-sid. Nüüd, kui teil palutakse sellist seadistust testida, siis isegi enne kasutajaliidese ehitamist või arendamist, muutub API-de testimine äärmiselt oluliseks ja nende korduv testimine erinevate andmekombinatsioonidega muudab selle automatiseerimiseks väga sobivaks juhtumiks.

Varem kasutasime selle saavutamiseks dünaamilisi keeli, nagu groovy, ruby, ja see oli keeruline. Seetõttu ei uuritud API testimist funktsionaalse testimisega.

Kuid kasutades Rest Assured, API-de automatiseerimise testimist, on lihtsate https-päringute saatmine kasutajasõbralike kohandustega lihtne, kui teil on Java põhitaust. See on vajalik API testimise ja integratsiooni testimise mõistmiseks, kuid pärast seda automatiseerimine Rest Assured annab väga hea kindlustunde taustaprogrammis, samas kui esiotsa testimine võib keskenduda lihtsalt kasutajaliidesele ja kliendipoolsetele toimingutele. Rest Assured on avatud lähtekoodiga programm, millel on palju lisameetodeid ja lisatavad teegid on muutnud selle API automatiseerimiseks suurepäraseks valikuks.

Rest Assured.io seadistamine rakendusega Eclipse

Samm 1) Installige Java. Vaadake seda suunata

Samm 2) Alustamiseks laadige alla IDE: varjutus

Samm 3) Installige Maven ja seadistage oma eclipse. Viidata siin.

Seadistage, võite olla kindlad

  1. Looge oma IDE-s Maven Project. Me kasutame Intellit, kuid sarnase struktuuri saate igal kasutataval IDE-l.
  2. Avage oma POM.xml
Projekti ülesehitus
Projekti ülesehitus

Kindlatele.io: jaoks Java versioon < 9 kasutajat:

Lisage oma POM.xml-le allolev sõltuvus:

<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>

Kindlatele.io : jaoks Java versioon 9+ kasutajad:

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

Probleemid:

Kui näete tõrkeid ja pole kindel, kas sõltuvused laaditi korralikult alla,

  1. Kõigi sõltuvuste importimiseks tehke Maveni ehitamine. Jällegi leiate abi Maveni seadistamise kohta saidil guru99.
  2. Siiski näete vigu, seejärel tehke puhastus, millele järgneb maven installimine ja see peaks ehitama ilma vigadeta.
  3. Saate lisada oma java klassi allolevad read ja näha, et kompileerimisel pole vigu.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Esimene lihtne Rest Assured skript

süntaksit:

Rest Assured.io süntaks on kõige ilusam osa, kuna see on väga BDD-laadne ja arusaadav.

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

Selgitus:

kood Selgitus
Antud () Märksõna "Antud" võimaldab teil määrata tausta, siin edastate päringu päised, päringu ja tee parameetrid, keha, küpsised. See on valikuline, kui neid üksusi pole taotluses vaja
Millal () Märksõna 'when' tähistab teie stsenaariumi eeldust. Näiteks "kui" midagi saad/postitad/paned, siis tee midagi muud.
meetod () Asendage see mis tahes CRUD-operatsiooniga (get/post/put/delete)
Siis () Siia kuvatakse teie kinnitus- ja sobitustingimused

Nüüd, kui teil on süntaksi seadistus ja taust, loome oma esimese lihtsa testi. Pole hullu, kui struktuur tundub teile seni uus, kui kodeerite iga rida täiendavalt tõlgendades, saate sellest aru.

Mida sa tood?

Avage brauser ja klõpsake nuppu - https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Veenduge, et näete midagi, nagu allpool.

Kindel skript

Kui päringule vastust proovides kuvatakse brauseris tõrketeade,

  1. Vaadake, kas olete kasutanud HTTP-d või HTTP-d. Teie brauseris võivad olla sätted, et mitte avada ebaturvalisi veebisaite.
  2. Vaadake, kas mõni puhverserver või tulemüür ei takista teie brauseris veebisaite avamast.

*märkused – te ei kasutanud siin päiseid, sisu ega küpsist. See oli URL ja te saate sisu API-st ega postita ega värskenda olemasolevat sisu, nii et see muudab selle GET-kõne. Pidage seda meeles, et meie esimest testi paremini mõista.

Teie testi eesmärk:

Skripti eesmärk on printida teie IDE-konsoolile sama väljund, mille saite brauseris Rest Assured'i kaudu.

Kodeerime selle järgmiste sammudega:

Vastuse saamine Body

Step 1) Looge klass nimega "myFirstRestAssuredClass"

Step 2) Looge meetod nimega "getResponseBody"

Step 3) Sarnaselt varem õpitud struktuuriga antud millal ja siis tippige allolev kood

antud(). -> Päiseid pole vaja, päringu või tee parameetrit pole vaja.

millal (). -> Konkreetse tingimuse seadistus puudub

saada('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> tuleb esitada ainult URL

siis (). -> Konkreetseid väiteid pole vaja

log(). all() -> Kui kogu vastus on toodud, logi vastus, päised, sisuliselt kõik, mille päring teile tagastab.

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();
 
}

Nüüd pange tähele, et kasutatav URL on pikk ja vähem loetav. Kui vaatate tähelepanelikult, märkate, et kasutatakse 3 päringuparameetrit, mis on

  1. Kliendi_ID
  2. Parool
  3. Konto_nr

Olge kindlad, aitab meil iga osa (päring, tee, päiseparameeter) eraldi edastada, muutes koodi loetavamaks ja hõlpsamini hooldatavaks. Samuti saame vastavalt vajadusele parameeteerida välisest failist pärit andmeid.

Päringu parameetri kasutamiseks pöördume tagasi süntaksi definitsiooni juurde ja näeme, et kõik need edastatakse antud osana.

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();
}

**Pange tähele, et kasutasime sõna "kõik" asemel "keha"; see aitab meil välja võtta ainult vastuse keha.

Väljund:

Vastuse olekukoodi hankimine

Järgmine meetod, mille me skriptime, on olekukoodi hankimine ja ka kinnituse lisamine sama kinnitamiseks.

Step 1) Looge meetod nimega getResponseStatus()

Step 2) Kasutage sama päringu struktuuri, mida kasutati ülal. Kopeerige ja kleepige see.

Step 3) Logimise asemel kasutame olekukoodi väärtuse toomiseks Rest Assured'i sisseehitatud meetodit getStatusCode

Step 4) Kinnitamaks, et teie olekukood on 200, kasutame märksõnu – assertThat().statusCode(expectedCode)

**Märkus – URL on muutuja, mida kasutatakse lihtsuse huvides. URL sisaldab kogu API päringu URL-i

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);
}

Väljund:

Ärivajadus

Üks automatiseerimise põhireegleid on see, et peame panema kontrollpunktid nii, et test läheks edasi ainult siis, kui kõik nõutud tingimused on täidetud. API testimisel on kõige elementaarsem valideerimine kontrollida, kas päringu olekukood on 2XX-vormingus.

Täielik kood seni:

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);
}

}

* Märkus:

  1. 200 on selle stsenaariumi jaoks edukas vastus. Mõnikord on vaja, et taotlus ka ebaõnnestuks, ja siis võite kasutada 4XX või 5XX. Proovige muuta olekukoodi, sisestades kehtetud parameetrid ja kontrollige.
  2. Kui kinnitame tingimust, siis konsoolile ei prindita, välja arvatud juhul, kui tegemist on veaga.

Skript vastuse erinevate osade toomiseks

Vastuse keha ja vastuse olekukoodi toomine on juba ülaltoodud segmendis käsitletud. Väärib märkimist, et vastuse erinevate osade toomiseks on märksõna „väljavõte” väga oluline.

Päise

Rest Assured on väga lihtne keel ja päiste toomine on sama lihtne. Meetodi nimi on headers(). Nagu varemgi, loome sama tegemiseks eraldiseisva meetodi.

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

Pange tähele, et 'given().when()' jäetakse siin vahele ja koodirida algab get(ist), selle põhjuseks on asjaolu, et siin pole päringu tabamiseks ja vastuse saamiseks eeltingimust ega kinnitust. Sellistel juhtudel on sama kasutamine valikuline.

Väljund:

Ärivajadus:

Üsna mitu korda oleks vaja järgneva päringu jaoks kasutada autoriseerimisluba või seansiküpsist ning enamasti tagastatakse need andmed vastuse päistena.

Response Time

Taustasüsteemist või muudest allavoolusüsteemidest vastuse toomiseks vajaliku aja saamiseks pakub Rest Assured meetodi nimega „timeIn” koos sobiva ajaühikuga, et saada vastuse tagastamiseks kuluv aeg.

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

Väljund:

Ärivajadus:

API-de testimise väga oluline funktsioon on nende reaktsiooniaeg, et mõõta rakenduse jõudlust. Pange tähele, et teie kõnele kuluv aeg võib võtta rohkem või vähem aega olenevalt teie Interneti-kiirusest, API jõudlusest sel ajal, serveri koormusest ja muudest aega mõjutavatest teguritest.

Sisu tüüp

Vastuse sisutüübi saate tagastada, kasutades meetodit "contentType ()".

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

Väljund

Ärivajadus:

Mõnikord on sisutüübi hankimine hädavajalik tagamaks, et ristpäritolu ohtude puhul poleks turvalünki, või lihtsalt tagamaks, et edastatud sisu vastab API standarditele.

Individuaalse JSON-elemendi toomine

Antud vastusest palutakse välja arvutada kogusumma, iga summa tuleb välja tuua ja summeerida.

Sammud:

Step 1) Summa väli on massiivi sees võtmega "laused", mis on omakorda loendis võtmega "tulemus"

Step 2) Võite olla kindlad, pakub mehhanismi API väärtusteni jõudmiseks tee abil

Step 3) Summadeni jõudmise tee on „tulemused.väljavõtted.SUMMA”. Mõelge sellele nagu Xpath seleenis.

Step 4) Tooge kõik kogus olevad summad ja seejärel esitage summa arvutamiseks kõik väärtused

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);

}

Märkus. Kuna summa väärtus on stringi andmetüübis, teisendame täisarvudeks ja kasutame seda summeerimiseks.

Väljund:

kokkuvõte

  • Rest Assured on Java-teekide rühm, mis võimaldab meil automatiseerida Rest API testimine
  • Võite olla kindel Java-põhine ja põhiteadmised Java selle õppimiseks piisab
  • See aitab hankida keerukatest JSON-struktuuridest päringu ja vastuse väärtusi
  • . API päringut saab kohandada mitmesuguste päise, päringu, teeparameetrite ja mis tahes seansi või seadistatavate küpsistega.
  • See aitab kehtestada väiteid ja tingimusi.
  • Kuigi funktsioon Rest Assured on väga kasulik, kui vastus on JSON-tüüpi, ei pruugi selle meetodid sujuvalt töötada, kui sisutüübi ID on HTML või lihttekst.