REST Assuranced API -testausopas
โก รlykรคs yhteenveto
REST Assured vakiinnuttaa asemansa Java-pohjainen avoimen lรคhdekoodin kirjasto, joka virtaviivaistaa REST API -automaatiotestausta. Kehys antaa laatuinsinรถรถreille mahdollisuuden validoida monimutkaisia โโJSON-vastauksia, otsikoita, tilakoodeja ja vasteaikoja kรคyttรคmรคllรค puhdasta BDD-tyylistรค syntaksia ja saumatonta Maven-integraatiota.

Mikรค on Rest Assured?
Vakuutan mahdollistaa REST-sovellusliittymien testaamisen Java-kirjastojen avulla ja integroituu hyvin Mavenin kanssa. Siinรค on erittรคin tehokkaat sovitustekniikat, joten odotettujen tulosten vahvistaminen on myรถs melko suoraviivaista. Rest Assuredilla on menetelmiรค tietojen hakemiseen lรคhes jokaisesta pyynnรถn ja vastauksen osasta riippumatta siitรค, kuinka monimutkaisia โโJSON-rakenteet ovat.
Testausyhteisรถlle API Automation Testing on edelleen uusi ja markkinarako. JSON-monimutkaisuus pitรครค API-testauksen tutkimattomana. Mutta se ei tee siitรค vรคhemmรคn tรคrkeรครค testausprosessissa. Rest Assured.io -kehys on tehnyt siitรค erittรคin yksinkertaisen kรคyttรคmรคllรค Java-ytimen perusteita, joten se on erittรคin toivottavaa oppia.
Miksi Rest-Assured-palvelua tarvitaan?
Kuvittele, ettรค avaat Google Kartat-nรคkymรคssรค voit etsiรค paikkaa, johon haluat mennรค. Nรคet heti lรคhellรค olevat ravintolat, johtavien matkanjรคrjestรคjien tyรถmatkavaihtoehdot ja paljon muita vaihtoehtoja sormiesi ulottuvilla. Me kaikki tiedรคmme, etteivรคt nรคmรค ole... Google tuotteita, joten miten Google onnistuuko niiden nรคyttรคminen? Se kรคyttรครค nรคiden palveluntarjoajien paljastettuja API-rajapintoja. Jos sinua pyydetรครคn testaamaan tรคllaista kokoonpanoa, jopa ennen kรคyttรถliittymรคn rakentamista tai kehitystรค, API-rajapintojen testaamisesta tulee erittรคin tรคrkeรครค. Niiden testaaminen toistuvasti eri datayhdistelmillรค tekee siitรค erittรคin sopivan tapauksen automatisoinnille.
Aiemmin tiimit kรคyttivรคt dynaamisia kieliรค, kuten Groovy ja Rubyรค tรคmรคn saavuttamiseksi, ja se oli haastavaa. Siksi toiminnalliset testaajat eivรคt olleet laajalti tutkineet API-testausta.
Rest Assuredin avulla API-rajapintojen automatisoitu testaus ja yksinkertaisten HTTPS-pyyntรถjen lรคhettรคminen kรคyttรคjรคystรคvรคllisillรค mukautuksilla on kuitenkin yksinkertaista, jos on perehtynyt perustietoon JavaSe on hyรถdyllinen API-testauksen ja integraatiotestauksen ymmรคrtรคmisessรค. Rest Assured antaa vahvan luottamuksen backend-jรคrjestelmรครคn, kun taas front-end-testaajat voivat keskittyรค kรคyttรถliittymรครคn ja asiakaspuolen toimintoihin. Rest Assured on avoimen lรคhdekoodin ohjelmisto, ja metodien ja kirjastojen jatkuva lisรครคminen on tehnyt siitรค loistavan valinnan API-automaatioon.
REST Assured vs. Postman: Keskeiset erot
Sekรค REST Assurance ettรค Postman validoimaan REST-rajapintoja, mutta jokainen sopii testauksen elinkaaren eri vaiheeseen. Oikean tyรถkalun valinta riippuu tiimisi taidoista, projektin laajuudesta ja integrointitarpeista.
| Aspect | Lepรครค varmana | Postman |
|---|---|---|
| Tyyppi | Java koodipohjaisen automaation kirjasto | GUI-pohjainen API-asiakasohjelma skriptituella |
| Paras kรคyttรถkotelo | Jatkuvat integraatioputket ja regressiopaketit | Manuaalinen etsintรค ja nopeat API-tarkistukset |
| Taitovaatimus | Ydin Java vaadittu tieto | Minimaalinen koodaus; kรคyttรถtarkoitukset JavaSkriptinpรคtkรคt |
| Raportointi | Integroituu TestNG, JUnitja Allure | Sisรครคnrakennetut ajoyhteenvedot Newman CLI:n kautta |
Monet joukkueet kรคyttรคvรคt Postman varhaiselle prototyypilleping ja vaihda REST Assured -tilaan automaattista regressiota varten, kun API on valmistract vakautuu.
Rest Assured.io:n asetukset Eclipse
REST Assuredin mรครคrittรคmiseen liittyy kolme keskeistรค riippuvuutta: Java, IDE ja Maven. Noudata alla olevia ohjeita vรคlttรครคksesi kรครคnnรถsvirheet myรถhemmin.
Vaihe 1) Asenna Java. Katso tรคstรค ohjaavat
Vaihe 2) Lataa IDE aloittaaksesi: pimennys
Vaihe 3) Asenna Maven ja aseta eclipse. Katso tรครคltรค.
Asenna, voit olla varma
- Luo Maven-projekti IDE-ympรคristรถssรคsi. Kรคytรคmme IntelliJ:tรค, mutta saat samanlaisen rakenteen mihin tahansa IDE-ympรคristรถรถn.
- Avaa POM.xml-tiedostosi.
REST Assured Maven -tyรถtilan projektirakenne
Voit olla varma.io: For Java versio < 9 kรคyttรคjรครค:
Lisรครค alla oleva riippuvuus POM.xml-tiedostoosi:
<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>
Voit olla varma.io: For Java version 9+ kรคyttรคjรคt:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Vianmรครคritys:
Jos nรคet virheitรค etkรค ole varma, latautuivatko riippuvuudet oikein, toimi seuraavasti:
- Suorita Maven-koonti kaikkien riippuvuuksien tuomiseksi. Lรถydรคt apua Mavenin asennukseen osoitteessa Guru99.
- Jos virheet jatkuvat, suorita Maven-puhdistus ja sen jรคlkeen Maven-asennus. Kรครคnnรถstyรถn pitรคisi valmistua ilman virheitรค.
- Lisรครค alla olevat tuonnit omaan Java luokka ja varmista, ettei kรครคnnรถsvirheitรค ole.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Ensimmรคinen yksinkertainen Rest Assured -skripti
Kun riippuvuudet ovat paikoillaan, voit nyt kirjoittaa ensimmรคisen skriptisi. Kehys noudattaa kรคyttรคytymiseen perustuvaa kehitystรค (BDD), joka on lรคhes englanninkielinen.
Syntaksi:
Rest Assured.io:n syntaksi on viitekehyksen luettavin osa, koska se on hyvin BDD-tyyppinen ja ymmรคrrettรคvรค.
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x", "y", equalTo("z"));
Selitys:
| Code | Selitys |
|---|---|
| Annettu() | Avainsana 'Given' antaa sinun asettaa taustan. Tรคssรค vรคlitรคt pyynnรถn otsikot, kysely- ja polkuparametrit, rungon ja evรคsteet. Tรคmรค on valinnaista, jos nรคitรค kohteita ei tarvita pyynnรถssรค. |
| Kun() | Avainsana 'kun' merkitsee skenaariosi lรคhtรถkohtaa. Esimerkiksi 'kun' saat/julkaiset/laitat jotain, tee jotain muuta. |
| Menetelmรค() | Korvaa tรคmรค millรค tahansa CRUD-toiminnolla (get/post/put/delete). |
| Sitten() | Assert- ja matcher-ehtosi tulevat tรคhรคn. |
Nyt kun sinulla on asetukset ja hieman taustatietoa syntaksista, luodaan ensimmรคinen yksinkertainen testi. Ei hรคtรครค, jos rakenne vaikuttaa sinulle uudelta. Kun koodaat lisรครค ja tulkitset jokaista riviรค, opit sen kรคytรถn.
Mitรค aiot hakea?
Avaa selain ja paina - https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Varmista, ettรค nรคet jotain alla olevan mukaisesti.
REST Assuredin kaappaama esimerkki API-vastauksesta
Jos saat selaimessa virheen yrittรคessรคsi saada vastausta pyyntรถรถn:
- Tarkista, kรคytitkรถ HTTPS:รครค vai HTTP:tรค. Selaimesi asetukset saattavat estรครค suojaamattomat verkkosivustot.
- Tarkista, estรครคkรถ jokin vรคlityspalvelin tai palomuuri selaintasi avaamasta verkkosivustoa.
*Huomautuksia โ et kรคyttรคnyt tรคssรค otsikoita, runkoa etkรค evรคstettรค. Se oli URL, ja saat sisรคltรถรค API:sta sen sijaan, ettรค julkaisisit tai pรคivittรคisit olemassa olevaa sisรคltรถรค. Tรคmรค tekee siitรค GET-kutsua. Muista tรคmรค ymmรคrtรครคksesi ensimmรคisen testimme paremmin.
Testisi tavoite:
Komentosarjan tavoitteena on tulostaa IDE-konsoliisi sama tulos kuin se, jonka sait selaimeen Rest Assured -palvelun kautta.
Koodataan tรคmรค seuraavilla vaiheilla:
Vastauksen saaminen Body
Vaihe 1) Luo luokka nimeltรค โmyFirstRestAssuredClassโ.
Vaihe 2) Luo metodi nimeltรค โgetResponseBodyโ.
Vaihe 3) Samalla tavalla kuin aiemmin opittu rakenne given, when ja then, kirjoita alla oleva koodi:
annettu(). -> Ei vaadi otsikoita, ei kyselyรค tai polkuparametria.
kun(). -> Ei erityistรค ehtoa.
saada('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> vain URL on toimitettava.
then(). -> Mitรครคn erityisiรค vรคitteitรค ei vaadita.
log().all() -> Kun kaikki vastaukset on noudettu, kirjataan lokiin vastaus, otsikot ja kรคytรคnnรถssรค kaikki, mitรค pyyntรถ palauttaa.
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();
}
Huomaa nyt, ettรค URL kรคytetty on pitkรค ja vaikeasti luettava. Tarkemmin tarkasteltuna huomaat, ettรค kรคytรถssรค on kolme kyselyparametria:
- Asiakas ID
- Salasana
- Tili_nro
Rest Assured auttaa meitรค vรคlittรคmรครคn jokaisen osan (kyselyn, polun, otsikkoparametrin) erikseen, mikรค tekee koodista luettavampaa ja helpommin yllรคpidettรคvรครค. Voimme myรถs parametrisoida ulkoisen tiedoston tiedot tarpeen mukaan.
Kรคytettรคessรค kyselyparametria palaamme syntaksin mรครคritelmรครคmme ja katsomme, ettรค ne kaikki vรคlitetรครคn osana annettua.
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();
}
**Huomaa, ettรค kรคytimme sanaa โbodyโ sanan โallโ sijaan; tรคmรค auttaa meitรค esim.**tracvain vastauksen runko.
lรคhtรถ:
Vastauksen tilakoodin saaminen
Seuraava skriptaamamme menetelmรค on tilakoodin hakeminen ja sen validointi vรคitteen asettaminen.
Vaihe 1) Luo metodi nimeltรค getResponseStatus().
Vaihe 2) Kรคytรค samaa pyyntรถrakennetta kuin yllรค. Kopioi ja liitรค se.
Vaihe 3) Kรคytรค lokikirjauksen sijaan 'getStatus'-funktiota.Code'Rest Assuredin sisรครคnrakennettu menetelmรค tilakoodin arvon hakemiseen.'
Vaihe 4) Vahvistaaksesi, ettรค statuskoodisi on 200, kรคytรค avainsanoja โ assertThat().statusCode(odotettuCode).
**Huomautus โ URL on muuttuja, jota kรคytetรครคn yksinkertaisuuden vuoksi. URL sisรคltรครค koko API-pyynnรถn 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);
}
lรคhtรถ:
Liiketoiminnan tarve
Yksi automaation perussรครคnnรถistรค on, ettรค meidรคn on asetettava tarkistuspisteet niin, ettรค testi etenee vain, jos kaikki vaaditut ehdot tรคyttyvรคt. API-testauksessa yksinkertaisin validointi on tarkistaa, onko pyynnรถn tilakoodi 2XX-muodossa.
Tรคydellinen koodi tรคhรคn mennessรค:
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);
}
}
* Huom:
- 200 on tรคssรค tilanteessa onnistunut vastaus. Joskus pyynnรถn on ehkรค epรคonnistuttava, jolloin voit kรคyttรครค arvoa 4XX tai 5XX. Kokeile muuttaa tilakoodia antamalla virheelliset parametrit ja tarkista se.
- Kun vaadimme ehtoa, konsoliin ei tulosteta, ellei ole virhe.
Komentosarja vastauksen eri osien hakemiseen
Vastaustekstin ja tilakoodin lisรคksi REST Assured nรคyttรครค myรถs otsikot, vastausajan ja sisรคltรถtyypin ketjutettavan ex-funktion avulla.tractor-metodit. Avainsana 'extract' on vรคlttรคmรคtรถn nรคiden tiettyjen osien hakemiseksi.
Ylรคtunniste
Rest Assured on hyvin suoraviivainen kieli, ja otsikoiden hakeminen on yhtรค helppoa. Metodin nimi on headers(). Kuten ennenkin, luomme erillisen menetelmรคn tehdรค sama.
public static void getResponseHeaders(){
System.out.println("The headers in the response "+
get(url).then().extract()
.headers());
}
Huomaa, ettรค 'given().when()' ohitetaan tรคssรค, ja koodirivi alkaa get():stรค. Tรคmรค johtuu siitรค, ettรค ennen pyyntรถรค ja vastauksen saamista ei tehdรค ennakkoehtoja tai varmennusta. Tรคllaisissa tapauksissa niiden kรคyttรถ on valinnaista.
Lรคhtรถ:
Yrityksen tarve:
Usein seuraavaa pyyntรถรค varten tarvitaan valtuutustunnusta tai istuntoevรคstettรค, ja nรคmรค tiedot palautetaan enimmรคkseen vastauksen otsikoina.
Vasteaika
Saadakseen ajan, joka tarvitaan vastauksen hakemiseen taustajรคrjestelmรคstรค tai muista alavirran jรคrjestelmistรค, Rest Assured tarjoaa "timeIn"-nimisen menetelmรคn sopivalla aikayksikรถllรค saadakseen vastauksen palauttamiseen kuluvan ajan.
public static void getResponseTime(){
System.out.println("The time taken to fetch the response "+get(url)
.timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}
lรคhtรถ:
Yrityksen tarve:
Erittรคin tรคrkeรค ominaisuus API-rajapintojen testauksessa on niiden vasteaika, joka mittaa sovelluksen suorituskykyรค. Kutsun kesto voi olla enemmรคn tai vรคhemmรคn riippuen internet-yhteyden nopeudesta, API:n suorituskyvystรค kyseisellรค hetkellรค, palvelimen kuormituksesta ja muista aikaan vaikuttavista tekijรถistรค.
Content-Type
Voit saada palautetun vastauksen sisรคltรถtyypin kรคyttรคmรคllรค metodia โcontentType()โ.
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
ulostulo
Yrityksen tarve:
Sisรคltรถtyypin selvittรคminen on joskus vรคlttรคmรคtรถntรค sen varmistamiseksi, ettei alkuperรคstรค riippumattomia uhkia vastaan โโole tietoturva-aukkoja ja ettรค vรคlitetty sisรคltรถ on API:n standardien mukaista.
Hae yksittรคinen JSON-elementti
Annetusta vastauksesta sinua pyydetรครคn laskemaan kokonaissumma. Sinun on haettava jokainen summa ja laskettava se yhteen.
Vaiheet:
Vaihe 1) Mรครคrรค-kenttรค on taulukon sisรคllรค, jonka avain on โlausekkeetโ, joka puolestaan โโon listassa, jonka avain on โtulosโ.
Vaihe 2) Rest Assured tarjoaa mekanismin API:n arvojen saavuttamiseksi "polkua" kรคyttรคen.
Vaihe 3) Polku mรครคrien saavuttamiseen on โresult.statements.AMOUNTโ. Ajattele sitรค XPath-lausekkeena Selenium.
Vaihe 4) Hae kaikki kokoelman summat ja laske sitten summa kรคymรคllรค lรคpi kaikki arvot.
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);
}
Huomautus: Koska amount-arvo on merkkijonotyyppinen, muunnamme sen kokonaisluvuksi summaa varten.
lรคhtรถ:
REST-varmistetun testiautomaation parhaat kรคytรคnnรถt
Kun olet ymmรคrtรคnyt perusasiat, kurinalaisten mallien soveltaminen pitรครค pakettisi luotettavana API-pinnan kasvaessa. Alla olevat kรคytรคnnรถt auttavat tiimejรค vรคlttรคmรครคn epรคtasaisia โโtestejรค ja yllรคpitokuluja.
- Keskitรค tukikohta URL: Tallenna perus-URI ja todennustunnukset yhteen konfiguraatioluokkaan tai ominaisuustiedostoon. Tรคmรค vรคlttรครค pรครคllekkรคisyyksiรค ja yksinkertaistaa ympรคristรถn vaihtamista.
- Kรคytรค pyyntรถ- ja vastausmรครคrityksiรค: Luo uudelleenkรคytettรคviรค RequestSpecBuilder- ja ResponseSpecBuilder-objekteja. Ne yksinkertaistavat mallitestejรค, kun useilla testeillรค on yhteisiรค otsikoita tai vรคitteitรค.
- JSON-skeeman validointi: Yhdistรค REST Assured json-schema-validator-moduuliin varmistaaksesi con-koodin.tract-eheys. Skeema tarkistaa, havaitsevat rikkovat muutokset ennen kuin ne saavuttavat loppukรคyttรคjรคt.
- Testidatan ulkoistaminen: Tallenna hyรถtykuormat JSON-tiedostoihin tai kรคytรค datantarjoajia TestNGKovakoodattu data vanhenee nopeasti.
- Suorita itsenรคiset testit: Jokaisen testin tulisi luoda ja purkaa oma datansa. Jรคrjestyksestรค riippuvat paketit epรคonnistuvat arvaamattomasti rinnakkaisissa CI-ajoissa.
- Lokien valikoiva tallennus: Kรคytรค log().ifError()-funktiota vakaissa ohjelmistopaketteissa ja log().all()-funktiota virheenkorjauksessa. Pitkรคt lokit hidastavat CI-prosessia ja peittรคvรคt todellisia ongelmia.
- Liitรค CI/CD-porttiin: Kรคynnistรค REST Assured -paketit Maven Surefiren tai Failsafen kautta Jenkins, GitHub Actions tai GitLab. Suorita savutarkistuksia jokaisella commitilla ja tรคysi regressio yรถn aikana.
Nรคiden tapojen omaksuminen varhain muuttaa API-automaation pitkรคaikaiseksi voimavaraksi hauraan pullonkaulan sijaan.


