REST Assured -opastus API-automaatiotestaukseen (esimerkki)
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-karttanäkymäsi ja etsit paikkaa, johon haluat mennä, näet välittömästi lähellä olevat ravintolat, näet työmatkavaihtoehdot; joiltakin johtavilta matkantarjoajilta ja näet niin monia vaihtoehtoja käden ulottuvilla. Tiedämme kaikki, että ne eivät ole Googlen tuotteita, joten miten Google onnistuu näyttämään sen. He käyttävät näiden tarjoajien julkisia sovellusliittymiä. Nyt, jos sinua pyydetään testaamaan tällaista asennusta, jopa ennen käyttöliittymän rakentamista tai kehittämistä, API-testauksesta tulee erittäin tärkeää, ja niiden toistuva testaus erilaisilla tietoyhdistelmillä tekee siitä erittäin sopivan tapauksen automatisointiin.
Aiemmin käytimme dynaamisia kieliä, kuten groovy, ruby, saavuttaaksemme tämän, ja se oli haastavaa. Siksi API-testausta ei tutkittu toiminnallisella testauksella.
Mutta käyttämällä Rest Assured -sovellusliittymien automaatiotestausta, yksinkertaisten https-pyyntöjen lähettäminen käyttäjäystävällisillä mukautuksilla on helppoa, jos henkilöllä on javan perustausta. Sitä tarvitaan API-testauksen ja integraatiotestauksen ymmärtämiseen, mutta sen jälkeen automaation Rest Assured antaa erittäin hyvän luottamuksen taustaan, kun taas käyttöliittymätestaus voi keskittyä vain käyttöliittymään ja asiakaspuolen toimintoihin. Rest Assured on avoin lähdekoodi, jossa on paljon lisämenetelmiä ja lisättyjen kirjastojen ansiosta se on loistava valinta API-automaatioon.
Rest Assured.io:n asetukset Eclipse
Vaihe 1) Asenna Java. Katso tästä ohjaavat
Vaihe 2) Lataa IDE aloittaaksesi: pimennys
Vaihe 3) Asenna Maven ja aseta eclipse. Katso tätä.
Asenna, voit olla varma
- Luo Maven-projekti IDE:ssäsi. Käytämme Intellit, mutta saat samanlaisen rakenteen kaikissa käyttämissäsi IDE:issä.
- Avaa POM.xml
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: varten Java versio 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, ladattiinko riippuvuudet hyvin,
- Suorita maven-koonti tuodaksesi kaikki riippuvuudet. Löydät jälleen apua Mavenin määrittämisestä guru99:ssä.
- Silti näet virheitä, tee sitten Maven Clean ja sen jälkeen maven asennus, ja sen pitäisi rakentaa ilman virheitä.
- Voit lisätä alla olevat rivit java-luokkaasi ja nähdä, ettei käännösvirheitä ole.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Ensimmäinen yksinkertainen Rest Assured -skripti
Syntaksi:
Rest Assured.io:n syntaksi on kaunein 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:
Koodi | Selitys |
---|---|
Annettu() | "Tietytty"-avainsana, antaa sinun asettaa taustan, tässä välität pyynnön otsikot, kyselyn ja polun parametrit, rungon, evästeet. Tämä on valinnainen, jos näitä kohteita ei tarvita pyynnössä |
Kun() | "kun"-avainsana merkitsee skenaariosi lähtökohtaa. Esimerkiksi "kun" saat/lähetät/laitat jotain, tee jotain muuta. |
Menetelmä() | Korvaa tämä millä tahansa CRUD-operaatiolla (get/post/put/delete) |
Sitten() | Vahvistus- ja vastineehtosi ovat täällä |
Nyt kun sinulla on asetukset ja taustaa syntaksille, luodaan ensimmäinen yksinkertainen testi. Ei haittaa, jos rakenne näyttää toistaiseksi sinulle uudelta, kun koodaat jokaista riviä tarkemmin, saat siitä käsin.
Mitä aiot hakea?
Avaa selain ja paina - http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
. Varmista, että näet jotain alla olevan mukaisesti.
Jos saat virheilmoituksen selaimessa, kun yrität saada vastausta pyyntöön,
- Tarkista, oletko käyttänyt HTTP:tä tai HTTP:tä. Selaimessasi saattaa olla asetukset, jotka estävät suojaamattomien verkkosivustojen avaamisen.
- Tarkista, estääkö välityspalvelin tai palomuuri selaintasi avaamasta verkkosivustoja.
*Huomautuksia – et käyttänyt täällä otsikoita, tekstiä etkä evästettä. Se oli URL-osoite, ja myös saat sisältöä API:lta etkä julkaise tai päivitä olemassa olevaa sisältöä, joten siitä tulee GET-kutsu. Muista tämä ymmärtääksesi ensimmäistä testiämme 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 menetelmä nimeltä "getResponseBody"
Vaihe 3) Kirjoita alla oleva koodi, kuten aiemmin opittu rakenne, milloin ja sitten
annettu(). -> Ei vaadi otsikoita, ei kyselyä tai polkuparametria.
kun(). -> Ei erityisiä ehtoja
saada('http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->vain URL-osoite on annettava
sitten(). -> Ei vaadi erityisiä väitteitä
Hirsi(). all() -> Kun kaikki vastaus on haettu, loki vastaus, otsikot, käytännössä kaikki, mitä pyyntö palauttaa sinulle.
public static void getResponseBody(){ given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log() .all(); }
Huomaa nyt, että käytetty URL-osoite on pitkä ja vähemmän luettavissa. Jos katsot tarkasti, huomaat, että käytössä on kolme kyselyparametria, jotka ovat
- Asiakas ID
- Salasana
- Tili_nro
Voit olla varma, auttaa meitä välittämään jokainen osa (kysely, polku, otsikkoparametri) erikseen, mikä tekee koodista luettavamman ja helpommin ylläpidettävän. Lisäksi voimme parametroida tiedot ulkoisesta tiedostosta 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("http://demo.guru99.com/V4/sinkministatement.php").then().log() .body(); }
**Huomaa, että käytimme sanaa "body" "kaikki" sijaan; tämä auttaa meitä poimimaan vain vastauksen rungon.
lähtö:
Vastauksen tilakoodin saaminen
Seuraava menetelmä, jonka skriptimme, on tilakoodin saaminen ja myös väitteen vahvistaminen.
Vaihe 1) Luo menetelmä nimeltä getResponseStatus()
Vaihe 2) Käytä samaa pyyntörakennetta kuin yllä. Kopioi ja liitä se.
Vaihe 3) Kirjaamisen sijaan käytämme Rest Assuredin sisäänrakennettua getStatusCode-menetelmää tilakoodin arvon hakemiseen.
Vaihe 4) Vahvistaaksemme, että tilakoodisi on 200, käytämme avainsanoja – assertThat().statusCode(expectedCode)
**Huomaa – URL on muuttuja, jota käytetään yksinkertaisuuden vuoksi. URL sisältää koko API-pyynnön URL-osoitteen
public static void getResponseStatus(){ int statusCode= given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://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="http://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("http://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("http://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 onnistunut vastaus tähän skenaarioon. Joskus sinun on myös pyyntö epäonnistuttava, ja sitten saatat käyttää 4XX tai 5XX. Yritä muuttaa tilakoodia antamalla virheelliset parametrit ja tarkista.
- Kun vaadimme ehtoa, konsoliin ei tulosteta, ellei ole virhe.
Komentosarja vastauksen eri osien hakemiseen
Vastauksen rungon ja vastauksen tilakoodin hakeminen on jo käsitelty yllä olevassa osassa. On syytä huomata, että vastauksen eri osien hakemiseksi avainsana 'poimi' on erittäin tärkeä.
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 arvosta get(), tämä johtuu siitä, että tässä ei ole tehty ennakkoehtoa tai vahvistusta pyynnön osumiselle ja vastauksen saamiselle. Tällaisissa tapauksissa on valinnaista käyttää samaa.
Lähtö:
Yrityksen tarve:
Usein sinun on käytettävä valtuutustunnusta tai istuntoevästettä myöhempään pyyntöön, ja useimmiten nämä tiedot palautetaan 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-testauksessa on niiden vasteaika, jolla mitataan sovelluksen suorituskykyä. Huomaa, että puheluun kuluva aika voi viedä enemmän tai vähemmän aikaa riippuen Internet-nopeudestasi, sovellusliittymän toimivuudesta sillä hetkellä, palvelimen kuormituksesta ja muista aikaan vaikuttavista tekijöistä.
Content-Type
Voit saada vastauksen sisältötyypin käyttämällä menetelmää "contentType ()".
public static void getResponseContentType(){ System.out.println("The content type of response "+ get(url).then().extract() .contentType()); }
ulostulo
Yrityksen tarve:
Toisinaan sisältötyypin saaminen on välttämätöntä, jotta voidaan varmistaa, ettei ristiriitaisia uhkia varten ole turvallisuusaukkoja, tai vain sen varmistamiseksi, että välitetty sisältö on API-standardien mukainen.
Hae yksittäinen JSON-elementti
Annetusta vastauksesta sinua pyydetään laskemaan kokonaissumma, sinun on noudettava jokainen summa ja laskettava se yhteen.
Vaiheet:
Vaihe 1) Summakenttä on taulukossa, jossa on Key "lausekkeet", joka puolestaan on luettelossa avaimen "tulos" kanssa.
Vaihe 2) Voit olla varma, tarjoaa mekanismin API:n arvojen saavuttamiseksi polun avulla
Vaihe 3) Polku summien saavuttamiseen on "tulos.lausunnot.SUMMA". Ajattele sitä kuin Xpath seleenissä.
Vaihe 4) Hae kaikki kokoelman summat ja laske sitten summa silmukalla kaikista arvoista
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 summan arvo on merkkijonotietotyypissä, muunnamme kokonaisluvuiksi ja käytämme sitä summaukseen.
lähtö:
Yhteenveto
- Rest Assured on joukko Java-kirjastoja, joiden avulla voimme automatisoida Rest API-testaus
- Voit olla varma Java-pohjainen ja ytimen tuntemus Java riittää sen oppimiseen
- Se auttaa hakemaan pyyntöjen ja vastausten arvot monimutkaisista JSON-rakenteista
- - API pyyntöä voidaan mukauttaa useilla otsikoilla, kyselyillä, polkuparametreilla ja millä tahansa istunnolla tai asetettavilla evästeillä.
- Se auttaa asettamaan väitteitä ja ehtoja.
- Vaikka Rest Assured on erittäin hyödyllinen, kun vastaus on JSON-tyyppinen, sen menetelmät eivät välttämättä toimi saumattomasti, jos sisältötyyppi on HTML tai pelkkä teksti.