REST Assured Vodič za testiranje API automatizacije (primjer)
Š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 prikaz Google karte i tražite mjesto na koje želite ići, odmah vidite obližnje restorane, vidite opcije za putovanje na posao; od nekih vodećih pružatelja usluga putovanja i pogledajte toliko opcija koje su vam na dohvat ruke. Svi znamo da oni nisu Googleovi proizvodi, kako onda Google to uspijeva prikazati. Oni koriste izložene API-je ovih pružatelja usluga. Sada, ako se od vas traži da testirate ovu vrstu postavki, čak i prije nego što je korisničko sučelje izgrađeno ili je u razvoju, testiranje API-ja postaje izuzetno važno, a njihovo opetovano testiranje, s različitim kombinacijama podataka, čini ga vrlo prikladnim slučajem za automatizaciju.
Ranije smo koristili dinamičke jezike kao što su groovy, ruby da bismo to postigli, a to je bilo izazovno. Stoga API testiranje nije istraženo funkcionalnim testiranjem.
Ali korištenjem Rest Assured, automatiziranog testiranja API-ja, slanje jednostavnih https zahtjeva s prilagodbama prilagođenim korisniku jednostavno je ako netko ima osnovno znanje o Javi. Potrebno je za razumijevanje testiranja API-ja i testiranja integracije, ali nakon te automatizacije, budite uvjereni, daje vrlo dobro povjerenje u pozadinsku verziju, dok se prednje testiranje može usredotočiti samo na korisničko sučelje i operacije na strani klijenta. Budite uvjereni da je open source s mnogo dodatnih metoda i biblioteka koje se dodaju što ga čini izvrsnim izborom za automatizaciju API-ja.
Kako postaviti Rest Assured.io s Eclipse
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
- Napravite Maven projekt u svom IDE-u. Koristimo Intellij, ali dobit ćete sličnu strukturu na svakom IDE-u koji možda koristite.
- Otvorite svoj POM.xml
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 uvjereni.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 dobro preuzete,
- Izvedite maven build za uvoz svih ovisnosti, ponovno ćete pronaći pomoć za Maven postavljen na guru99.
- Ipak, vidite pogreške, zatim napravite maven clean nakon čega slijedi maven instalacija, i trebao bi se izgraditi bez ikakvih pogrešaka.
- Možete dodati donje retke u svoju java klasu i vidjeti da nema pogrešaka kompilacije.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Prva jednostavna Rest Assured skripta
Sintaksa:
Sintaksa Rest Assured.io je najljepši dio, jer je vrlo BDD i razumljiva.
Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z"));
Objašnjenje:
Kodirati | Objašnjenje |
---|---|
Dano() | Ključna riječ 'Given' omogućuje postavljanje pozadine, ovdje prosljeđujete zaglavlja zahtjeva, parametre upita i putanje, tijelo, kolačiće. Ovo nije obavezno ako te stavke nisu potrebne u zahtjevu |
Kada() | ključna riječ 'when' označava premisu vašeg scenarija. Na primjer, 'kada' 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 tvrdnje i podudaranja idu ovdje |
Sada kada imate postavku i pozadinu sintakse, kreirajmo naš prvi jednostavan test. U redu je ako vam se dosad struktura čini novom, dok kodirate dalje tumačite 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.
U slučaju da dobijete pogrešku na pregledniku kada pokušate dobiti odgovor na zahtjev,
- Provjerite jeste li koristili Https ili Http. Vaš preglednik možda ima postavke da ne otvara nesigurna web-mjesta.
- Provjerite imate li neki proxy ili vatrozid koji vašem pregledniku blokira otvaranje web stranica.
*bilješke – ovdje niste upotrijebili nikakva zaglavlja, niti tijelo, niti kolačić. Bio je to URL, a također dobivate sadržaj iz API-ja i ne objavljujete niti ažurirate postojeći sadržaj, tako da to čini GET poziv. 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) Napravite metodu pod nazivom "getResponseBody"
Korak 3) Slično ranije naučenoj strukturi, kada i tada, upišite donji kod
dano(). -> Nisu potrebna zaglavlja, nema parametra upita ili putanje.
kada(). -> Nema posebnih postavki uvjeta
dobiti('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->potrebno je unijeti samo url
zatim(). -> Nisu potrebne posebne tvrdnje
log(). all() -> Nakon što se dohvati sav odgovor, zapišite odgovor, zaglavlja, 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 je upotrijebljeni URL dugačak i manje čitljiv, ako bolje pogledate, primijetit ćete da se koriste 3 parametra upita koji su
- Customer_ID
- Lozinka
- Broj računa
Budite sigurni, pomaže nam proslijediti svaki dio (upit, put, parametar zaglavlja) zasebno, čineći kod čitljivijim i lakšim za održavanje. Također, prema potrebi možemo parametrizirati podatke iz vanjske datoteke.
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"; ovo nam pomaže izdvojiti samo tijelo odgovora.
Izlaz:
Dobivanje koda statusa odgovora
Sljedeća metoda koju ćemo skriptirati bit će dobivanje statusnog koda i također postavljanje tvrdnje za provjeru iste.
Korak 1) Napravite metodu pod nazivom getResponseStatus()
Korak 2) Koristite istu strukturu zahtjeva korištenu gore. Kopirajte i zalijepite.
Korak 3) Umjesto bilježenja, koristimo ugrađenu metodu 'getStatusCode' programa Rest Assured za dohvaćanje vrijednosti koda statusa
Korak 4) Kako bismo potvrdili da je vaš statusni kod 200, koristimo ključne riječi – assertThat().statusCode(expectedCode)
**Napomena – URL je varijabla koja se koristi radi jednostavnosti. URL sadrži cijeli URL zahtjeva za 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); }
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 je potrebno da zahtjev također ne uspije, a tada 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
Dohvaćanje tijela odgovora i koda statusa odgovora već je pokriveno u gornjem segmentu. Vrijedno je napomenuti da je ključna riječ 'ekstrakt' vrlo važna za dohvaćanje različitih dijelova odgovora.
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 je 'given().when()' ovdje preskočen, a redak koda počinje s get(), to je zato što ovdje nema preduvjeta ili verifikacije da bi se pogodio zahtjev i dobio odgovor. U takvim slučajevima nije obavezno koristiti isti.
Izlaz:
Poslovne potrebe:
Dosta puta biste morali upotrijebiti autorizacijski token ili kolačić sesije za naknadni zahtjev, a uglavnom se ti detalji 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, za mjerenje performansi aplikacije. Imajte na umu da vrijeme potrebno za vaš poziv može trajati više ili manje, ovisno o brzini vašeg interneta, performansama API-ja u to vrijeme, opterećenju poslužitelja i drugim čimbenicima koji utječu na vrijeme.
Sadržaj-Tip
Možete dobiti vraćeni content-Type odgovora 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 vrste sadržaja ključno kako bi se osiguralo da nema sigurnosnih rupa za bilo kakve prijetnje drugog porijekla ili samo kako bi se osiguralo da je preneseni sadržaj u skladu sa standardima API-ja.
Dohvati pojedinačni JSON element
Iz danog odgovora od vas se traži da izračunate ukupni iznos, morate dohvatiti svaki iznos i zbrojiti ga.
Koraci:
Korak 1) Polje iznosa nalazi se unutar niza s ključnim "izjavama" koje je pak na popisu s ključem "rezultat"
Korak 2) Budite uvjereni, pruža mehanizam za postizanje vrijednosti u API-ju pomoću "puta"
Korak 3) Put do iznosa je “result.statements.AMOUNT”. Zamislite to kao Xpath u selenu.
Korak 4) Dohvatite sve iznose u zbirci, a zatim pokrenite petlju za sve vrijednosti da biste izračunali 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 tipa podataka niz, pretvaramo ga u cijeli broj i koristimo ga za zbrajanje.
Izlaz:
rezime
- Budite sigurni je grupa java biblioteka koje nam omogućuju automatizaciju Ostatak API testiranja
- Budite uvjereni da je Java-temeljen, i poznavanje jezg Java dovoljno za učenje
- Pomaže u dohvaćanju vrijednosti zahtjeva i odgovora iz kompliciranih JSON struktura
- The API zahtjev se može prilagoditi raznim zaglavljima, upitima, parametrima staze i bilo kojom sesijom ili kolačićima koje treba postaviti.
- Pomaže u postavljanju izjava i uvjeta za tvrdnje.
- Iako je Rest Assured vrlo koristan kada je odgovor tipa JSON, njegove metode možda neće raditi besprijekorno ako je ID vrste sadržaja HTML ili običan tekst.