REST Assured API-testingsveiledning

โšก Smart oppsummering

REST Assured etablerer seg som en Java-basert รฅpen kildekode-bibliotek som effektiviserer automatiseringstesting av REST API. Rammeverket gir kvalitetsingeniรธrer muligheten til รฅ validere komplekse JSON-svar, overskrifter, statuskoder og responstider ved hjelp av ren BDD-stil syntaks med sรธmlรธs Maven-integrasjon.

  • โš™๏ธ Foundation Oppsett: Konfigurer Java, Eclipseog Maven-avhengigheter fรธr du skriver ditt fรธrste REST Assured-testskript.
  • ๐Ÿ“ Syntaksmestring: Bruk Gitt-Nรฅr-Sรฅ-mรธnsteret for รฅ uttrykke API-forespรธrsler i et lesbart og forretningsvennlig format.
  • ๐Ÿ” Granulรฆr validering: Extract-svarstekst, statuskoder, overskrifter, innholdstype og timing gjennom en flytende kjede.
  • ๐Ÿงฉ Stienavigasjon: Gรฅ gjennom nestede JSON-verdier med punktnotasjon som ligner pรฅ XPath i Selenium for presise pรฅstander.
  • ๐Ÿ›ก๏ธ CI/CD-integrasjon: Kombiner REST Assured med TestNG or JUnit รฅ bygge inn API-sjekker direkte i automatiserte byggepipeliner.

REST Assured Tutorial

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 din Google Kartvisning og sรธk etter et sted du vil dra til. Du ser umiddelbart restauranter i nรฆrheten, pendleralternativer fra ledende reisebyrรฅer og mange valgmuligheter lett tilgjengelig. Vi vet alle at dette ikke er tilfelle. Google produkter, sรฅ hvordan fungerer det Google klarer รฅ vise dem? Den bruker de eksponerte API-ene til disse leverandรธrene. Hvis du blir bedt om รฅ teste denne typen oppsett, selv fรธr brukergrensesnittet er bygget eller under utvikling, blir testing av API-er ekstremt viktig. ร… teste dem gjentatte ganger med forskjellige datakombinasjoner gjรธr det til et veldig passende tilfelle for automatisering.

Tidligere brukte team dynamiske sprรฅk som Groovy og Ruby for รฅ oppnรฅ dette, og det var utfordrende. Derfor ble ikke API-testing utforsket mye av funksjonelle testere.

Med Rest Assured blir det imidlertid enkelt รฅ automatisere testing av API-er og sende enkle HTTPS-forespรธrsler med brukervennlige tilpasninger hvis man har grunnleggende kunnskap om JavaDet er nyttig for รฅ forstรฅ API-testing og integrasjonstesting. Rest Assured gir sterk tillit til backend, mens frontend-testere kan fokusere pรฅ brukergrensesnittet og klientsideoperasjoner. Rest Assured er รฅpen kildekode, og den konstante tilfรธyelsen av metoder og biblioteker har gjort det til et godt valg for API-automatisering.

REST Assured vs. Postman: Viktige forskjeller

Bรฅde REST Assured og Postman validere REST API-er, men hver passer til et annet stadium i testsyklusen. Valg av riktig verktรธy avhenger av teamets ferdigheter, prosjektets omfang og integrasjonsbehov.

Aspekt Vรฆr trygg Postman
typen Java bibliotek for kodebasert automatisering GUI-basert API-klient med skriptstรธtte
Beste brukstilfelle Kontinuerlige integrasjonsrรธrledninger og regresjonspakker Manuell utforskning og raske API-sjekker
Ferdighetskrav Kjerne Java kunnskap som kreves Minimal koding; bruksomrรฅder JavaSkriptutdrag
Rapportering Integreres med TestNG, JUnitog Allure Innebygde kjรธresammendrag via Newman CLI

Mange lag bruker Postman for tidlig prototypeping og bytt til REST Assured for automatisert regresjon nรฅr API-et er konfigurerttract stabiliserer seg.

Hvordan sette opp Rest Assured.io med Eclipse

Oppsett av REST Assured innebรฆrer tre kjerneavhengigheter: Java, en IDE og Maven. Fรธlg trinnene nedenfor for รฅ unngรฅ byggefeil senere.

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

  1. Opprett et Maven-prosjekt i IDE-en din. Vi bruker IntelliJ, men du vil fรฅ en lignende struktur pรฅ alle IDE-er du bruker.
  2. ร…pne POM.xml-filen din.

Prosjektstruktur for REST Assured Maven-oppsett

Prosjektstruktur for et REST Assured Maven-arbeidsomrรฅde

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 brukere av versjon 9+:

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

Feilsรธking:

Hvis du ser feil og er usikker pรฅ om avhengighetene ble lastet ned riktig, fรธlger du disse trinnene:

  1. Utfรธr en Maven-bygg for รฅ importere alle avhengigheter. Du finner hjelp med Maven-oppsett pรฅ Guru99.
  2. Hvis feilene vedvarer, kjรธr en Maven-opprydding etterfulgt av en Maven-installasjon. Byggingen skal fullfรธres uten feil.
  3. Legg til importene nedenfor i din Java klassen og bekreft at det ikke er noen kompileringsfeil.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Fรธrste enkle Vรฆr trygg-manus

