Vodič za testiranje REST Assured API-ja

⚡ Pametni sažetak

REST Assured se etablira kao Javabiblioteka otvorenog koda temeljena na -based koja pojednostavljuje automatizirano testiranje REST API-ja. Okvir omogućuje inženjerima kvalitete da provjere složene JSON odgovore, zaglavlja, statusne kodove i vremena odziva koristeći čistu sintaksu u BDD stilu s besprijekornom integracijom s Mavenom.

  • Foundation Postaviti: konfigurirati Java, Eclipsei Maven ovisnosti prije pisanja vašeg prvog REST Assured testnog skripta.
  • 📐 Savladavanje sintakse: Primijenite obrazac Dano-Kada-Zatim kako biste izrazili API zahtjeve u čitljivom, poslovno prilagođenom formatu.
  • 🔍 Granularna validacija: Extractijelo odgovora, statusni kodovi, zaglavlja, vrsta sadržaja i vrijeme putem fluentnog lanca.
  • 🧩 Navigacija putanjom: Prolazak kroz ugniježđene JSON vrijednosti korištenjem točkaste notacije slično XPath-u u Selenium za precizne tvrdnje.
  • 🛡️ CI/CD integracija: Kombinirajte REST Assured s TestNG or JUnit za izravnu ugradnju API provjera u automatizirane cjevovode izgradnje.

REST Assured Vodič

Što je Rest Assured?

Budite uvjereni omogućuje testiranje REST API-ja pomoću java biblioteka i dobro se integrira s Mavenom. Ima vrlo učinkovite tehnike usklađivanja, tako da je tvrdnja o vašim očekivanim rezultatima također prilično jednostavna. Budite uvjereni da ima metode za dohvaćanje podataka iz gotovo svakog dijela zahtjeva i odgovora bez obzira na to koliko su JSON strukture složene.

Za zajednicu testiranja API automatizirano testiranje još je uvijek novo i nišno. Složenost JSON-a čini API testiranje neistraženim. Ali to ga ne čini manje važnim u procesu testiranja. Budite uvjereni. Io okvir ga je učinio vrlo jednostavnim koristeći osnovne osnove Jave, što ga čini vrlo poželjnom stvari za naučiti.

Zašto trebate Rest-Assured?

Zamislite da otvorite svoj Google Prikazujte karte i tražite mjesto koje želite posjetiti. Odmah vidite obližnje restorane, opcije putovanja na posao od vodećih pružatelja putničkih usluga i mnoge druge mogućnosti nadohvat ruke. Svi znamo da to nisu... Google proizvode, pa kako to Google uspijeva li ih prikazati? Koristi izložene API-je ovih pružatelja usluga. Sada, ako se od vas zatraži da testirate ovu vrstu postavke, čak i prije nego što je korisničko sučelje izgrađeno ili je u razvoju, testiranje API-ja postaje izuzetno važno. Njihovo ponovljeno testiranje s različitim kombinacijama podataka čini ga vrlo prikladnim slučajem za automatizaciju.

Ranije su timovi koristili dinamičke jezike kao što su Groovy i Ruby kako bi se to postiglo, i bilo je izazovno. Stoga funkcionalni testeri nisu široko istraživali API testiranje.

Međutim, uz Rest Assured, automatizirano testiranje API-ja i slanje jednostavnih HTTPS zahtjeva s korisnički prilagođenim prilagodbama postaje jednostavno ako netko ima osnovno znanje. JavaKoristan je za razumijevanje API testiranja i integracijskog testiranja. Rest Assured daje snažno povjerenje u backend, dok se front-end testeri mogu usredotočiti na korisničko sučelje i operacije na strani klijenta. Rest Assured je otvorenog koda, a stalno dodavanje metoda i biblioteka učinilo ga je odličnim izborom za automatizaciju API-ja.

REST Assured vs. Postman: Ključne razlike

I OSTALO UVJERENO i Postman validiraju REST API-je, no svaki odgovara različitoj fazi životnog ciklusa testiranja. Odabir pravog alata ovisi o vještinama vašeg tima, opsegu projekta i potrebama integracije.

Aspekt BUDITE UVJERENI Postman
Tip Java biblioteka za automatizaciju temeljenu na kodu API klijent temeljen na grafičkom korisničkom sučelju s podrškom za skriptiranje
Najbolji slučaj upotrebe Cjevovodi za kontinuiranu integraciju i regresijski paketi Ručno istraživanje i brze API provjere
Zahtjev za vještinom srž Java potrebno znanje Minimalno kodiranje; upotrebe JavaIsječci skripte
Izvještavanje Integrira se s TestNG, JUniti Allure Ugrađeni sažeci pokretanja putem Newman CLI-ja

Mnogi timovi koriste Postman za rane prototipeping i prebacite se na REST Assured za automatiziranu regresiju nakon što API završitract se stabilizira.

Kako postaviti Rest Assured.io s Eclipse

Postavljanje REST Assured sustava uključuje tri ključne ovisnosti: Java, IDE i Maven. Slijedite dolje navedene korake kako biste kasnije izbjegli pogreške pri izradi.

Korak 1) Instalirajte Java. Pogledajte ovo voditi

Korak 2) Preuzmite IDE za početak: pomračenje

Korak 3) Instalirajte Maven i postavite svoj eclipse. uputiti ovdje.

Postavljanje Budite sigurni

  1. Izradite Maven projekt u svom IDE-u. Mi koristimo IntelliJ, ali sličnu strukturu dobit ćete u bilo kojem IDE-u koji koristite.
  2. Otvorite svoju POM.xml datoteku.

Struktura projekta za REST Assured Maven postavku

Struktura projekta za REST Assured Maven radni prostor

Budite sigurni.io: ​​Za Java verzija < 9 korisnika:

Dodajte ovisnost u nastavku u svoj POM.xml:

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

Budite sigurni.io: ​​Za Java Korisnici verzije 9+:

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

Rješavanje problema:

U slučaju da vidite pogreške i niste sigurni jesu li ovisnosti ispravno preuzete, slijedite ove korake:

  1. Izvršite Maven izgradnju za uvoz svih ovisnosti. Pomoć za postavljanje Mavena možete pronaći na Guru99.
  2. Ako se greške i dalje pojavljuju, pokrenite čišćenje Mavena, a zatim instalaciju Mavena. Izrada bi trebala završiti bez grešaka.
  3. Dodajte dolje navedene uvoze u svoj Java razred i potvrdite da nema grešaka pri kompajliranju.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Prva jednostavna Rest Assured skripta

S postavljenim ovisnostima, sada možete napisati svoj prvi skript. Okvir slijedi stil razvoja vođenog ponašanjem (BDD) koji se čita gotovo kao engleski.

Sintaksa:

Sintaksa Rest Assured.io je najčitljiviji dio okvira, jer je vrlo slična BDD-u i razumljiva.

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

Objašnjenje:

Code Objašnjenje
Dano() Ključna riječ 'Given' omogućuje vam postavljanje pozadine. Ovdje prosljeđujete zaglavlja zahtjeva, parametre upita i putanje, tijelo i kolačiće. Ovo je opcionalno ako te stavke nisu potrebne u zahtjevu.
Kada() Ključna riječ 'when' označava premisu vašeg scenarija. Na primjer, 'when' dobijete/objavite/stavite nešto, učinite nešto drugo.
Metoda() Zamijenite ovo bilo kojom od CRUD operacija (get/post/put/delete).
Zatim() Vaši uvjeti assert i matcher idu ovdje.

Sada kada imate postavke i neke osnove sintakse, stvorimo naš prvi jednostavan test. U redu je ako vam se struktura čini novom, kako budete dalje kodirali i interpretirali svaki redak, shvatit ćete je.

Što ćeš donijeti?

Otvorite preglednik i pritisnite – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Provjerite vidite li nešto kao ispod.

Primjer odgovora API-ja za Rest Assured script

Primjer API odgovora snimljenog REST Assured-om

U slučaju da dobijete grešku u pregledniku kada pokušate dobiti odgovor na zahtjev:

  1. Provjerite jeste li koristili HTTPS ili HTTP. Vaš preglednik možda ima postavke koje blokiraju nesigurne web-lokacije.
  2. Provjerite blokira li neki proxy ili vatrozid vašem pregledniku otvaranje web stranice.

*bilješke – ovdje niste koristili nikakva zaglavlja, tijelo poruke niti kolačić. Bio je to URL, a vi dobivate sadržaj iz API-ja umjesto da objavljujete ili ažurirate postojeći sadržaj. To ga čini GET pozivom. Zapamtite ovo kako biste bolje razumjeli naš prvi test.

Cilj vašeg testa:

Cilj skripte je ispisati isti izlaz na vašoj IDE konzoli kao što ste primili na pregledniku putem Rest Assured.

Kodirajmo ovo sljedećim koracima:

Dobivanje odgovora Tijelo

Korak 1) Napravite klasu pod nazivom „myFirstRestAssuredClass“.

Korak 2) Kreirajte metodu pod nazivom „getResponseBody“.

Korak 3) Slično strukturi koju smo ranije naučili od danih, kada i zatim, upišite sljedeći kod:

