REST Assured Tutorial til API-automatiseringstest (eksempel)
Hvad er rolig?
Stol trygt på giver dig mulighed for at teste REST API'er ved hjælp af java-biblioteker og integrerer godt med Maven. Det har meget effektive matchningsteknikker, så det er også ret ligetil at hævde dine forventede resultater. Rest Assured har metoder til at hente data fra næsten alle dele af anmodningen og svaret, uanset hvor komplekse JSON-strukturerne er.
For testfællesskabet er API Automation Testing stadig nyt og niche. JSON-kompleksiteten holder API-test uudforsket. Men det gør det ikke mindre vigtigt i testprocessen. Rest Assured.io frameworket har gjort det meget enkelt ved at bruge grundlæggende java-grundlag, hvilket gør det til en meget ønskværdig ting at lære.
Hvorfor skal du være rolig?
Forestil dig, at du åbner din Google-kortvisning og leder efter et sted, du vil hen, du ser straks restauranter i nærheden, du ser muligheder for pendling; fra nogle førende rejseudbydere, og se så mange muligheder lige ved hånden. Vi ved alle, at de ikke er Google-produkter, så hvordan formår Google at vise det. De bruger disse udbyderes eksponerede API'er. Nu, hvis du bliver bedt om at teste denne form for opsætning, selv før brugergrænsefladen er bygget eller er under udvikling, bliver test af API'er ekstremt vigtigt, og testning af dem gentagne gange med forskellige datakombinationer gør det til en meget velegnet sag til automatisering.
Tidligere brugte vi dynamiske sprog som groovy, ruby for at opnå dette, og det var udfordrende. Derfor blev API-testning ikke udforsket ved funktionel test.
Men ved at bruge Rest Assured, automatiseringstest af API'er, er det nemt at sende simple https-anmodninger med brugervenlige tilpasninger, hvis man har en grundlæggende java-baggrund. Det er nødvendigt for at forstå API-testning og integrationstestning, men post, at automatisering Rest Assured giver meget god tillid på backend, mens front-end-test kun kan fokusere på UI og klient-side operationer. Rest Assured er en open source med en masse ekstra metoder og biblioteker, der er tilføjet, har gjort det til et godt valg til API-automatisering.
Sådan konfigurerer du Rest Assured.io med Eclipse
Trin 1) Installer Java. Henvis til dette vejlede
Trin 2) Download en IDE for at begynde: Eclipse
Trin 3) Installer Maven og opsæt din formørkelse. Henvis link..
Opsætning Vær sikker
- Opret et Maven-projekt i din IDE. Vi bruger Intellij, men du vil få en lignende struktur på enhver IDE, du måtte bruge.
- Åbn din POM.xml
For Rest Assured.io: For Java version < 9 brugere:
Tilføj nedenstående afhængighed til din 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>
For Rest Assured.io : For Java version 9+ brugere:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Fejlfinding:
I tilfælde af at du ser fejl og ikke er sikker på, om afhængighederne blev downloadet godt,
- Udfør en Maven-build for at importere alle afhængigheder, igen vil du finde hjælp til Maven sat op på guru99.
- Alligevel ser du fejl, så lav en maven-rensning efterfulgt af en maven-installation, og den skulle bygge uden fejl.
- Du kan tilføje nedenstående linjer i din java-klasse og se, at der ikke er nogen kompileringsfejl.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Første simple Vær sikker script
Syntaks:
Syntaksen i Rest Assured.io er den smukkeste del, da den er meget BDD-agtig og forståelig.
Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z"));
Forklaring:
Kode | Forklaring |
---|---|
Givet() | 'Given' søgeord, lader dig indstille en baggrund, her sender du anmodningsheaderne, forespørgsels- og stiparam, body, cookies. Dette er valgfrit, hvis disse elementer ikke er nødvendige i anmodningen |
Hvornår() | 'når' søgeord markerer præmissen for dit scenarie. For eksempel 'når' du får/poster/sætter noget, så gør noget andet. |
Metode() | Erstat dette med en af CRUD-operationerne (get/post/put/delete) |
Derefter() | Dine assert og matcher betingelser går her |
Nu hvor du har opsætningen og lidt baggrund for syntaksen, lad os lave vores første simple test. Det er okay, hvis strukturen indtil videre virker ny for dig, når du koder yderligere fortolke hver linje, vil du få styr på det.
Hvad vil du hente?
Åbn din browser og tryk - https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
. Sørg for, at du ser noget som nedenfor.
Hvis du får en fejl i browseren, når du forsøger at få svar på anmodningen,
- Se om du har brugt Https eller Http. Din browser har muligvis indstillinger til ikke at åbne usikre websteder.
- Se, om du har en proxy eller firewall, der blokerer din browser fra at åbne websteder.
*Bemærk – du har ikke brugt nogen overskrifter her, ingen brødtekst og ingen cookie. Det var en URL, og du får også indhold fra API'en og sender eller opdaterer ikke noget eksisterende indhold, så det gør det til et GET-kald. Husk dette for at forstå vores første test bedre.
Formålet med din test:
Målet med scriptet er at udskrive det samme output på din IDE-konsol, som det du modtog på browseren gennem Rest Assured.
Lad os kode dette med nedenstående trin:
Får svaret Body
Trin 1) Opret en klasse med navnet "myFirstRestAssuredClass"
Trin 2) Opret en metode kaldet "getResponseBody"
Trin 3) Svarende til strukturen lært tidligere af givet, hvornår og derefter, skriv nedenstående kode
givet(). -> Ingen headers påkrævet, ingen forespørgsel eller stiparam.
hvornår(). -> Ingen specifik tilstandsopsætning
få('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->kun url'en skal angives
derefter(). -> Der kræves ingen specifikke påstande
log(). all() -> Når alt svaret er hentet, log svar, overskrifter, i det væsentlige alt, hvad anmodningen returnerer til dig.
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(); }
Bemærk nu, at den anvendte URL er lang og mindre læsbar, hvis du ser godt efter, vil du bemærke, at der bliver brugt 3 forespørgselsparametre, som er
- Kunde ID
- Adgangskode
- Konto_nr
Vær sikker, hjælper os med at videregive hver del (forespørgsel, sti, headerparam) separat, hvilket gør koden mere læsbar og nem at vedligeholde. Vi kan også parametrere data fra en ekstern fil efter behov.
For at bruge forespørgselsparam går vi tilbage til vores definition af syntaksen og ser, at dem alle videregives som en del af given.
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(); }
**Bemærk, at vi brugte "body" i stedet for "alle"; dette hjælper os til kun at udtrække kroppen af svaret.
Output:
Henter svarstatuskoden
Den næste metode, vi scripter, vil være at få statuskoden og også sætte en påstand for at validere den samme.
Trin 1) Opret en metode kaldet getResponseStatus()
Trin 2) Brug den samme anmodningsstruktur som ovenfor. Kopiér og indsæt det.
Trin 3) I stedet for at logge det, bruger vi den 'getStatusCode' indbyggede metode af Rest Assured til at hente statuskodeværdien
Trin 4) For at fastslå, at din statuskode er 200, bruger vi nøgleordene – assertThat().statusCode(expectedCode)
**Bemærk – URL er en variabel, der bruges for enkelhedens skyld. URL indeholder hele API-anmodnings-URL'en
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); }
Output:
Forretningsbehov
En af de grundlæggende regler for automatisering er, at vi skal sætte kontrolpunkter, så testen kun fortsætter, hvis alle de krævede betingelser er opfyldt. I API-testning er den mest grundlæggende validering at kontrollere, om statuskoden for anmodningen er i 2XX-format.
Den komplette kode indtil videre:
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); } }
* Bemærk:
- 200 er et vellykket svar for dette scenarie. Nogle gange har du brug for, at anmodningen også mislykkes, og så kan du bruge 4XX eller 5XX. Prøv at ændre statuskoden ved at angive ugyldige parametre og tjek.
- Når vi hævder en betingelse, vil der ikke være nogen udskrivning på konsollen, medmindre der er en fejl.
Script til at hente forskellige dele af et svar
Hentning af svartekst og svarstatuskode er allerede dækket i ovenstående segment. Det er værd at bemærke, at for at hente forskellige dele af svaret, er søgeordet 'udtræk' meget vigtigt.
Header
Vær sikker er et meget ligetil sprog, og det er lige så enkelt at hente overskrifter. Metodens navn er headers(). Som før vil vi oprette en selvstændig metode til at gøre det samme.
public static void getResponseHeaders(){ System.out.println("The headers in the response "+ get(url).then().extract() .headers()); }
Bemærk venligst, at 'given().when()' springes over her, og kodelinjen starter fra get(), dette skyldes, at der ikke er foretaget nogen forudsætning eller bekræftelse her for at ramme anmodningen og få et svar. I sådanne tilfælde er det valgfrit at bruge det samme.
Output:
Forretningsbehov:
En hel del gange skal du bruge autorisationstokenet eller en sessionscookie til den efterfølgende anmodning, og for det meste returneres disse detaljer som overskrifter på svaret.
Responstid
For at få den nødvendige tid til at hente svaret fra backend eller andre downstream-systemer, leverer Rest Assured en metode kaldet 'timeIn' med en passende timeUnit til at få den tid, det tager at returnere svaret.
public static void getResponseTime(){ System.out.println("The time taken to fetch the response "+get(url) .timeIn(TimeUnit.MILLISECONDS) + " milliseconds"); }
Output:
Forretningsbehov:
En meget vigtig funktion ved at teste API'er er deres responstid for at måle applikationens ydeevne. Bemærk, at den tid, det tager for dit opkald, kan tage mere eller mindre tid afhængigt af din internethastighed, API'ens ydeevne på det tidspunkt, serverbelastning og andre faktorer, der påvirker tidspunktet.
Content-Type
Du kan få returneret indholdstypen for svaret ved at bruge metoden "contentType ()".
public static void getResponseContentType(){ System.out.println("The content type of response "+ get(url).then().extract() .contentType()); }
Produktion
Forretningsbehov:
Til tider er det afgørende at få indholdstypen for at sikre, at der ikke er sikkerhedshuller for eventuelle trusler på tværs af oprindelse eller bare for at sikre, at det videregivne indhold er i overensstemmelse med standarderne for API'en.
Hent individuelt JSON-element
Fra det givne svar bliver du bedt om at beregne det samlede beløb, du skal hente hvert beløb og summere det op.
Trin:
Trin 1) Beløbsfeltet er inden for et array med nøgle "udsagn", som igen er på listen med nøgle "resultat"
Trin 2) Vær sikker, giver en mekanisme til at nå værdierne i API'et ved hjælp af "sti"
Trin 3) Stien til at nå beløb er "resultatudsagn. AMOUNT". Tænk på det som Xpath i selen.
Trin 4) Hent alle beløb i en samling, og løkke derefter for alle værdier for at beregne summen
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); }
Bemærk: Da mængdeværdien er i strengdatatype, konverterer vi til heltal og bruger det til summering.
Output:
Resumé
- Rest Assured er en gruppe af java-biblioteker, som gør os i stand til at automatisere Rest API test
- Vær sikker er Java-baseret, og viden om kerne Java nok til at lære det
- Det hjælper med at hente værdier for anmodning og svar fra komplicerede JSON-strukturer
- API anmodning kan tilpasses med en række header, forespørgsler, stiparameter og enhver session eller cookies, der skal indstilles.
- Det hjælper med at fastlægge erklæringer og betingelser.
- Mens Rest Assured er meget nyttigt, når svaret er JSON-typen, fungerer dets metoder muligvis ikke problemfrit, hvis indholdstypen id HTML eller almindelig tekst.