REST Assured API-testvejledning

โšก Smart opsummering

REST Assured etablerer sig som en Java-baseret open source-bibliotek, der strรธmliner REST API-automatiseringstestning. Frameworket giver kvalitetsingeniรธrer mulighed for at validere komplekse JSON-svar, headere, statuskoder og svartider ved hjรฆlp af ren BDD-stil syntaks med problemfri Maven-integration.

  • ๐Ÿ‡ง๐Ÿ‡ท Foundation Opsรฆtning: Konfigurer Java, Eclipseog Maven-afhรฆngigheder, fรธr du skriver dit fรธrste REST Assured-testscript.
  • ๐Ÿ“ Syntaksmestring: Anvend mรธnsteret "Givet-When-Then" til at udtrykke API-anmodninger i et lรฆsbart og forretningsvenligt format.
  • ๐Ÿ” Granulรฆr validering: Extract-svarsbrรธdtekst, statuskoder, overskrifter, indholdstype og timing gennem en flydende kรฆde.
  • ๐Ÿงฉ Sti-navigation: Gennemgรฅ indlejrede JSON-vรฆrdier ved hjรฆlp af punktnotation svarende til XPath i Selenium for prรฆcise pรฅstande.
  • ๐Ÿ›ก๏ธ CI/CD-integration: Kombiner REST Assured med TestNG or JUnit at integrere API-tjek direkte i automatiserede byggepipelines.

REST Assured Tutorial

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 Se Kort og sรธg efter et sted, du gerne vil hen. Du ser straks restauranter i nรฆrheden, pendlermuligheder fra fรธrende rejseudbydere og mange valgmuligheder lige ved hรฅnden. Vi ved alle, at disse ikke er Google produkter, sรฅ hvordan gรธr Google formรฅr at vise dem? Den bruger disse udbyderes eksponerede API'er. Hvis du bliver bedt om at teste denne type opsรฆtning, selv fรธr brugergrรฆnsefladen er bygget eller under udvikling, bliver test af API'er ekstremt vigtigt. Gentagen testning af dem med forskellige datakombinationer gรธr det til et meget velegnet tilfรฆlde for automatisering.

Tidligere brugte teams dynamiske sprog som f.eks. Groovy og Ruby for at opnรฅ dette, og det var udfordrende. Derfor blev API-testning ikke udforsket bredt af funktionelle testere.

Med Rest Assured bliver automatiseringstestning af API'er og afsendelse af simple HTTPS-anmodninger med brugervenlige tilpasninger dog enkelt, hvis man har en grundlรฆggende baggrund i JavaDet er nyttigt til forstรฅelse af API-testning og integrationstest. Rest Assured giver stรฆrk tillid til backend, mens frontend-testere kan fokusere pรฅ brugergrรฆnsefladen og klientsideoperationer. Rest Assured er open source, og den konstante tilfรธjelse af metoder og biblioteker har gjort det til et godt valg til API-automatisering.

REST Assured vs. Postman: Nรธgleforskelle

Bรฅde REST Assured og Postman validere REST API'er, men hver isรฆr passer til et forskelligt stadie i testlivscyklussen. Valg af det rigtige vรฆrktรธj afhรฆnger af dit teams fรฆrdigheder, projektets omfang og integrationsbehov.

Aspect Vรฆr sikker Postman
Type Java bibliotek til kodebaseret automatisering GUI-baseret API-klient med scripting-understรธttelse
Bedste Use Case Kontinuerlige integrationspipelines og regressionssuiter Manuel udforskning og hurtige API-tjek
Fรฆrdighedskrav Core Java krรฆvet viden Minimal kodning; anvendelser JavaScriptstykker
Rapportering Integreres med TestNG, JUnitog Allure Indbyggede kรธrselsoversigter via Newman CLI

Mange hold bruger Postman til tidlig prototypeping og skift til REST Assured for automatiseret regression, nรฅr API'en er fรฆrdigtract stabiliserer sig.

Sรฅdan konfigurerer du Rest Assured.io med Eclipse

Opsรฆtning af REST Assured involverer tre kerneafhรฆngigheder: Java, et IDE og Maven. Fรธlg nedenstรฅende trin for at undgรฅ build-fejl senere.

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

  1. Opret et Maven-projekt i dit IDE. Vi bruger IntelliJ, men du vil fรฅ en lignende struktur pรฅ ethvert IDE, du mรฅtte bruge.
  2. ร…bn din POM.xml.

Projektstruktur for REST Assured Maven-opsรฆtning

Projektstruktur for et REST Assured Maven-arbejdsomrรฅde

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 Brugere af version 9+:

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

Fejlfinding:

Hvis du ser fejl og ikke er sikker pรฅ, om afhรฆngighederne blev downloadet korrekt, skal du fรธlge disse trin:

  1. Udfรธr en Maven-build for at importere alle afhรฆngigheder. Du kan finde hjรฆlp til Maven-opsรฆtning pรฅ Guru99.
  2. Hvis fejlene fortsรฆtter, skal du kรธre en Maven-oprydning efterfulgt af en Maven-installation. Bygget burde fuldfรธres uden fejl.
  3. Tilfรธj nedenstรฅende importfiler i din Java klasse og bekrรฆft, 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

Med afhรฆngigheder pรฅ plads kan du nu skrive dit fรธrste script. Frameworket fรธlger en adfรฆrdsdrevet udviklingsstil (BDD), der lรฆses nรฆsten som engelsk.

Syntaks:

Syntaksen i Rest Assured.io er den mest lรฆsbare del af frameworket, da den er meget 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
Givet() Nรธgleordet 'Given' giver dig mulighed for at angive en baggrund. Her angiver du anmodningsheadere, forespรธrgsels- og stiparametre, brรธdtekst og cookies. Dette er valgfrit, hvis disse elementer ikke er nรธdvendige i anmodningen.
Hvornรฅr() Nรธgleordet 'nรฅr' markerer prรฆmissen for dit scenarie. For eksempel, 'nรฅr' du fรฅr/opslรฅr/lรฆgger noget, sรฅ gรธr noget andet.
Metode() Erstat dette med en hvilken som helst af CRUD-operationerne (get/post/put/delete).
Derefter() Dine assert- og matcher-betingelser placeres 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 virker ny for dig. Efterhรฅnden som du koder videre og fortolker hver linje, vil du fรฅ styr pรฅ den.

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.

Eksempel pรฅ Rest Assured-script API-svar

Eksempel pรฅ API-svar indsamlet af REST Assured

Hvis du fรฅr en fejl i browseren, nรฅr du forsรธger at fรฅ et svar pรฅ anmodningen:

  1. Tjek om du brugte HTTPS eller HTTP. Din browser har muligvis indstillinger, der blokerer usikre websteder.
  2. Tjek om en proxy eller firewall blokerer din browser fra at รฅbne webstedet.

*Bemรฆrk โ€“ du brugte ingen overskrifter her, ingen brรธdtekst og ingen cookie. Det var en URL, og du henter indhold fra API'en i stedet for at poste eller opdatere eksisterende indhold. Det gรธr det til et GET-kald. Husk dette for bedre at forstรฅ vores fรธrste test.

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) I lighed med den tidligere lรฆrte struktur for given, when og then, skal du skrive nedenstรฅende kode:

givet(). -> Ingen headers pรฅkrรฆvet, ingen forespรธrgsel eller stiparam.

when(). -> Ingen specifik betingelse opsat.

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

then(). -> Ingen specifikke pรฅstande krรฆves.

log(). all() -> Nรฅr alt svaret er hentet, logges svaret, headerne og stort set 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 URL `used` er langt og mindre lรฆsbart. Ved nรฆrmere eftersyn vil du bemรฆrke, at der bruges 3 forespรธrgselsparametre:

  1. Kunde ID
  2. Adgangskode
  3. Konto_nr

Rest Assured hjรฆlper os med at sende hver del (forespรธrgsel, sti, headerparameter) separat, hvilket gรธr koden mere lรฆsbar og nem at vedligeholde. Vi kan ogsรฅ parametrisere dataene 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 "all"; dette hjรฆlper os med at forstรฅtrackun selve svaret.

Output:

Henter svarstatuskoden

Den nรฆste metode, vi vil bruge som script, er at hente statuskoden og lave en assertion for at validere den.

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, brug 'getStatus'.Code' indbyggede metode i Rest Assured til at hente statuskodevรฆrdien.

Trin 4) For at bekrรฆfte, at din statuskode er 200, skal du bruge nรธgleordene โ€“ assertThat().statusCode(forventetCode).

**Bemรฆrk โ€“ URL er en variabel, der bruges for enkelhedens skyld. URL indeholder hele API-anmodningen 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);
}

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:

  1. 200 er et vellykket svar i dette scenarie. Til tider kan det vรฆre nรธdvendigt, at anmodningen mislykkes, i hvilket tilfรฆlde du kan bruge 4XX eller 5XX. Prรธv at รฆndre statuskoden ved at angive ugyldige parametre, og kontroller.
  2. 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

Ud over svartekst og statuskode eksponerer REST Assured ogsรฅ headere, svartid og indholdstype via kรฆdelige eksempler.tractor-metoder. Nรธgleordet 'ex'tract' er afgรธrende for at hente disse specifikke dele.

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 foretages nogen forudsรฆtning eller verifikation, fรธr anmodningen behandles og et svar modtages. I sรฅdanne tilfรฆlde er det valgfrit at bruge det samme.

Output:

Forretningsbehov:

Ofte skal du bruge autorisationstokenet eller en sessionscookie til den efterfรธlgende anmodning, og disse oplysninger returneres oftest som headere i 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 test af API'er er deres svartid, som mรฅler applikationens ydeevne. Den tid, det tager for dit opkald, kan tage mere eller mindre tid afhรฆngigt af din internethastighed, API'ens ydeevne pรฅ det tidspunkt, serverbelastningen og andre faktorer, der pรฅvirker tiden.

Content-Type

Du kan fรฅ indholdstypen for det returnerede svar ved hjรฆlp af 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 vigtigt at finde indholdstypen for at sikre, at der ikke er sikkerhedshuller i forbindelse med trusler pรฅ tvรฆrs af oprindelse, og for at bekrรฆfte, at det overfรธrte indhold er i overensstemmelse med API'ens standarder.

Hent individuelt JSON-element

Ud fra det givne svar bliver du bedt om at beregne det samlede belรธb. Du skal hente hvert belรธb og lรฆgge det sammen.

Trin:

Trin 1) Belรธbsfeltet er inden for et array med nรธglen "udsagn", som igen er pรฅ listen med nรธglen "resultat".

Trin 2) Rest Assured tilbyder en mekanisme til at nรฅ vรฆrdierne i API'en ved hjรฆlp af "path".

Trin 3) Stien til at nรฅ belรธb er "result.statements.AMOUNT". Tรฆnk pรฅ det som XPath i Selenium.

Trin 4) Hent alle belรธb i en samling, og gennemgรฅ derefter 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 amount-vรฆrdien er en strengdatatype, konverterer vi den til et heltal for at summere.

Output:

Bedste praksis for REST Assured Test Automation

Nรฅr du fรธrst har forstรฅet det grundlรฆggende, vil anvendelsen af โ€‹โ€‹disciplinerede mรธnstre sikre, at din suite forbliver pรฅlidelig, efterhรฅnden som API-overfladen vokser. Fremgangsmรฅderne nedenfor hjรฆlper teams med at undgรฅ ustabile tests og vedligeholdelsesomkostninger.

  1. Centraliser basen URL: Gem basis-URI'en og godkendelsestokens i en enkelt konfigurationsklasse eller egenskabsfil. Dette undgรฅr dobbeltarbejde og forenkler miljรธskift.
  2. Brug af specifikationer for anmodninger og svar: Byg genanvendelige RequestSpecBuilder- og ResponseSpecBuilder-objekter. De reducerer standardteksten, nรฅr mange tests deler fรฆlles headere eller assertions.
  3. Valider JSON-skema: Kombinรฉr REST Assured med json-schema-validator-modulet for at bekrรฆfte konformitettract integritet. Skematjek fanger รฆndringer, der ikke fungerer, fรธr de nรฅr downstream-forbrugere.
  4. Eksternaliser testdata: Gem nyttelast i JSON-filer eller brug dataudbydere fra TestNGHardkodede data bliver hurtigt forรฆldede.
  5. Kรธr uafhรฆngige tests: Hver test bรธr opsรฆtte og nedbryde sine egne data. Ordreafhรฆngige suiter fejler uforudsigeligt i parallelle CI-kรธrsler.
  6. Selektiv indfangning af logfiler: Brug log().ifError() i stabile suiter og log().all() under fejlfinding. Udfรธrlige logfiler langsommer CI-pipelines og skjuler reelle problemer.
  7. Tilslut til CI/CD: Udlรธs REST Assured-pakker via Maven Surefire eller Failsafe i Jenkins, GitHub Actions eller GitLab. Kรธr smoke checks pรฅ hver commit og fuld regression natten over.

Tidlig implementering af disse vaner gรธr API-automatisering til et langsigtet aktiv snarere end en skrรธbelig flaskehals.

Ofte Stillede Spรธrgsmรฅl

Ja. Moderne AI-assistenter som ChatGPT og GitHub Copilot kan udarbejde REST Assured-testscaffolds ud fra API-specifikationer. Ingeniรธrer bรธr stadig gennemgรฅ den genererede kode for assertions, datahรฅndtering og edge cases, fรธr de sammenfletter.

AI-drevne vรฆrktรธjer analyserer responsmรธnstre og foreslรฅr selvreparerende lokaliseringsvรฆrktรธjer eller assertions. De markerer skemaafvigelser, anbefaler refaktorering og opdaterer testdata automatisk, hvilket reducerer manuel vedligeholdelse, nรฅr API'er udvikler sig ofte.

REST Assured er en Java Bibliotek bygget til kodedrevet automatisering i CI-pipelines. Postman er en GUI-klient til manuel udforskning og hurtig scripting. Teams kombinerer ofte begge dele pรฅ tvรฆrs af testlivscyklussen.

REST Assured er optimeret til REST og JSON. Den kan sende rรฅ XML-nyttelast til SOAP, men dedikerede vรฆrktรธjer som SoapUI tilbyde bedre understรธttelse af WSDL-parsing og SOAP-specifikke assertions.

REST Assured passer naturligt sammen med TestNG og JUnit til assertions, lifecycle hooks og rapportering. Allure, Extent Reports og Maven Surefire tilfรธjer visualisering og CI-integration oveni.

Opsummer dette indlรฆg med: