Výukový program pro testování REST Assured API
⚡ Chytré shrnutí
REST Assured se etabloval jako JavaKnihovna s otevřeným zdrojovým kódem, která zefektivňuje automatizované testování REST API. Framework umožňuje inženýrům kvality ověřovat komplexní JSON odpovědi, hlavičky, stavové kódy a doby odezvy pomocí čisté syntaxe ve stylu BDD s bezproblémovou integrací Maven.

Co je to Rest Assured?
Buďte v klidu umožňuje testovat REST API pomocí java knihoven a dobře se integruje s Maven. Má velmi účinné techniky porovnávání, takže prosazování očekávaných výsledků je také docela přímočaré. Rest Assured má metody pro načítání dat z téměř každé části požadavku a odpovědi bez ohledu na to, jak složité jsou struktury JSON.
Pro testovací komunitu je API Automation Testing stále nové a specializované. Složitost JSON udržuje testování API neprozkoumané. To však neznamená, že je v procesu testování méně důležitý. Rámec Rest Assured.io to velmi zjednodušil pomocí základních základů Java, takže je velmi žádoucí se učit.
Proč potřebujete Rest-Assured?
Představte si, že si otevřete Mapy Google a hledáte místo, kam chcete jet. Okamžitě uvidíte blízké restaurace, možnosti dojíždění od předních cestovních kanceláří a mnoho dalších možností na dosah ruky. Všichni víme, že se nejedná o produkty Google, tak jak je Google dokáže zobrazit? Využívá odhalená API těchto poskytovatelů. Pokud jste nyní požádáni o otestování tohoto typu nastavení, ještě předtím, než je uživatelské rozhraní vytvořeno nebo ve vývoji, je testování API nesmírně důležité. Jejich opakované testování s různými kombinacemi dat z něj činí velmi vhodný případ pro automatizaci.
Dříve týmy používaly dynamické jazyky, jako například Groovy a Ruby k dosažení tohoto cíle a bylo to náročné. Proto testování API nebylo funkčními testery příliš rozšířené.
S Rest Assured se však automatizované testování API a odesílání jednoduchých HTTPS požadavků s uživatelsky přívětivými úpravami stává jednoduchým, pokud má uživatel základní znalosti. JavaJe užitečný pro pochopení testování API a integračního testování. Rest Assured poskytuje silnou jistotu v oblasti backendu, zatímco front-end testeři se mohou soustředit na uživatelské rozhraní a operace na straně klienta. Rest Assured je open source a neustálé přidávání metod a knihoven z něj dělá skvělou volbu pro automatizaci API.
REST Assured vs. Postman: Klíčové rozdíly
Jak REST Assured, tak Postman ověřovat REST API, ale každé z nich se hodí do jiné fáze životního cyklu testování. Výběr správného nástroje závisí na dovednostech vašeho týmu, rozsahu projektu a potřebách integrace.
| Vzhled | BUĎTE V SIGNÁLU | Postman |
|---|---|---|
| Typ | Java knihovna pro automatizaci založenou na kódu | API klient s grafickým rozhraním a podporou skriptování |
| Nejlepší případ použití | Kanálové systémy pro kontinuální integraci a regresní sady | Manuální průzkum a rychlé kontroly API |
| Požadavek na dovednosti | Jádro Java požadované znalosti | Minimální kódování; použití JavaÚryvky skriptů |
| Hlášení | Integrace s TestNG, JUnita Allure | Vestavěné souhrny běhů přes Newman CLI |
Mnoho týmů používá Postman pro rané prototypyping a přepněte na REST Assured pro automatickou regresi, jakmile bude API dokončenotract se stabilizuje.
Jak nastavit Rest Assured.io pomocí Eclipse
Nastavení REST Assured zahrnuje tři základní závislosti: Java, IDE a Maven. Postupujte podle níže uvedených kroků, abyste se později vyhnuli chybám při sestavení.
Krok 1) Nainstalujte Java. Viz toto průvodce
Krok 2) Začněte stažením IDE: zatmění
Krok 3) Nainstalujte Maven a nastavte si zatmění. Odkazovat zde.
Nastavení Zajištění
- Vytvořte projekt Maven ve vašem IDE. My používáme IntelliJ, ale podobnou strukturu získáte v jakémkoli IDE, které používáte.
- Otevřete soubor POM.xml.
Struktura projektu pro pracovní prostor REST Assured Maven
Pro Rest Assured.io: Pro Java verze < 9 uživatelů:
Přidejte níže uvedenou závislost do vašeho 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>
Pro Rest Assured.io: Pro Java Uživatelé verze 9+:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Řešení problémů:
Pokud se vám zobrazí chyby a nejste si jisti, zda se závislosti stáhly správně, postupujte takto:
- Pro import všech závislostí proveďte sestavení v Mavenu. Nápovědu k nastavení Mavenu naleznete na Guru99.
- Pokud chyby přetrvávají, spusťte čištění Mavenu a následně instalaci Mavenu. Sestavení by mělo být dokončeno bez chyb.
- Přidejte níže uvedené importy do svého Java třídu a ověřte, že nedošlo k žádným chybám kompilace.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
První jednoduchý Rest Assured skript
S nastavenými závislostmi můžete nyní napsat svůj první skript. Framework se řídí stylem vývoje řízeného chováním (BDD), který se čte téměř jako angličtina.
Syntaxe:
Syntaxe Rest Assured.io je nejčitelnější částí frameworku, protože je velmi podobná BDD a srozumitelná.
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x", "y", equalTo("z"));
Vysvětlení:
| Code | Vysvětlení |
|---|---|
| Dané() | Klíčové slovo „Given“ umožňuje nastavit pozadí. Zde předáváte hlavičky požadavku, parametry dotazu a cesty, tělo a soubory cookie. Toto je volitelné, pokud tyto položky nejsou v požadavku potřeba. |
| Když() | Klíčové slovo „when“ označuje premisu vašeho scénáře. Například „when“ něco získáte/zveřejníte/vložíte, udělejte něco jiného. |
| Metoda() | Nahraďte to libovolnou z operací CRUD (get/post/put/delete). |
| Pak() | Sem vložíte podmínky assert a matcher. |
Nyní, když máte nastavení a nějaké základní informace o syntaxi, pojďme vytvořit náš první jednoduchý test. Nevadí, pokud se vám struktura zdá nová, jak budete kódovat dále a interpretovat každý řádek, tak si ji osvojíte.
Co přineseš?
Otevřete prohlížeč a stiskněte - https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Ujistěte se, že vidíte něco jako níže.
Ukázková odpověď API zachycená službou REST Assured
V případě, že se vám v prohlížeči zobrazí chyba při pokusu o získání odpovědi na požadavek:
- Zkontrolujte, zda jste použili HTTPS nebo HTTP. Váš prohlížeč může mít nastavení, která blokují nezabezpečené webové stránky.
- Zkontrolujte, zda nějaký proxy server nebo firewall neblokuje vašemu prohlížeči otevření webových stránek.
*Hodnocení – nepoužili jste zde žádné hlavičky, žádné tělo ani žádný soubor cookie. Jednalo se o URL adresu a vy získáváte obsah z API, nikoli zveřejňujete nebo aktualizujete jakýkoli existující obsah. To z něj dělá volání GET. Zapamatujte si to, abyste lépe pochopili náš první test.
Cíl vašeho testu:
Cílem skriptu je vytisknout na vaší konzoli IDE stejný výstup, jaký jste obdrželi do prohlížeče prostřednictvím Rest Assured.
Pojďme to kódovat pomocí níže uvedených kroků:
Získání odpovědi Body
Krok 1) Vytvořte třídu s názvem „myFirstRestAssuredClass“.
Krok 2) Vytvořte metodu s názvem „getResponseBody“.
Krok 3) Podobně jako struktura, kterou jsme si dříve probrali, když a poté, zadejte níže uvedený kód:
dáno(). -> Nejsou vyžadována žádná záhlaví, žádný dotaz ani parametr cesty.
when(). -> Žádné specifické nastavení podmínky.
dostat('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> stačí zadat pouze URL.
then(). -> Nejsou vyžadována žádná specifická tvrzení.
log().all() -> Jakmile jsou načteny všechny odpovědi, zaznamená se odpověď, hlavičky a v podstatě vše, co vám požadavek vrátí.
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();
}
Nyní si všimněte, že použitá URL adresa je dlouhá a hůře čitelná. Při bližším pohledu si všimnete, že se používají 3 parametry dotazu:
- Zákaznické identifikační číslo
- Heslo
- Číslo účtu
Díky Rest Assured můžeme každou část (dotaz, cestu, parametr hlavičky) předávat samostatně, což usnadňuje čitelnost a údržbu kódu. Také můžeme parametrizovat data z externího souboru dle potřeby.
Pro použití parametru dotazu se vrátíme k naší definici syntaxe a uvidíme, že všechny jsou předány jako součást daného.
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();
}
**Všimněte si, že jsme použili „tělo“ místo „všechny“; to nám pomáhá extracpouze tělo odpovědi.
Výstup:
Získání kódu stavu odpovědi
Další metodou, kterou budeme skriptovat, je získání stavového kódu a jeho ověření pomocí asserce.
Krok 1) Vytvořte metodu s názvem getResponseStatus().
Krok 2) Použijte stejnou strukturu požadavku jako výše. Zkopírujte a vložte.
Krok 3) Místo logování použijte funkci 'getStatus'Code'vestavěná metoda Rest Assured pro načtení hodnoty stavového kódu.'
Krok 4) Chcete-li potvrdit, že váš stavový kód je 200, použijte klíčová slova – assertThat().statusCode(očekávanýCode).
Poznámka – URL je proměnná používaná pro zjednodušení. URL obsahuje celou URL požadavku API.
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);
}
Výstup:
Obchodní potřeba
Jedním ze základních pravidel automatizace je, že musíme umístit kontrolní body tak, aby test proběhl pouze v případě, že jsou splněny všechny požadované podmínky. Při testování API je nejzákladnějším ověřením kontrola, zda je stavový kód požadavku ve formátu 2XX.
Kompletní kód, zatím:
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);
}
}
* Poznámka:
- V tomto scénáři je úspěšná odpověď 200. Někdy může být nutné, aby požadavek selhal, v takovém případě můžete použít 4XX nebo 5XX. Zkuste změnit stavový kód zadáním neplatných parametrů a zkontrolujte to.
- Když potvrdíme podmínku, nebude na konzole tisknout, pokud nedojde k chybě.
Skript pro načtení různých částí odpovědi
Kromě těla odpovědi a stavového kódu REST Assured také zpřístupňuje záhlaví, dobu odezvy a typ obsahu prostřednictvím řetězitelných ex.tracmetody tor. Klíčové slovo 'ex'trac't' je nezbytné pro načtení těchto specifických částí.
Hlavička
Rest Assured je velmi přímočarý jazyk a načítání záhlaví je stejně jednoduché. Název metody je headers(). Stejně jako předtím vytvoříme samostatnou metodu, jak udělat totéž.
public static void getResponseHeaders(){
System.out.println("The headers in the response "+
get(url).then().extract()
.headers());
}
Upozorňujeme, že metoda 'given().when()' je zde vynechána a řádek kódu začíná metodou get(). Je to proto, že před odesláním požadavku a získáním odpovědi není provedena žádná předběžná podmínka ani ověření. V takových případech je použití této předběžné podmínky volitelné.
Výstup:
Obchodní potřeba:
Docela často byste pro následný požadavek museli použít autorizační token nebo soubor cookie relace a tyto údaje se většinou vracejí jako záhlaví odpovědi.
Doba Odezvy
Pro získání času potřebného k načtení odpovědi z backendu nebo jiných downstream systémů poskytuje Rest Assured metodu nazvanou 'timeIn' s vhodnou timeUnit pro získání času potřebného k vrácení odpovědi.
public static void getResponseTime(){
System.out.println("The time taken to fetch the response "+get(url)
.timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}
Výstup:
Obchodní potřeba:
Velmi důležitou vlastností testovacích API je jejich doba odezvy, která měří výkon aplikace. Doba potřebná k volání může trvat více či méně v závislosti na rychlosti vašeho internetu, výkonu API v daném okamžiku, zatížení serveru a dalších faktorech ovlivňujících tuto dobu.
Content-Type
Typ obsahu vrácené odpovědi můžete získat pomocí metody „contentType()“.
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
Výstup
Obchodní potřeba:
Někdy je získání typu obsahu nezbytné pro zajištění absence bezpečnostních mezer pro případné hrozby z různých zdrojů a pro ověření, že předávaný obsah splňuje standardy API.
Načíst jednotlivý prvek JSON
Z dané odpovědi budete požádáni o výpočet celkové částky. Musíte načíst každou částku a sečíst je.
Kroky:
Krok 1) Pole s částkou se nachází v poli s klíčem „příkazy“, které je zase v seznamu s klíčem „výsledek“.
Krok 2) Rest Assured poskytuje mechanismus pro dosažení hodnot v API pomocí „cesty“.
Krok 3) Cesta k dosažení částek je „výsledek.příkazy.ČÁSTKA“. Představte si to jako XPath v Selenium.
Krok 4) Načíst všechny částky v kolekci a poté projít všechny hodnoty pro výpočet součtu.
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);
}
Poznámka: Protože hodnota amount je řetězcový datový typ, převedeme ji pro sčítání na celé číslo.
Výstup:
Nejlepší postupy pro automatizaci testování REST Assured
Jakmile pochopíte základy, používání disciplinovaných vzorů udrží vaši sadu spolehlivou i při růstu API. Níže uvedené postupy pomáhají týmům vyhnout se nespolehlivým testům a režijním nákladům na údržbu.
- Centralizujte základní URL: Uložte základní URI a autentizační tokeny do jednoho souboru konfigurační třídy nebo vlastností. Tím se zabrání duplicitě a zjednoduší se přepínání prostředí.
- Použijte specifikace požadavků a odpovědí: Vytvářejte opakovaně použitelné objekty RequestSpecBuilder a ResponseSpecBuilder. Snižují počet standardizovaných kritérií, když mnoho testů sdílí společné hlavičky nebo assessmenty.
- Ověření schématu JSON: Zkombinujte REST Assured s modulem json-schema-validator pro ověření contracIntegrita t. Schéma kontroluje změny, které způsobují problémy, než se dostanou k navazujícím příjemcům.
- Externalizace testovacích dat: Ukládejte datové části do souborů JSON nebo používejte poskytovatele dat z TestNGPevně zakódovaná data rychle zastarají.
- Spusťte nezávislé testy: Každý test by si měl nastavit a rozebrat svá vlastní data. Sady závislé na pořadí nepředvídatelně selhávají při paralelních běhech CI.
- Selektivní zachycení protokolů: Ve stabilních sadách používejte log().ifError() a během ladění log().all(). Podrobné protokoly zpomalují CI pipelines a zakrývají skutečné problémy.
- Zapojení do CI/CD: Spouštění REST Assured suitů prostřednictvím Maven Surefire nebo Failsafe v Jenkins, GitHub Actions nebo GitLab. Spouštějte kouřové kontroly u každého commitu a plnou regresi přes noc.
Včasné osvojení si těchto návyků promění automatizaci API v dlouhodobý přínos, nikoli v křehké úzké hrdlo.