dano(). -> Nisu potrebna zaglavlja, nema parametra upita ili putanje.

kada(). -> Nema specifičnog uvjeta.

dobiti('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> samo URL potrebno je osigurati.

then(). -> Nisu potrebne posebne tvrdnje.

log().all() -> Nakon što se dohvate svi odgovori, zabilježite odgovor, zaglavlja i u biti sve što vam zahtjev vraća.

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

}

Sada primijetite da URL korišteno je dugo i manje čitljivo. Pažljivim pogledom primijetit ćete da se koriste 3 parametra upita:

  1. Customer_ID
  2. Lozinka
  3. Broj računa

Budite sigurni da nam pomaže da svaki dio (upit, putanja, parametar zaglavlja) proslijedimo zasebno, što kod čini čitljivijim i lakšim za održavanje. Također, možemo parametrizirati podatke iz vanjske datoteke po potrebi.

Za korištenje parametra upita vraćamo se našoj definiciji sintakse i vidimo da se svi oni prosljeđuju kao dio zadanog.

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

**Imajte na umu da smo koristili "tijelo" umjesto "sve"; to nam pomaže u objašnjavanju**tracsamo tijelo odgovora.

Izlaz:

Dobivanje koda statusa odgovora

Sljedeća metoda koju ćemo skriptirati je dobivanje statusnog koda i postavljanje tvrdnje za njegovu validaciju.

Korak 1) Kreirajte metodu pod nazivom getResponseStatus().

Korak 2) Koristite istu strukturu zahtjeva korištenu gore. Kopirajte i zalijepite.

Korak 3) Umjesto zapisivanja, koristite 'getStatus'Code'ugrađena metoda Rest Assured za dohvaćanje vrijednosti statusnog koda'.

Korak 4) Da biste potvrdili da je vaš statusni kod 200, koristite ključne riječi – assertThat().statusCode(očekivanoCode).

**Napomena –** URL je varijabla koja se koristi radi jednostavnosti. URL sadrži cijeli API zahtjev URL.

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

Izlaz:

Poslovna potreba

Jedno od osnovnih pravila automatizacije je da moramo postaviti kontrolne točke tako da se test nastavi samo ako su zadovoljeni svi potrebni uvjeti. U API testiranju, najosnovnija provjera valjanosti je provjera je li statusni kod zahtjeva u formatu 2XX.

Kompletan kod, do sada:

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

}

* Napomena:

  1. 200 je uspješan odgovor za ovaj scenarij. Ponekad će vam možda trebati da zahtjev ne uspije, u kojem slučaju možete koristiti 4XX ili 5XX. Pokušajte promijeniti statusni kod unosom nevažećih parametara i provjerite.
  2. Kada potvrdimo uvjet, neće biti ispisa na konzoli osim ako postoji greška.

Skripta za dohvaćanje različitih dijelova odgovora

Osim tijela odgovora i statusnog koda, REST Assured također otkriva zaglavlja, vrijeme odgovora i vrstu sadržaja putem ulančanog izraza.tractor metode. Ključna riječ 'extract' je ključan za dohvaćanje ovih specifičnih dijelova.

Kombajn

Budite uvjereni da je vrlo jednostavan jezik, a dohvaćanje zaglavlja jednako je jednostavno. Naziv metode je headers(). Kao i prije, stvorit ćemo samostalnu metodu koja će učiniti isto.

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

Imajte na umu da se 'given().when()' ovdje preskače, a redak koda počinje od get(). To je zato što ne postoji preduvjet ili provjera prije obrade zahtjeva i dobivanja odgovora. U takvim slučajevima, korištenje istog nije obavezno.

Izlaz:

Poslovne potrebe:

Često biste za sljedeći zahtjev trebali koristiti autorizacijski token ili kolačić sesije, a ti se podaci uglavnom vraćaju kao zaglavlja odgovora.

Vrijeme odziva

Kako biste dobili vrijeme potrebno za dohvaćanje odgovora od pozadine ili drugih nizvodnih sustava, Rest Assured nudi metodu pod nazivom 'timeIn' s prikladnom timeUnit za dobivanje vremena potrebnog za vraćanje odgovora.

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

Izlaz:

Poslovne potrebe:

Vrlo važna značajka testiranja API-ja je njihovo vrijeme odziva, koje mjeri performanse aplikacije. Vrijeme potrebno za vaš poziv može trajati više ili manje ovisno o brzini vaše internetske veze, performansama API-ja u tom trenutku, opterećenju poslužitelja i drugim čimbenicima koji utječu na vrijeme.

Sadržaj-Tip

Tip sadržaja vraćenog odgovora možete dobiti pomoću metode „contentType()“.

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

Izlaz

Poslovne potrebe:

Ponekad je dobivanje tipa sadržaja ključno kako bi se osiguralo da nema sigurnosnih propusta za bilo kakve prijetnje iz različitih izvora i kako bi se potvrdilo da je proslijeđeni sadržaj u skladu sa standardima API-ja.

Dohvati pojedinačni JSON element

Iz zadanog odgovora od vas se traži da izračunate ukupan iznos. Morate dohvatiti svaki iznos i zbrojiti ga.

Koraci:

Korak 1) Polje iznosa nalazi se unutar niza s ključem „izjave“, koji se pak nalazi na listi s ključem „rezultat“.

Korak 2) Rest Assured pruža mehanizam za dosezanje vrijednosti u API-ju pomoću "puta".

Korak 3) Put do iznosa je "result.statements.AMOUNT". Zamislite to kao XPath u Selenium.

Korak 4) Dohvati sve iznose u kolekciji, a zatim prođi kroz sve vrijednosti kako bi izračunao zbroj.

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

}

Napomena: Budući da je vrijednost iznosa niz podataka, za zbrajanje je pretvaramo u cijeli broj.

Izlaz:

Najbolje prakse za REST Assured automatizaciju testiranja

Nakon što shvatite osnove, primjena discipliniranih obrazaca održava vaš paket pouzdanim kako API površina raste. Prakse u nastavku pomažu timovima da izbjegnu nestabilne testove i opterećenje održavanjem.

  1. Centralizirajte bazu URL: Pohranite osnovni URI i tokene za autentifikaciju u jednu konfiguracijsku klasu ili datoteku svojstava. Time se izbjegava dupliciranje i pojednostavljuje promjena okruženja.
  2. Koristite specifikacije zahtjeva i odgovora: Izradite objekte RequestSpecBuilder i ResponseSpecBuilder za višekratnu upotrebu. Oni smanjuju broj standardnih stavki kada mnogi testovi dijele zajedničke zaglavlja ili tvrdnje.
  3. Validacija JSON sheme: Kombinirajte REST Assured s modulom json-schema-validator za potvrdutracIntegritet t. Shema provjerava promjene koje uzrokuju probleme prije nego što dođu do nizvodnih potrošača.
  4. Eksternaliziraj testne podatke: Pohranite korisne terete u JSON datoteke ili koristite pružatelje podataka iz TestNGPodaci u kodu brzo zastarevaju.
  5. Izvršite neovisne testove: Svaki test treba postavljati i rastavljati vlastite podatke. Paketi ovisni o narudžbi nepredvidivo ne uspijevaju u paralelnim CI izvršavanjima.
  6. Selektivno snimanje zapisnika: Koristite log().ifError() u stabilnim paketima i log().all() tijekom otklanjanja pogrešaka. Detaljni zapisnici usporavaju CI cjevovode i prikrivaju stvarne probleme.
  7. Priključite u CI/CD: Pokrenite REST Assured pakete putem Maven Surefirea ili Failsafea u Jenkins, GitHub Actions ili GitLab. Pokrenite smoke checks na svakom commitu i potpunu regresiju preko noći.

Rano usvajanje ovih navika pretvara automatizaciju API-ja u dugoročnu prednost, a ne u krhko usko grlo.

Pitanja i odgovori

Da. Moderni AI asistenti poput ChatGPT-a i GitHub Copilota mogu izraditi REST Assured testne okvire iz API specifikacija. Inženjeri bi i dalje trebali pregledati generirani kod za tvrdnje, rukovanje podacima i rubne slučajeve prije spajanja.

Alati vođeni umjetnom inteligencijom analiziraju obrasce odgovora i predlažu lokatore ili tvrdnje za samoobnavljanje. Oni označavaju pomicanje sheme, preporučuju refaktoriranje i automatski ažuriraju testne podatke, što smanjuje ručno održavanje kada se API-ji često razvijaju.

REST Assured je Java biblioteka izgrađena za automatizaciju vođenu kodom u CI cjevovodima. Postman je GUI klijent za ručno istraživanje i brzo skriptiranje. Timovi često kombiniraju oboje tijekom životnog ciklusa testiranja.

REST Assured je optimiziran za REST i JSON. Može slati sirove XML podatke za SOAP, ali i namjenski alati poput SoapUI nude bogatiju podršku za WSDL parsiranje i SOAP-specifične tvrdnje.

REST Assured se prirodno slaže s TestNG i JUnit za tvrdnje, životne cikluse i izvještavanje. Allure, Extent Reports i Maven Surefire dodaju vizualizaciju i CI integraciju.

Sažmite ovu objavu uz: