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.

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.
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
- Crea un progetto Maven nel tuo IDE. Noi utilizziamo IntelliJ, ma otterrai una struttura simile con qualsiasi IDE tu utilizzi.
- Apri il tuo file POM.xml.
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:
- Esegui una build Maven per importare tutte le dipendenze. Troverai aiuto sulla configurazione di Maven su Guru99
- Se gli errori persistono, eseguire un Maven clean seguito da un Maven install. La build dovrebbe completarsi senza errori.
- 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 acquisita da REST Assured
Nel caso in cui si verifichi un errore nel browser quando si tenta di ottenere una risposta alla richiesta:
- Verifica se hai utilizzato HTTPS o HTTP. Il tuo browser potrebbe avere delle impostazioni che bloccano i siti web non sicuri.
- 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:
- Identificativo del cliente
- Password
- 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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.


