Tutorial REST Assured pentru testarea automatizării API (exemplu)

Ce este Fii sigur?

Fiți siguri vă permite să testați API-urile REST folosind biblioteci java și se integrează bine cu Maven. Are tehnici de potrivire foarte eficiente, așa că afirmarea rezultatelor așteptate este, de asemenea, destul de simplă. Rest Assured are metode pentru a prelua date din aproape fiecare parte a cererii și a răspunsului, indiferent cât de complexe sunt structurile JSON.

Pentru comunitatea de testare, API Automation Testing este încă nou și de nișă. Complexitățile JSON mențin testarea API-ului neexplorat. Dar asta nu îl face mai puțin important în procesul de testare. Cadrul Rest Assured.io a făcut-o foarte simplu folosind elementele de bază ale Java, ceea ce îl face un lucru foarte de dorit de învățat.

De ce ai nevoie de Rest-Assured?

Imaginați-vă că vă deschideți vizualizarea pe google map și căutați un loc în care doriți să mergeți, vedeți imediat restaurantele din apropiere, vedeți opțiuni pentru navetă; de la unii furnizori de turism de top și vedeți atât de multe opțiuni la îndemână. Știm cu toții că nu sunt produse Google, atunci cum reușește Google să le arate. Ei folosesc API-urile expuse ale acestor furnizori. Acum, dacă vi se cere să testați acest tip de configurare, chiar înainte ca interfața de utilizare să fie construită sau să fie în curs de dezvoltare, testarea API-urilor devine extrem de importantă, iar testarea lor în mod repetat, cu diferite combinații de date îl face un caz foarte potrivit pentru automatizare.

Mai devreme, folosim limbaje dinamice precum groovy, ruby ​​pentru a realiza acest lucru și a fost o provocare. Prin urmare, testarea API nu a fost explorată prin testarea funcțională.

Dar folosirea Rest Assured, testarea automatizării API-urilor, trimiterea de solicitări simple https cu personalizări ușor de utilizat este simplă dacă aveți un fundal de bază de java. Este necesar să înțelegem testarea API și testarea integrării, dar după această automatizare Rest Assured oferă o încredere foarte bună pentru backend, în timp ce testarea front-end se poate concentra doar pe UI și operațiunile de la partea clientului. Rest Assured este o sursă deschisă cu o mulțime de metode suplimentare și biblioteci adăugate a făcut-o o alegere excelentă pentru automatizarea API.

Cum să configurați Rest Assured.io cu Eclipse

Pasul 1) Instalați Java. Faceți referire la aceasta ghida

Pasul 2) Descărcați un IDE pentru a începe: eclipsă

Pasul 3) Instalați Maven și configurați-vă eclipsa. Consultați aici.

Configurare Fiți siguri

  1. Creați un proiect Maven în IDE-ul dvs. Folosim Intellij, dar veți obține o structură similară pe orice IDE pe care îl utilizați.
  2. Deschideți POM.xml
Structura proiectului
Structura proiectului

For Rest Assured.io: Pentru Java versiunea < 9 utilizatori:

Adăugați dependența de mai jos la POM.xml dvs.:

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

For Rest Assured.io : Pentru Java utilizatorii versiunea 9+:

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

Depanare:

În cazul în care vedeți erori și nu sunteți sigur dacă dependențele au fost descărcate bine,

  1. Efectuați o construcție Maven pentru a importa toate dependențele, din nou veți găsi ajutor pentru Maven configurat pe guru99.
  2. Totuși, vedeți erori, apoi faceți o curățare Maven urmată de o instalare Maven și ar trebui să fie construită fără erori.
  3. Puteți adăuga liniile de mai jos în clasa dvs. java și puteți vedea că nu există erori de compilare.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Primul script simplu Rest Assured

Sintaxă:

Sintaxa lui Rest Assured.io este cea mai frumoasă parte, deoarece este foarte asemănătoare BDD și de înțeles.

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

Explicaţie:

Cod Explicație
Dat() Cuvântul cheie „Dat”, vă permite să setați un fundal, aici, treceți anteturile solicitării, parametrii de interogare și cale, corpul, cookie-urile. Acest lucru este opțional dacă aceste elemente nu sunt necesare în cerere
Când() cuvântul cheie „când” marchează premisa scenariului dumneavoastră. De exemplu, „când” primești/postezi/pui ceva, fă altceva.
Metodă() Înlocuiți-l cu oricare dintre operațiunile CRUD (get/post/put/delete)
Apoi() Condițiile dvs. de afirmare și potrivire sunt aici

Acum că aveți configurația și câteva fundaluri pentru sintaxă, să creăm primul nostru test simplu. Este în regulă dacă până acum structura vi se pare nouă, pe măsură ce codificați mai departe interpretați fiecare linie, veți înțelege.

Ce vei aduce?

Deschideți browserul și apăsați – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Asigurați-vă că vedeți ceva ca mai jos.

Fii sigur script

În cazul în care primiți o eroare în browser când încercați să obțineți un răspuns la cerere,

  1. Vezi dacă ai folosit Https sau Http. Este posibil ca browserul dvs. să aibă setări pentru a nu deschide site-uri web nesigure.
  2. Vedeți dacă aveți vreun proxy sau firewall care vă împiedică browserul să deschidă site-uri web.

*notițe – nu ați folosit niciun antet aici, niciun corp și niciun cookie. Era o adresă URL și, de asemenea, obțineți conținut din API și nu publicați sau actualizați niciun conținut existent, așa că acesta îl face un apel GET. Rețineți acest lucru pentru a înțelege mai bine primul nostru test.

Obiectivul testului dvs.:

Scopul scriptului este de a imprima aceeași ieșire pe consola IDE ca ceea ce ați primit în browser prin Rest Assured.

Să codificăm acest lucru cu pașii de mai jos:

Obținerea răspunsului Body

Pas 1) Creați o clasă numită „myFirstRestAssuredClass”

Pas 2) Creați o metodă numită „getResponseBody”

Pas 3) Similar cu structura învățată mai devreme din date, când și apoi, tastați codul de mai jos

dat(). -> Nu sunt necesare antete, nici un parametru de interogare sau cale.

când(). -> Nicio setare de condiție specifică

obține('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> trebuie furnizat doar adresa URL

apoi(). -> Nu sunt necesare afirmații specifice

Buturuga(). all() -> Odată ce răspunsul este preluat, înregistrează răspunsul, anteturile, în esență tot ceea ce ți-a returnat cererea.

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

Acum observați că adresa URL utilizată este lungă și mai puțin lizibilă, dacă vă uitați cu atenție, veți observa că sunt folosiți 3 parametri de interogare care sunt

  1. Număr de înregistrare client
  2. Parolă
  3. Cont_Nr

Fiți siguri, ne ajută să trecem fiecare parte (interogare, cale, parametru antet) separat, făcând codul mai lizibil și mai ușor de întreținut. De asemenea, putem parametriza datele dintr-un fișier extern după cum este necesar.

Pentru a utiliza parametrul de interogare, ne întoarcem la definiția noastră a sintaxei și vedem că toate sunt transmise ca parte a datei.

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

**Rețineți că am folosit „corp” în loc de „toate”; aceasta ne ajută să extragem doar corpul răspunsului.

ieșire:

Obținerea codului de stare a răspunsului

Următoarea metodă pe care o scriem va fi să obținem codul de stare și, de asemenea, să punem o afirmație pentru a-l valida.

Pas 1) Creați o metodă numită getResponseStatus()

Pas 2) Utilizați aceeași structură de solicitare folosită mai sus. Copiați și lipiți-l.

Pas 3) În loc să îl înregistrăm, folosim metoda încorporată „getStatusCode” a Rest Assured pentru a prelua valoarea codului de stare

Pas 4) Pentru a afirma că codul dvs. de stare este 200, folosim cuvintele cheie – assertThat().statusCode(expectedCode)

**Notă – URL-ul este o variabilă folosită pentru simplitate. Adresa URL deține întreaga adresă URL a solicitării API

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

ieșire:

Nevoie de afaceri

Una dintre regulile de bază ale automatizării este că trebuie să punem puncte de control, astfel încât testul să continue numai dacă sunt îndeplinite toate condițiile cerute. În testarea API, cea mai simplă validare este verificarea dacă codul de stare al cererii este în format 2XX.

Codul complet, până acum:

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

}

*Notă:

  1. 200 este un răspuns de succes pentru acest scenariu. Uneori, este necesar ca cererea să eșueze, de asemenea, și apoi este posibil să utilizați 4XX sau 5XX. Încercați să schimbați codul de stare furnizând parametri nevalidi și verificați.
  2. Când afirmăm o condiție, nu va exista nicio imprimare pe consolă decât dacă există o eroare.

Script pentru a prelua diferite părți ale unui răspuns

Preluarea corpului răspunsului și a codului de stare a răspunsului este deja acoperită în segmentul de mai sus. Este demn de remarcat că pentru a prelua diferite părți ale răspunsului, cuvântul cheie „extract” este foarte important.

Antet

Rest Assured este un limbaj foarte simplu, iar preluarea antetelor este la fel de simplă. Numele metodei este headers(). Ca și înainte, vom crea o metodă independentă pentru a face același lucru.

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

Vă rugăm să rețineți că „given().when()” este omis aici, iar linia de cod începe de la get(), acest lucru se datorează faptului că nu există nicio precondiție sau verificare făcută aici pentru a atinge cererea și a obține un răspuns. În astfel de cazuri, este opțional să utilizați același lucru.

ieşire:

Nevoie de afaceri:

De multe ori, ar trebui să utilizați simbolul de autorizare sau un cookie de sesiune pentru cererea ulterioară și, de cele mai multe ori, aceste detalii sunt returnate ca antete ale răspunsului.

Timp De Raspuns

Pentru a obține timpul necesar pentru a prelua răspunsul de la backend sau alte sisteme din aval, Rest Assured oferă o metodă numită „timeIn” cu o unitate de timp adecvată pentru a obține timpul necesar pentru a returna răspunsul.

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

ieșire:

Nevoie de afaceri:

O caracteristică foarte importantă a testării API-urilor este timpul de răspuns al acestora, pentru a măsura performanța aplicației. Rețineți că timpul necesar pentru apelul dvs. poate dura mai mult sau mai puțin, în funcție de viteza dvs. de internet, de performanța API-ului la acel moment, de încărcarea serverului și de alți factori care influențează timpul.

Content-Type

Puteți obține tipul de conținut al răspunsului returnat folosind metoda este „contentType ()”.

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

producție

Nevoie de afaceri:

Uneori, obținerea tipului de conținut este esențială pentru a vă asigura că nu există lacune de securitate pentru orice amenințări cu origini încrucișate sau doar pentru a vă asigura că conținutul transmis este conform standardelor API.

Preluați elementul JSON individual

Din răspunsul dat, vi se cere să calculați suma totală, trebuie să obțineți fiecare sumă și să o însumați.

Pași:

Pas 1) Câmpul de sumă se află într-o matrice cu „extrase” cheie care se află la rândul său în lista cu „rezultat” cheie

Pas 2) Fii sigur, oferă un mecanism pentru a ajunge la valorile din API folosind „calea”

Pas 3) Calea pentru a ajunge la sume este „result.statements.AMOUNT”. Gândește-te la asta ca la Xpath în seleniu.

Pas 4) Preluați toate sumele dintr-o colecție, apoi faceți o buclă pentru toate valorile pentru a calcula suma

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

}

Notă: Deoarece valoarea cantității este în tipul de date șir, convertim în întreg și o folosim pentru însumare.

ieșire:

Rezumat

  • Rest Assured este un grup de biblioteci java care ne permite să automatizăm Testare API Rest
  • Fii sigur că este Java-bazate și cunoștințe de bază Java este suficient pentru a o învăța
  • Ajută la preluarea valorilor cererii și răspunsului din structuri JSON complicate
  • API cererea poate fi personalizată cu o varietate de antet, interogare, parametri de cale și orice sesiune sau cookie-uri care trebuie setate.
  • Ajută la stabilirea afirmațiilor și condițiilor.
  • În timp ce Rest Assured este foarte util atunci când răspunsul este de tip JSON, este posibil ca metodele sale să nu funcționeze perfect dacă tipul de conținut ID-ul HTML sau text simplu.

Citește mai mult Readmore