Med avhengigheter pรฅ plass kan du nรฅ skrive ditt fรธrste skript. Rammeverket fรธlger en atferdsdrevet utviklingsstil (BDD) som leses nesten som engelsk.

Syntaks:

Syntaksen til Rest Assured.io er den mest lesbare delen av rammeverket, da den er veldig BDD-lignende og forstรฅelig.

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

Forklaring:

Code Forklaring
Gitt() Nรธkkelordet ยซGivenยป lar deg angi en bakgrunn. Her sender du forespรธrselsoverskrifter, spรธrrings- og stiparametere, brรธdtekst og informasjonskapsler. Dette er valgfritt hvis disse elementene ikke er nรธdvendige i forespรธrselen.
Nรฅr() Nรธkkelordet ยซnรฅrยป markerer premisset for scenarioet ditt. For eksempel ยซnรฅrยป du fรฅr/publiserer/legger ut noe, gjรธr noe annet.
Metode() Erstatt dette med en hvilken som helst av CRUD-operasjonene (get/post/put/delete).
Da() Dine pรฅstands- og matcherbetingelser plasseres her.

Nรฅ som du har oppsettet og litt bakgrunnsinformasjon om syntaksen, la oss lage vรฅr fรธrste enkle test. Det er greit om strukturen virker ny for deg. Etter hvert som du koder videre og tolker hver linje, vil du fรฅ taket pรฅ den.

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.

Eksempel pรฅ API-svar for Rest Assured-skript

Eksempel pรฅ API-svar fanget av REST Assured

Hvis du fรฅr en feilmelding i nettleseren nรฅr du prรธver รฅ fรฅ svar pรฅ forespรธrselen:

  1. Sjekk om du brukte HTTPS eller HTTP. Nettleseren din kan ha innstillinger som blokkerer usikre nettsteder.
  2. Sjekk om en proxy eller brannmur blokkerer nettleseren din fra รฅ รฅpne nettstedet.

*Merknader โ€“ du brukte ingen overskrifter her, ingen brรธdtekst og ingen informasjonskapsel. Det var en URL, og du henter innhold fra API-et i stedet for รฅ legge ut eller oppdatere eksisterende innhold. 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 med navnet ยซmyFirstRestAssuredClassยป.

Trinn 2) Opprett en metode som heter ยซgetResponseBodyยป.

Trinn 3) I likhet med strukturen vi lรฆrte tidligere for gitt, nรฅr og deretter, skriver du inn koden nedenfor:

gitt(). -> Ingen overskrifter kreves, ingen spรธrring eller baneparam.

when(). -> Ingen spesifikk betingelse satt opp.

bli('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> bare URL mรฅ leveres.

then(). -> Ingen spesifikke pรฅstander kreves.

log().all() -> Nรฅr alt svaret er hentet, logges svaret, overskriftene og 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 URL ยซusedยป er langt og mindre lesbart. Ved nรฆrmere ettersyn vil du legge merke til at tre spรธrreparametere brukes:

  1. Customer_ID
  2. Passord
  3. Konto_nr

Rest Assured hjelper oss med รฅ sende hver del (spรธrring, sti, headerparameter) 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 ยซbodyยป i stedet for ยซallยป; dette hjelper oss med รฅ forstรฅtracbare selve svaret.

Utgang:

Henter svarstatuskoden

Den neste metoden vi bruker som skript er รฅ hente statuskoden og legge inn en pรฅstand for รฅ validere den.

Trinn 1) Opprett 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 det, bruk 'getStatus'.Code' innebygde metoden i Rest Assured for รฅ hente statuskodeverdien.

Trinn 4) For รฅ bekrefte at statuskoden din er 200, bruk nรธkkelordene โ€“ assertThat().statusCode(forventetCode).

**Merk โ€“ URL er en variabel som brukes for enkelhets skyld. URL inneholder hele API-forespรธrselen 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);
}

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:

  1. 200 er et vellykket svar for dette scenariet. Noen ganger kan det hende at forespรธrselen mislykkes, og i sรฅ fall kan du bruke 4XX eller 5XX. Prรธv รฅ endre statuskoden ved รฅ oppgi ugyldige parametere og sjekk.
  2. 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

Utover svartekst og statuskode, eksponerer REST Assured ogsรฅ overskrifter, responstid og innholdstype gjennom kjedebare eks.tractor-metoder. Nรธkkelordet 'extract' er viktig for รฅ hente disse spesifikke delene.

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 gjรธres noen forutsetning eller verifisering fรธr forespรธrselen sendes og et svar mottas. I slike tilfeller er det valgfritt รฅ bruke det samme.

Utgang:

Bedriftsbehov:

Ganske ofte mรฅ du bruke autorisasjonstokenet eller en รธktinformasjonskapsel for den pรฅfรธlgende forespรธrselen, og disse detaljene returneres vanligvis som overskrifter i 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 svรฆrt viktig funksjon ved testing av API-er er responstiden deres, som mรฅler applikasjonens ytelse. Tiden det tar for samtalen din kan ta mer eller mindre tid avhengig av internetthastigheten din, API-ens ytelse pรฅ det tidspunktet, serverbelastning og andre faktorer som pรฅvirker tiden.

Content-Type

Du kan fรฅ innholdstypen til svaret som returneres ved รฅ bruke metoden ยซ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รฅ tak i innholdstypen for รฅ sikre at det ikke er noen sikkerhetshull for trusler pรฅ tvers av opprinnelse, og for รฅ bekrefte at innholdet som sendes er i henhold til API-standardene.

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รธkkelen ยซsetningerยป, som igjen er i listen med nรธkkelen ยซresultatยป.

Trinn 2) Rest Assured tilbyr en mekanisme for รฅ nรฅ verdiene i API-et ved hjelp av ยซstiยป.

Trinn 3) Stien for รฅ nรฅ belรธp er ยซresult.statements.AMOUNTยป. Tenk pรฅ det som XPath i Selenium.

Trinn 4) Hent alle belรธp i en samling, og gรฅ deretter gjennom alle verdiene i lรธkke 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 en strengdatatype, konverterer vi den til et heltall for summering.

Utgang:

Beste praksis for REST Assured Test Automation

Nรฅr du forstรฅr det grunnleggende, vil bruk av disiplinerte mรธnstre holde suiten din pรฅlitelig etter hvert som API-overflaten vokser. Fremgangsmรฅtene nedenfor hjelper team med รฅ unngรฅ ustabile tester og vedlikeholdskostnader.

  1. Sentraliser basen URL: Lagre basis-URI-en og autentiseringstokenene i รฉn konfigurasjonsklasse eller egenskapsfil. Dette unngรฅr duplisering og forenkler miljรธbytte.
  2. Bruk spesifikasjoner for forespรธrsler og svar: Bygg gjenbrukbare RequestSpecBuilder- og ResponseSpecBuilder-objekter. De reduserer standardkravene nรฅr mange tester deler felles overskrifter eller pรฅstander.
  3. Valider JSON-skjema: Kombiner REST Assured med json-schema-validator-modulen for รฅ bekrefte konformitettract integritet. Skjemakontroller fanger opp endringer som ikke fungerer fรธr de nรฅr nedstrรธms forbrukere.
  4. Eksternaliser testdata: Lagre nyttelaster i JSON-filer eller bruk dataleverandรธrer fra TestNGHardkodede data blir raskt foreldet.
  5. Kjรธr uavhengige tester: Hver test bรธr sette opp og rive ned sine egne data. Ordreavhengige suiter feiler uforutsigbart i parallelle CI-kjรธringer.
  6. Selektiv registrering av logger: Bruk log().ifError() i stabile pakker og log().all() under feilsรธking. Utfรธrlig loggfรธring av trege CI-pipeliner og skjuler reelle problemer.
  7. Koble til CI/CD: Utlรธs REST Assured-pakker gjennom Maven Surefire eller Failsafe i Jenkins, GitHub Actions eller GitLab. Kjรธr rรธykkontroller pรฅ hver commit og full regresjon over natten.

ร… ta i bruk disse vanene tidlig gjรธr API-automatisering til en langsiktig ressurs snarere enn en skjรธr flaskehals.

Spรธrsmรฅl og svar

Ja. Moderne AI-assistenter som ChatGPT og GitHub Copilot kan utarbeide REST Assured-teststillas fra API-spesifikasjoner. Ingeniรธrer bรธr fortsatt gjennomgรฅ den genererte koden for pรฅstander, datahรฅndtering og kanttilfeller fรธr de slรฅr sammen.

AI-drevne verktรธy analyserer responsmรธnstre og foreslรฅr selvreparerende lokaliseringspunkter eller pรฅstander. De flagger skjemaavvik, anbefaler refaktorering og oppdaterer testdata automatisk, noe som reduserer manuelt vedlikehold nรฅr API-er utvikles ofte.

REST Assured er en Java bibliotek bygget for kodedrevet automatisering i CI-pipelines. Postman er en GUI-klient for manuell utforskning og rask skripting. Team kombinerer ofte begge deler gjennom testsyklusen.

REST Assured er optimalisert for REST og JSON. Den kan sende rรฅ XML-nyttelaster for SOAP, men dedikerte verktรธy som SoapUI tilby rikere stรธtte for WSDL-parsing og SOAP-spesifikke pรฅstander.

REST Assured passer naturlig sammen med TestNG og JUnit for pรฅstander, livssykluskroker og rapportering. Allure, Extent Reports og Maven Surefire legger til visualisering og CI-integrasjon i tillegg.

Oppsummer dette innlegget med: