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.

Š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
- Izradite Maven projekt u svom IDE-u. Mi koristimo IntelliJ, ali sličnu strukturu dobit ćete u bilo kojem IDE-u koji koristite.
- Otvorite svoju POM.xml datoteku.
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:
- Izvršite Maven izgradnju za uvoz svih ovisnosti. Pomoć za postavljanje Mavena možete pronaći na Guru99.
- Ako se greške i dalje pojavljuju, pokrenite čišćenje Mavena, a zatim instalaciju Mavena. Izrada bi trebala završiti bez grešaka.
- 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 API odgovora snimljenog REST Assured-om
U slučaju da dobijete grešku u pregledniku kada pokušate dobiti odgovor na zahtjev:
- Provjerite jeste li koristili HTTPS ili HTTP. Vaš preglednik možda ima postavke koje blokiraju nesigurne web-lokacije.
- 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:
- Customer_ID
- Lozinka
- 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:
- 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.
- 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.
- 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.
- 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.
- 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.
- Eksternaliziraj testne podatke: Pohranite korisne terete u JSON datoteke ili koristite pružatelje podataka iz TestNGPodaci u kodu brzo zastarevaju.
- 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.
- 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.
- 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.


