REST Assured handledning för API-automatiseringstestning (exempel)
Vad är lugnt?
Var så säker gör att du kan testa REST API:er med java-bibliotek och integreras väl med Maven. Den har mycket effektiva matchningstekniker, så att hävda dina förväntade resultat är också ganska enkelt. Rest Assured har metoder för att hämta data från nästan varje del av begäran och svaret oavsett hur komplexa JSON-strukturerna är.
För testgemenskapen är API Automation Testing fortfarande nytt och nischat. JSON-komplexiteten håller API-testning outforskad. Men det gör det inte mindre viktigt i testprocessen. Rest Assured.io-ramverket har gjort det väldigt enkelt med grundläggande java-grunder, vilket gör det till en mycket önskvärd sak att lära sig.
Varför behöver du vara lugn?
Föreställ dig att du öppnar din google map view och letar efter en plats du vill åka till, du ser direkt restauranger i närheten, du ser alternativ för pendling; från några ledande reseleverantörer och se så många alternativ till hands. Vi vet alla att de inte är Google-produkter, hur lyckas Google då visa det. De använder de exponerade API:erna från dessa leverantörer. Nu, om du blir ombedd att testa den här typen av inställningar, även innan gränssnittet är byggt eller är under utveckling, blir det extremt viktigt att testa API:er och att testa dem upprepade gånger, med olika datakombinationer gör det till ett mycket lämpligt fall för automatisering.
Tidigare använde vi dynamiska språk som groovy, ruby för att uppnå detta, och det var utmanande. Därför utforskades inte API-testning genom funktionell testning.
Men att använda Rest Assured, automationstestning av API:er, är enkelt att skicka enkla https-förfrågningar med användarvänliga anpassningar om man har en grundläggande bakgrund i java. Det behövs för att förstå API-testning och integrationstestning, men inlägg att automatisering Rest Assured ger mycket bra förtroende på backend medan front-end-testning bara kan fokusera på användargränssnittet och operationer på klientsidan. Rest Assured är en öppen källkod med många ytterligare metoder och bibliotek som läggs till har gjort det till ett utmärkt val för API-automatisering.
Hur man ställer in Rest Assured.io med Eclipse
Steg 1) Installera Java. Hänvisa till detta styra
Steg 2) Ladda ner en IDE för att börja: förmörkelse
Steg 3) Installera Maven och ställ in din eclipse. Hänvisa här..
Installation Var säker
- Skapa ett Maven-projekt i din IDE. Vi använder Intellij, men du kommer att få en liknande struktur på alla IDE du använder.
- Öppna din POM.xml

För Rest Assured.io: För Java version < 9 användare:
Lägg till nedanstående beroende till 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>
För Rest Assured.io : För Java version 9+ användare:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Felsökning:
Om du ser fel och inte är säker på om beroenden har laddats ner bra,
- Utför ett Maven-bygge för att importera alla beroenden, återigen hittar du hjälp med Maven som ställs in på guru99.
- Ändå ser du fel, gör sedan en maven-rengöring följt av en maven-installation, och den bör byggas utan några fel.
- Du kan lägga till raderna nedan i din javaklass och se att inga kompileringsfel finns.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Första enkla Var säker-skriptet
Syntax:
Syntaxen för Rest Assured.io är den vackraste delen, eftersom den är väldigt BDD-lik och förståelig.
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x, ”y", equalTo("z"));
Förklaring:
| Koda | Förklaring |
|---|---|
| Given() | "Givet" nyckelord, låter dig ställa in en bakgrund, här skickar du förfrågans rubriker, fråga och sökväg param, body, cookies. Detta är valfritt om dessa objekt inte behövs i begäran |
| När() | "när" nyckelord markerar premissen för ditt scenario. Till exempel, 'när' du får/postar/lägger något, gör något annat. |
| Metod() | Ersätt detta med någon av CRUD-operationerna (get/post/put/delete) |
| Sedan() | Dina påstående och matchningsvillkor finns här |
Nu när du har inställningen och lite bakgrund till syntaxen, låt oss skapa vårt första enkla test. Det är okej om strukturen hittills verkar ny för dig, när du kodar ytterligare tolkar varje rad, kommer du att få kläm på det.
Vad ska du hämta?
Öppna din webbläsare och tryck - https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Se till att du ser något enligt nedan.
Om du får ett felmeddelande i webbläsaren när du försöker få ett svar på begäran,
- Se om du har använt Https eller Http. Din webbläsare kan ha inställningar för att inte öppna osäkra webbplatser.
- Se om du har någon proxy eller brandvägg som blockerar din webbläsare från att öppna webbplatser.
*Anmärkningar – du använde inga rubriker här, ingen brödtext och ingen cookie. Det var en URL och du får även innehåll från API:t och inte publicerar eller uppdaterar något befintligt innehåll, så det gör det till ett GET-anrop. Kom ihåg detta för att förstå vårt första test bättre.
Målet med ditt test:
Målet med skriptet är att skriva ut samma utdata på din IDE-konsol som det du fick i webbläsaren genom Rest Assured.
Låt oss koda detta med stegen nedan:
Få svar Kropp
Steg 1) Skapa en klass som heter "myFirstRestAssuredClass"
Steg 2) Skapa en metod som heter "getResponseBody"
Steg 3) I likhet med strukturen som du lärt dig tidigare av givna, när och sedan, skriv nedanstående kod
given(). -> Inga rubriker krävs, ingen fråga eller sökvägsparam.
när(). -> Ingen specifik villkorsinställning
skaffa sig('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). ->bara url:n behöver anges
sedan(). -> Inga specifika påståenden krävs
logga(). all() -> När alla svar har hämtats, loggsvar, rubriker, i princip allt som begäran returnerar till 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();
}
Lägg nu märke till att webbadressen som används är lång och mindre läsbar, om du tittar noga kommer du att märka att 3 frågeparametrar används som är
- Kundnummer
- Lösenord
- Konto Nej
Var säker, hjälper oss att skicka varje del (fråga, sökväg, header param) separat, vilket gör koden mer läsbar och lätt att underhålla. Dessutom kan vi parametrisera data från en extern fil efter behov.
För att använda query param går vi tillbaka till vår definition av syntaxen och ser att alla skickas som en del av 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();
}
**Observera att vi använde "kropp" istället för "alla"; detta hjälper oss att bara extrahera kroppen av svaret.
Produktion:
Hämtar svarsstatuskoden
Nästa metod som vi skriptar kommer att vara att få statuskoden och även lägga ett påstående för att validera densamma.
Steg 1) Skapa en metod som heter getResponseStatus()
Steg 2) Använd samma förfrågningsstruktur som ovan. Kopiera och klistra in det.
Steg 3) Istället för att logga det använder vi den inbyggda "getStatusCode"-metoden av Rest Assured för att hämta statuskodvärdet
Steg 4) För att hävda att din statuskod är 200 använder vi nyckelorden – assertThat().statusCode(expectedCode)
**Obs – URL är en variabel som används för enkelhetens skull. URL innehåller hela API-begärans 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);
}
Produktion:
Affärsbehov
En av de grundläggande reglerna för automatisering är att vi måste sätta kontrollpunkter så att testet fortsätter endast om alla villkor uppfylls. Vid API-testning är den mest grundläggande valideringen att kontrollera om statuskoden för begäran är i 2XX-format.
Den fullständiga koden, hittills:
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);
}
}
*Notera:
- 200 är ett framgångsrikt svar för detta scenario. Ibland behöver du också att begäran misslyckas, och då kan du använda 4XX eller 5XX. Försök att ändra statuskoden genom att ange ogiltiga parametrar och kontrollera.
- När vi hävdar ett villkor kommer det inte att finnas någon utskrift på konsolen om det inte finns ett fel.
Skript för att hämta olika delar av ett svar
Hämtning av svarstext och svarsstatuskod täcks redan av ovanstående segment. Det är värt att notera att för att hämta olika delar av svaret är nyckelordet "extrahera" mycket viktigt.
Sidhuvud
Rest Assured är ett väldigt enkelt språk, och det är lika enkelt att hämta rubriker. Metodnamnet är headers(). Som tidigare kommer vi att skapa en fristående metod för att göra detsamma.
public static void getResponseHeaders(){
System.out.println("The headers in the response "+
get(url).then().extract()
.headers());
}
Observera att 'given().when()' hoppas över här, och kodraden börjar från get(), detta beror på att det inte finns några förutsättningar eller verifieringar här för att träffa begäran och få ett svar. I sådana fall är det valfritt att använda samma.
Utgång:
Affärsbehov:
Ganska många gånger skulle du behöva använda auktoriseringstoken, eller en sessionscookie för den efterföljande begäran, och oftast returneras dessa detaljer som rubriker för svaret.
Respons tid
För att få den tid som behövs för att hämta svaret från backend eller andra nedströmssystem, tillhandahåller Rest Assured en metod som kallas 'timeIn' med en lämplig timeUnit för att få den tid det tar att returnera svaret.
public static void getResponseTime(){
System.out.println("The time taken to fetch the response "+get(url)
.timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}
Produktion:
Affärsbehov:
En mycket viktig funktion för att testa API: er är deras svarstid, för att mäta applikationens prestanda. Observera att tiden det tar för ditt samtal kan ta mer eller mindre tid beroende på din internethastighet, prestandan för API vid den tidpunkten, serverbelastning och andra faktorer som påverkar tiden.
Innehållstyp
Du kan få innehållstypen för svaret returnerat med metoden "contentType ()".
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
Produktion
Affärsbehov:
Ibland är det viktigt att få innehållstypen för att säkerställa att det inte finns några säkerhetsluckor för eventuella hot med flera ursprung eller bara för att säkerställa att innehållet som skickas är enligt standarderna för API:et.
Hämta individuellt JSON-element
Från det givna svaret ombeds du att beräkna det totala beloppet, du måste hämta varje belopp och summera det.
Steg:
Steg 1) Beloppsfältet är inom en array med nyckel "statements" som i sin tur finns i listan med nyckel "result"
Steg 2) Var säker, tillhandahåller en mekanism för att nå värdena i API:t med hjälp av "sökväg"
Steg 3) Vägen för att nå belopp är "result.statements.AMOUNT". Tänk på det som Xpath i selen.
Steg 4) Hämta alla belopp i en samling, och sedan loopa för alla värden för att beräkna summan
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);
}
Obs: Eftersom beloppsvärdet är i strängdatatyp konverterar vi till heltal och använder det för summering.
Produktion:
Sammanfattning
- Rest Assured är en grupp av java-bibliotek som gör det möjligt för oss att automatisera Vila API-testning
- Var säker är Java-baserad, och kunskap om kärnan Java räcker för att lära sig det
- Det hjälper till att hämta värden för begäran och svar från komplicerade JSON-strukturer
- Ocuco-landskapet API begäran kan anpassas med en mängd olika rubriker, frågor, sökvägsparameter och valfri session eller cookies som ska ställas in.
- Det hjälper till att ställa hävda uttalanden och villkor.
- Även om Rest Assured är till stor hjälp när svaret är av JSON-typ, kan det hända att metoderna inte fungerar sömlöst om innehållstyp id HTML eller vanlig text.

