REST Assured-veiledning for API-automatiseringstesting (eksempel)
Hva er trygg?
Vær trygg lar deg teste REST APIer ved å bruke java-biblioteker og integreres godt med Maven. Den har svært effektive matchingsteknikker, så det er ganske enkelt å hevde de forventede resultatene dine. Rest Assured har metoder for å hente data fra nesten alle deler av forespørselen og svaret uansett hvor komplekse JSON-strukturene er.
For testfellesskapet er API Automation Testing fortsatt nytt og nisje. JSON-kompleksitetene holder API-testing uutforsket. Men det gjør det ikke mindre viktig i testprosessen. Rest Assured.io-rammeverket har gjort det veldig enkelt ved å bruke grunnleggende java-grunnlag, noe som gjør det til en veldig ønskelig ting å lære.
Hvorfor trenger du være trygg?
Tenk deg at du åpner google map view og ser etter et sted du vil dra, du ser umiddelbart restauranter i nærheten, du ser alternativer for pendling; fra noen ledende reiseleverandører, og se så mange alternativer for hånden. Vi vet alle at de ikke er Google-produkter, så hvordan klarer Google å vise det. De bruker de eksponerte API-ene til disse leverandørene. Nå, hvis du blir bedt om å teste denne typen oppsett, selv før brukergrensesnittet er bygget eller er under utvikling, blir testing av APIer ekstremt viktig og testing av dem gjentatte ganger, med forskjellige datakombinasjoner gjør det til et veldig passende tilfelle for automatisering.
Tidligere brukte vi dynamiske språk som groovy, ruby for å oppnå dette, og det var utfordrende. Derfor ble ikke API-testing utforsket av funksjonell testing.
Men ved å bruke Rest Assured, automatiseringstesting av APIer, er det enkelt å sende enkle https-forespørsler med brukervennlige tilpasninger hvis man har en grunnleggende bakgrunn fra java. Det er nødvendig for å forstå API-testing og integrasjonstesting, men post at automatisering Rest Assured gir veldig god tillit på backend mens front-end-testing bare kan fokusere på brukergrensesnittet og operasjoner på klientsiden. Rest Assured er en åpen kildekode med mange ekstra metoder og biblioteker som legges til har gjort det til et godt valg for API-automatisering.
Hvordan sette opp Rest Assured.io med Eclipse
Trinn 1) Installer Java. Viser til dette veilede
Trinn 2) Last ned en IDE for å begynne: eclipse
Trinn 3) Installer Maven og sett opp formørkelsen. Henvise her..
Oppsett Vær trygg
- Lag et Maven-prosjekt i IDE-en din. Vi bruker Intellij, men du vil få en lignende struktur på alle IDE du bruker.
- Åpne POM.xml
For Rest Assured.io: For Java versjon < 9 brukere:
Legg til avhengigheten nedenfor 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 versjon 9+ brukere:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Feilsøking:
I tilfelle du ser feil og ikke er sikker på om avhengighetene ble lastet ned bra,
- Utfør et Maven-bygg for å importere alle avhengigheter, igjen vil du finne hjelp på Maven satt opp på guru99.
- Likevel ser du feil, og gjør deretter en maven-rens etterfulgt av en maven-installasjon, og den skal bygges uten feil.
- Du kan legge til linjene nedenfor i Java-klassen din og se at ingen kompileringsfeil er tilstede.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Første enkle Vær trygg-manus
Syntaks:
Syntaksen til Rest Assured.io er den vakreste delen, siden den er veldig BDD-lik og forståelig.
Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z"));
Forklaring:
Kode | Forklaring |
---|---|
Gitt() | 'Gitt' nøkkelord, lar deg angi en bakgrunn, her sender du forespørselshodene, spørrings- og baneparam, brødtekst, informasjonskapsler. Dette er valgfritt hvis disse elementene ikke er nødvendige i forespørselen |
Når() | «når» nøkkelord markerer premisset for scenariet ditt. For eksempel, 'når' du får/poster/legger noe, gjør noe annet. |
Metode() | Erstatt dette med en av CRUD-operasjonene (get/post/put/delete) |
Da() | Dine påstands- og matchbetingelser finner du her |
Nå som du har oppsettet og litt bakgrunn til syntaksen, la oss lage vår første enkle test. Det er greit hvis strukturen så langt virker ny for deg, ettersom du tolker hver linje videre, vil du få taket på det.
Hva skal du hente?
Åpne nettleseren og trykk - https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
. Sørg for at du ser noe som nedenfor.
I tilfelle du får en feilmelding i nettleseren når du prøver å få svar på forespørselen,
- Se om du har brukt Https eller Http. Nettleseren din kan ha innstillinger for ikke å åpne usikre nettsteder.
- Se om du har en proxy eller brannmur som blokkerer nettleseren din fra å åpne nettsteder.
*Merknader – du brukte ingen overskrifter her, ingen brødtekst og ingen informasjonskapsel. Det var en URL, og du får også innhold fra API og ikke legger ut eller oppdaterer noe eksisterende innhold, så det gjør det til et GET-kall. Husk dette for å forstå vår første test bedre.
Målet med testen din:
Målet med skriptet er å skrive ut samme utdata på IDE-konsollen som det du mottok på nettleseren gjennom Rest Assured.
La oss kode dette med trinnene nedenfor:
Får respons Body
Trinn 1) Opprett en klasse kalt "myFirstRestAssuredClass"
Trinn 2) Lag en metode kalt "getResponseBody"
Trinn 3) I likhet med strukturen lært tidligere av gitt, når og da, skriv inn koden nedenfor
gitt(). -> Ingen overskrifter kreves, ingen spørring eller baneparam.
når(). -> Ingen spesifikke tilstandsoppsett
bli('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->bare url-en må oppgis
da(). -> Ingen spesifikke påstander kreves
logg(). all() -> Når alt svaret er hentet, loggsvar, overskrifter, i hovedsak alt som forespørselen returnerer til deg.
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(); }
Legg nå merke til at nettadressen som brukes er lang og mindre lesbar, hvis du ser nøye etter, vil du legge merke til at det brukes 3 søkeparametere som er
- Customer_ID
- Passord
- Konto_nr
Vær trygg, hjelper oss å sende hver del (spørsmål, bane, headerparam) separat, noe som gjør koden mer lesbar og enkel å vedlikeholde. Vi kan også parameterisere dataene fra en ekstern fil etter behov.
For bruk av spørringsparam går vi tilbake til vår definisjon av syntaksen og ser at alle blir sendt som en del av gitt.
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(); }
**Merk at vi brukte "kropp" i stedet for "alle"; dette hjelper oss å trekke ut bare kroppen av responsen.
Utgang:
Henter svarstatuskoden
Den neste metoden vi skripter vil være å få statuskoden og også sette en påstand for å validere den samme.
Trinn 1) Lag en metode kalt getResponseStatus()
Trinn 2) Bruk samme forespørselsstruktur som er brukt ovenfor. Kopier og lim den inn.
Trinn 3) I stedet for å logge den, bruker vi den innebygde 'getStatusCode'-metoden til Rest Assured for å hente statuskodeverdien
Trinn 4) For å påstå at statuskoden din er 200, bruker vi nøkkelordene – assertThat().statusCode(expectedCode)
**Merk – URL er en variabel som brukes for enkelhets skyld. URL inneholder hele API-forespørsels-URLen
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); }
Utgang:
Forretningsbehov
En av de grunnleggende reglene for automatisering er at vi må sette sjekkpunkter slik at testen fortsetter bare hvis alle nødvendige betingelser er oppfylt. I API-testing er den mest grunnleggende valideringen å sjekke om statuskoden for forespørselen er i 2XX-format.
Den komplette koden, så langt:
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); } }
* Merk:
- 200 er et vellykket svar for dette scenariet. Noen ganger trenger du at forespørselen også mislykkes, og da kan du bruke 4XX eller 5XX. Prøv å endre statuskoden ved å oppgi ugyldige parametere og sjekk.
- Når vi hevder en betingelse, blir det ingen utskrift på konsollen med mindre det er en feil.
Skript for å hente ulike deler av et svar
Henting av svartekst og svarstatuskode er allerede dekket i segmentet ovenfor. Det er verdt å merke seg at for å hente ulike deler av svaret, er nøkkelordet "ekstrakt" veldig viktig.
Header
Vær trygg er et veldig enkelt språk, og det er like enkelt å hente overskrifter. Metodenavnet er headers(). Som før vil vi lage en frittstående metode for å gjøre det samme.
public static void getResponseHeaders(){ System.out.println("The headers in the response "+ get(url).then().extract() .headers()); }
Vær oppmerksom på at 'given().when()' hoppes over her, og kodelinjen starter fra get(), dette er fordi det ikke er gjort noen forutsetning eller bekreftelse her for å treffe forespørselen og få et svar. I slike tilfeller er det valgfritt å bruke det samme.
Utgang:
Bedriftsbehov:
Ganske mange ganger må du bruke autorisasjonstokenet, eller en øktinformasjonskapsel for den påfølgende forespørselen, og for det meste returneres disse detaljene som overskrifter på svaret.
Responstid
For å få tiden som trengs for å hente svaret fra backend eller andre nedstrømssystemer, tilbyr Rest Assured en metode kalt 'timeIn' med en passende timeUnit for å få tiden det tar å returnere svaret.
public static void getResponseTime(){ System.out.println("The time taken to fetch the response "+get(url) .timeIn(TimeUnit.MILLISECONDS) + " milliseconds"); }
Utgang:
Bedriftsbehov:
En veldig viktig funksjon ved testing av APIer er responstiden deres for å måle ytelsen til applikasjonen. Merk at tiden det tar for samtalen kan ta mer eller mindre tid avhengig av internetthastigheten din, ytelsen til API-en på det tidspunktet, serverbelastning og andre faktorer som påvirker tiden.
Content-Type
Du kan få innhold-Type av svaret returnert ved å bruke metoden er "contentType ()".
public static void getResponseContentType(){ System.out.println("The content type of response "+ get(url).then().extract() .contentType()); }
Produksjon
Bedriftsbehov:
Noen ganger er det viktig å få innholdstypen for å sikre at det ikke er noen sikkerhetshull for trusler med kryssopprinnelse eller bare for å sikre at innholdet som sendes er i henhold til standardene til APIen.
Hent individuelt JSON-element
Fra det gitte svaret blir du bedt om å beregne totalbeløpet, du må hente hvert beløp og summere det.
Fremgangsmåte:
Trinn 1) Beløpsfeltet er innenfor en matrise med nøkkel "utsagn" som igjen er i listen med nøkkel "resultat"
Trinn 2) Vær trygg, gir en mekanisme for å nå verdiene i API ved å bruke "bane"
Trinn 3) Banen for å nå beløp er «resultatutsagn.AMOUNT». Tenk på det som Xpath i selen.
Trinn 4) Hent alle beløp i en samling, og sløy deretter for alle verdier for å 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); }
Merk: Siden beløpsverdien er i strengdatatype, konverterer vi til heltall og bruker det til summering.
Utgang:
Oppsummering
- Rest Assured er en gruppe java-biblioteker som lar oss automatisere Rest API-testing
- Vær trygg er Java-basert, og kunnskap om kjerne Java det er nok for å lære det
- Det hjelper å hente verdier for forespørsel og svar fra kompliserte JSON-strukturer
- Ocuco API forespørselen kan tilpasses med en rekke overskrifter, spørringer, baneparametere og enhver økt eller informasjonskapsler som skal settes.
- Det hjelper med å sette hevde utsagn og betingelser.
- Selv om Rest Assured er veldig nyttig når svaret er JSON-type, kan det hende at metodene ikke fungerer sømløst hvis innholdstype id HTML eller ren tekst.