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.

  • ⚙️ Foundation Setup: Konfigurace Java, Eclipsea závislosti Mavenu před napsáním prvního testovacího skriptu REST Assured.
  • 📐 Zvládnutí syntaxe: Použijte vzor Given-When-Then k vyjádření požadavků API v čitelném a firemně přívětivém formátu.
  • 🔍 Granulární validace: Extractělo odpovědi, stavové kódy, záhlaví, typ obsahu a načasování prostřednictvím plynulého řetězce.
  • 🧩 Navigace po cestě: Procházení vnořených hodnot JSON pomocí tečkové notace podobné XPath v Selenium pro přesná tvrzení.
  • 🛡️ Integrace CI/CD: Kombinujte REST Assured s TestNG or JUnit vložit kontroly API přímo do automatizovaných kanálů sestavení.

Výukový program REST Assured

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í

  1. 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.
  2. Otevřete soubor POM.xml.

Struktura projektu pro nastavení REST Assured Maven

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:

  1. Pro import všech závislostí proveďte sestavení v Mavenu. Nápovědu k nastavení Mavenu naleznete na Guru99.
  2. 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.
  3. 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 skriptu Rest Assured

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:

  1. Zkontrolujte, zda jste použili HTTPS nebo HTTP. Váš prohlížeč může mít nastavení, která blokují nezabezpečené webové stránky.
  2. 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:

  1. Zákaznické identifikační číslo
  2. Heslo
  3. Čí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:

  1. 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.
  2. 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.

  1. 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í.
  2. 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.
  3. 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.
  4. Externalizace testovacích dat: Ukládejte datové části do souborů JSON nebo používejte poskytovatele dat z TestNGPevně ​​zakódovaná data rychle zastarají.
  5. 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.
  6. 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.
  7. 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.

Nejčastější dotazy

Ano. Moderní asistenti umělé inteligence, jako jsou ChatGPT a GitHub Copilot, dokáží vytvářet REST Assured testovací scaffoldy ze specifikací API. Inženýři by však měli před sloučením kódu zkontrolovat vygenerovaný kód z hlediska assercí, zpracování dat a okrajových případů.

Nástroje založené na umělé inteligenci analyzují vzorce odezvy a navrhují samoopravitelné lokátory nebo assese. Upozorňují na posun schématu, doporučují refaktoring a automaticky aktualizují testovací data, což snižuje ruční údržbu při častém vývoji API.

REST Assured je Java knihovna vytvořená pro automatizaci řízenou kódem v CI pipelinech. Postman je klient s grafickým uživatelským rozhraním pro manuální prozkoumávání a rychlé skriptování. Týmy často kombinují obojí v průběhu celého životního cyklu testování.

REST Assured je optimalizován pro REST a JSON. Může odesílat nezpracované XML datové zátěže pro SOAP, ale specializované nástroje jako SoapUI nabízejí bohatší podporu pro parsování WSDL a aserce specifické pro SOAP.

REST Assured se přirozeně hodí k TestNG a JUnit pro assertace, propojení životního cyklu a reporting. Allure, Extent Reports a Maven Surefire navíc přidávají vizualizaci a integraci CI.

Shrňte tento příspěvek takto: