Tutorial sui test API REST Assured

⚡ Riepilogo intelligente

REST Assured si stabilisce come un JavaLibreria open-source basata su che semplifica i test di automazione delle API REST. Il framework consente agli ingegneri della qualità di convalidare risposte JSON complesse, intestazioni, codici di stato e tempi di risposta utilizzando una sintassi pulita in stile BDD con una perfetta integrazione con Maven.

  • ⚙️ Foundation Setup: Configurazione Java, Eclipsee le dipendenze Maven prima di scrivere il tuo primo script di test REST Assured.
  • 📐 Padronanza della sintassi: Applica il modello Given-When-Then per esprimere le richieste API in un formato leggibile e comprensibile per il business.
  • 🔍 Validazione granulare: Extraccorpo della risposta, codici di stato, intestazioni, tipo di contenuto e tempistica attraverso una catena fluida.
  • 🧩 Navigazione del percorso: Attraversa i valori JSON annidati utilizzando la notazione a punti simile a XPath in Selenium per affermazioni precise.
  • 🛡️ Integrazione CI/CD: Combina REST Assured con TestNG or JUnit per integrare i controlli API direttamente nelle pipeline di build automatizzate.

Tutorial REST Assured

Cos'è il riposo assicurato?

Stia tranquillo consente di testare le API REST utilizzando librerie Java e si integra bene con Maven. Ha tecniche di matching molto efficienti, quindi anche l'asserzione dei risultati attesi è piuttosto semplice. Rest Assured ha metodi per recuperare dati da quasi ogni parte della richiesta e della risposta, indipendentemente da quanto siano complesse le strutture JSON.

Per la comunità di testing, API Automation Testing è ancora una novità e una nicchia. Le complessità JSON mantengono inesplorato il testing API. Ma questo non lo rende meno importante nel processo di testing. Il framework Rest Assured.io lo ha reso molto semplice utilizzando le basi di Java, rendendolo una cosa molto desiderabile da imparare.

Perché hai bisogno di Rest-Assicurato?

Immagina di aprire il tuo Google Visualizza le mappe e cerca il luogo in cui vuoi andare. Vedi immediatamente i ristoranti nelle vicinanze, le opzioni di trasporto dai principali fornitori di viaggi e molte scelte a portata di mano. Sappiamo tutti che queste non sono Google prodotti, quindi come fa Google Come si fa a visualizzarli? Si utilizzano le API esposte da questi provider. Ora, se ti viene chiesto di testare questo tipo di configurazione, anche prima che l'interfaccia utente sia stata creata o sia in fase di sviluppo, testare le API diventa estremamente importante. Testarle ripetutamente con diverse combinazioni di dati rende questo caso particolarmente adatto all'automazione.

In precedenza, i team utilizzavano linguaggi dinamici come Groovy e Ruby per raggiungere questo obiettivo, e si è rivelato impegnativo. Pertanto, il test delle API non è stato ampiamente esplorato dai tester funzionali.

Tuttavia, con Rest Assured, l'automazione dei test delle API e l'invio di semplici richieste HTTPS con personalizzazioni intuitive diventano semplici se si possiede una conoscenza di base di JavaÈ utile per comprendere i test delle API e i test di integrazione. Rest Assured offre una solida base di fiducia per il backend, consentendo ai tester frontend di concentrarsi sull'interfaccia utente e sulle operazioni lato client. Rest Assured è open source e la costante aggiunta di metodi e librerie lo ha reso un'ottima scelta per l'automazione delle API.

#1 Migliori in assolutoTest globali dell'app
9.8/ 10
★ ★ ★ ★ ★
Ottieni una demo gratuita
PractiTest
9.5/ 10
★ ★ ★ ★ ★
Visita PractiTest
Testiny
9.3/ 10
★ ★ ★ ★ ★
Visita Testiny
migliori PerTest di crowdsourcing e controllo qualitàGestione dei testTeam di QA di piccole e medie dimensioni
Caratteristica fondamentale✓Test di integrazione di terze parti✓Gestione centralizzata dei test✓Casi di test manuali e automatizzati
Integrazioni✓Jira, Slack, TestRail✓Jira, Jenkins, Slack✓Jira, GitHub, GitLab
Prova GratuitaDemo gratuitaProva Gratis 14 giorniDemo gratuita
Ottieni una demo gratuitaVisita PractiTestVisita Testiny

REST Assured vs Postman: Differenze chiave

Sia REST Assured che Postman Gli strumenti di validazione delle API REST sono diversi, ma ognuno si adatta a una fase diversa del ciclo di test. La scelta dello strumento giusto dipende dalle competenze del team, dall'ambito del progetto e dalle esigenze di integrazione.

Aspetto Stia tranquillo Postman
Tipo Java libreria per l'automazione basata sul codice Client API con interfaccia grafica e supporto per scripting.
caso d'uso migliore Pipeline di integrazione continua e suite di test di regressione Esplorazione manuale e verifiche rapide delle API
Requisiti di abilità Nucleo Java conoscenze richieste Codice minimo; utilizza JavaFrammenti di script
Reportistica Si integra con TestNG, JUnite Allure Riepiloghi di esecuzione integrati tramite Newman CLI

Molti team usano Postman per i primi prototipiping e passare a REST Assured per la regressione automatizzata una volta che l'API è stata completatatract si stabilizza.

Come configurare Rest Assured.io con Eclipse

La configurazione di REST Assured prevede tre dipendenze principali: Java, un IDE e Maven. Segui i passaggi seguenti per evitare errori di compilazione in seguito.

Passaggio 1) Installa Java. Fare riferimento a questo guida

Passaggio 2) Scarica un IDE per iniziare: eclissi

Passaggio 3) Installa Maven e configura Eclipse. Fai riferimento Qui..

Installazione tranquilla

  1. Crea un progetto Maven nel tuo IDE. Noi utilizziamo IntelliJ, ma otterrai una struttura simile con qualsiasi IDE tu utilizzi.
  2. Apri il tuo file POM.xml.

Struttura del progetto per la configurazione di REST Assured con Maven.

Struttura del progetto per un'area di lavoro Maven con certificazione REST Assured.

Per stare tranquilli.io: ​​Per Java versione < 9 utenti:

Aggiungi la dipendenza seguente al tuo 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>

Per stare tranquilli.io: ​​Per Java Utenti della versione 9 e successive:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Risoluzione dei problemi:

Nel caso in cui riscontri errori e non sia sicuro che le dipendenze siano state scaricate correttamente, segui questi passaggi:

  1. Esegui una build Maven per importare tutte le dipendenze. Troverai aiuto sulla configurazione di Maven su Guru99
  2. Se gli errori persistono, eseguire un Maven clean seguito da un Maven install. La build dovrebbe completarsi senza errori.
  3. Aggiungi le seguenti importazioni nel tuo Java classe e verificare che non ci siano errori di compilazione.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Primo semplice script Rest Assured

Una volta impostate le dipendenze, puoi iniziare a scrivere il tuo primo script. Il framework segue uno stile di sviluppo guidato dal comportamento (BDD) che risulta quasi comprensibile come l'inglese.

Sintassi:

La sintassi di Rest Assured.io è la parte più leggibile del framework, poiché è molto simile al BDD e facilmente comprensibile.

Given().
        param("x", "y").
        header("z", "w").
when().
Method().
Then().
        statusCode(XXX).
        body("x", "y", equalTo("z"));

Spiegazione:

Code Spiegazione
Dato() La parola chiave 'Given' consente di impostare uno sfondo. Qui si passano le intestazioni della richiesta, i parametri di query e di percorso, il corpo e i cookie. Questa opzione è facoltativa se questi elementi non sono necessari nella richiesta.
Quando() La parola chiave 'when' indica la premessa del tuo scenario. Ad esempio, 'quando' ricevi/pubblichi/metti qualcosa, fai qualcos'altro.
Metodo() Sostituisci questa operazione con una qualsiasi delle operazioni CRUD (get/post/put/delete).
Poi() Le tue condizioni di asserzione e di corrispondenza vanno qui.

Ora che avete impostato il codice e acquisito alcune nozioni di base sulla sintassi, creiamo il nostro primo semplice test. Non preoccupatevi se la struttura vi sembra nuova: man mano che scriverete codice e interpreterete ogni riga, la comprenderete meglio.

Cosa prenderai?

Apri il browser e premi – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Assicurati di vedere qualcosa come di seguito.

Esempio di risposta API dello script Rest Assured

Esempio di risposta API acquisita da REST Assured

Nel caso in cui si verifichi un errore nel browser quando si tenta di ottenere una risposta alla richiesta:

  1. Verifica se hai utilizzato HTTPS o HTTP. Il tuo browser potrebbe avere delle impostazioni che bloccano i siti web non sicuri.
  2. Controlla se qualche proxy o firewall sta bloccando l'apertura del sito web da parte del tuo browser.

*Note: – qui non hai utilizzato alcuna intestazione, nessun corpo e nessun cookie. Era un URLe stai recuperando contenuti dall'API anziché pubblicare o aggiornare contenuti esistenti. Questo la rende una chiamata GET. Ricordalo per comprendere meglio il nostro primo test.

L'obiettivo del tuo test:

L'obiettivo dello script è stampare sulla tua console IDE lo stesso output ricevuto sul browser tramite Rest Assuring.

Codifichiamolo con i passaggi seguenti:

Ottenere la risposta Body

Passo 1) Crea una classe denominata "myFirstRestAssuredClass".

Passo 2) Crea un metodo chiamato “getResponseBody”.

Passo 3) Similmente alla struttura appresa in precedenza di given, when e then, digita il codice seguente:

dato(). -> Nessuna intestazione richiesta, nessuna query o parametro di percorso.

quando(). -> Nessuna condizione specifica impostata.

Ottenere('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> solo il URL deve essere fornito.

then(). -> Non sono richieste asserzioni specifiche.

log().all() -> Una volta recuperata tutta la risposta, registra la risposta, le intestazioni e, in sostanza, tutto ciò che la richiesta ti restituisce.

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();

}

Ora notate che il URL Il codice utilizzato è lungo e meno leggibile. Osservando attentamente, noterete che vengono utilizzati 3 parametri di query:

  1. Identificativo del cliente
  2. Password
  3. Conto_No

Rest Assured ci aiuta a passare ogni parte (query, percorso, parametro di intestazione) separatamente, rendendo il codice più leggibile e di facile manutenzione. Inoltre, possiamo parametrizzare i dati da un file esterno a seconda delle necessità.

Per utilizzare query param, torniamo alla nostra definizione della sintassi e vediamo che vengono tutti passati come parte di dato.

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();
}

**Nota che abbiamo usato “corpo” invece di “tutto”; questo ci aiuta a spiegaretracsolo il corpo della risposta.

Produzione:

Ottenere il codice di stato della risposta

Il prossimo metodo che implementeremo tramite script consiste nell'ottenere il codice di stato e inserire un'asserzione per convalidarlo.

Passo 1) Crea un metodo chiamato getResponseStatus().

Passo 2) Utilizza la stessa struttura di richiesta utilizzata sopra. Copialo e incollalo.

Passo 3) Invece di registrarlo, usa 'getStatusCode' Metodo integrato di Rest Assured per recuperare il valore del codice di stato.

Passo 4) Per affermare che il tuo codice di stato è 200, usa le parole chiave assertThat().statusCode(previstoCode).

**Nota – URL è una variabile utilizzata per semplicità. URL contiene l'intera richiesta API 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);
}

Produzione:

Esigenza aziendale

Una delle regole base dell'automazione è che dobbiamo mettere dei checkpoint in modo che il test proceda solo se tutte le condizioni richieste sono soddisfatte. Nei test API, la convalida più elementare consiste nel verificare se il codice di stato della richiesta è nel formato 2XX.

Il codice completo, finora:

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);
}

}

* Nota:

  1. 200 è una risposta positiva in questo scenario. A volte, potrebbe essere necessario che la richiesta fallisca, nel qual caso si potrebbero usare 4XX o 5XX. Prova a modificare il codice di stato fornendo parametri non validi e verifica.
  2. Quando affermiamo una condizione, non verrà stampata sulla console a meno che non si verifichi un errore.

Script per recuperare diverse parti di una risposta

Oltre al corpo della risposta e al codice di stato, REST Assured espone anche intestazioni, tempo di risposta e tipo di contenuto tramite espressioni concatenabili.tracmetodi tor. La parola chiave 'extract' è essenziale per recuperare queste parti specifiche.

testata

Stai tranquillo è un linguaggio molto semplice e recuperare le intestazioni è altrettanto semplice. Il nome del metodo è headers(). Come prima, creeremo un metodo autonomo per fare lo stesso.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Si noti che 'given().when()' viene omesso in questo caso e la riga di codice inizia da get(). Questo perché non viene eseguita alcuna precondizione o verifica prima di effettuare la richiesta e ricevere una risposta. In tali casi, il suo utilizzo è facoltativo.

Uscita:

Esigenza aziendale:

Molto spesso, per la richiesta successiva, è necessario utilizzare il token di autorizzazione o un cookie di sessione, e questi dettagli vengono generalmente restituiti come intestazioni della risposta.

Tempo di risposta

Per ottenere il tempo necessario per recuperare la risposta dal backend o da altri sistemi downstream, Rest Assured fornisce un metodo chiamato "timeIn" con un timeUnit adatto per ottenere il tempo impiegato per restituire la risposta.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

Produzione:

Esigenza aziendale:

Una caratteristica molto importante del test delle API è il loro tempo di risposta, che misura le prestazioni dell'applicazione. Il tempo impiegato per la chiamata può variare a seconda della velocità di Internet, delle prestazioni dell'API in quel momento, del carico del server e di altri fattori che influiscono sui tempi.

Content-Type

È possibile ottenere il tipo di contenuto della risposta restituita utilizzando il metodo "contentType()".

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

Uscita

Esigenza aziendale:

In alcuni casi, ottenere il tipo di contenuto è essenziale per garantire che non vi siano falle di sicurezza per eventuali minacce cross-origin e per confermare che il contenuto trasmesso sia conforme agli standard dell'API.

Recupera il singolo elemento JSON

In base alla risposta fornita, ti viene chiesto di calcolare l'importo totale. Devi recuperare ogni importo e sommarli.

Passi:

Passo 1) Il campo "importo" si trova all'interno di un array con chiave "dichiarazioni", che a sua volta è presente nell'elenco con chiave "risultato".

Passo 2) Rest Assured fornisce un meccanismo per accedere ai valori nell'API utilizzando il "percorso".

Passo 3) Il percorso per raggiungere gli importi è "risultato.dichiarazioni.IMPORTO". Pensalo come XPath in Selenium.

Passo 4) Recupera tutti gli importi presenti in una raccolta, quindi scorri tutti i valori per calcolarne la somma.

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);

}

Nota: Poiché il valore dell'importo è di tipo stringa, lo convertiamo in un numero intero per la somma.

Produzione:

Migliori pratiche per l'automazione dei test REST Assured

Una volta comprese le basi, l'applicazione di modelli rigorosi garantisce l'affidabilità della suite man mano che la superficie delle API si espande. Le pratiche descritte di seguito aiutano i team a evitare test instabili e costi di manutenzione eccessivi.

  1. Centralizzare la base URL: Memorizza l'URI di base e i token di autenticazione in un'unica classe di configurazione o in un file di proprietà. Ciò evita duplicazioni e semplifica il passaggio da un ambiente all'altro.
  2. Utilizzare le specifiche di richiesta e risposta: Consente di creare oggetti RequestSpecBuilder e ResponseSpecBuilder riutilizzabili. Questi oggetti riducono il codice ripetitivo quando molti test condividono intestazioni o asserzioni comuni.
  3. Convalida lo schema JSON: Combina REST Assured con il modulo json-schema-validator per confermare la connessionetracintegrità. I ​​controlli dello schema individuano le modifiche incompatibili prima che raggiungano i consumatori a valle.
  4. Esternalizzare i dati di test: Archivia i payload in file JSON o utilizza i provider di dati da TestNGI dati inseriti direttamente nel codice diventano rapidamente obsoleti.
  5. Eseguire test indipendenti: Ogni test dovrebbe impostare e rimuovere i propri dati. Le suite dipendenti dall'ordine falliscono in modo imprevedibile nelle esecuzioni parallele di CI.
  6. Acquisizione selettiva dei registri: Utilizza `log().ifError()` nelle suite stabili e `log().all()` durante il debug. I log dettagliati rallentano le pipeline CI e nascondono i problemi reali.
  7. Integrazione con CI/CD: Attiva le suite REST Assured tramite Maven Surefire o Failsafe in Jenkins, GitHub Actions o GitLab. Esegui smoke check su ogni commit e test di regressione completi durante la notte.

Adottare queste abitudini fin da subito trasforma l'automazione delle API in una risorsa a lungo termine anziché in un fragile collo di bottiglia.

DOMANDE FREQUENTI

Sì. Gli assistenti IA moderni come ChatGPT e GitHub Copilot possono generare scaffold di test REST Assured a partire dalle specifiche API. Gli ingegneri dovrebbero comunque rivedere il codice generato per verificare le asserzioni, la gestione dei dati e i casi limite prima di integrarlo.

Gli strumenti basati sull'intelligenza artificiale analizzano i modelli di risposta e suggeriscono localizzatori o asserzioni auto-riparanti. Segnalano le modifiche allo schema, raccomandano refactoring e aggiornano automaticamente i dati di test, riducendo la manutenzione manuale quando le API si evolvono frequentemente.

REST Assured è un Java Libreria creata per l'automazione basata sul codice nelle pipeline CI. Postman è un client GUI per l'esplorazione manuale e la creazione rapida di script. I team spesso combinano entrambi gli strumenti durante l'intero ciclo di test.

REST Assured è ottimizzato per REST e JSON. Può inviare payload XML non elaborati per SOAP, ma strumenti dedicati come SoapUI offrire un supporto più ricco per l'analisi WSDL e le asserzioni specifiche di SOAP.

REST Assured si abbina naturalmente con TestNG and JUnit per asserzioni, hook del ciclo di vita e reporting. Allure, Extent Reports e Maven Surefire aggiungono inoltre funzionalità di visualizzazione e integrazione con la CI.

Riassumi questo post con: