Tutorial REST Assunder per i test di automazione API (esempio)

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 la visualizzazione della mappa di Google e cercare un posto in cui vuoi andare, vedi immediatamente i ristoranti nelle vicinanze, vedi le opzioni per il tragitto giornaliero; da alcuni dei principali fornitori di viaggi e scopri tante opzioni a portata di mano. Sappiamo tutti che non sono prodotti Google, quindi come fa Google a dimostrarlo. Usano le API esposte di questi fornitori. Ora, se ti viene chiesto di testare questo tipo di configurazione, anche prima che l'interfaccia utente venga creata o sia in fase di sviluppo, testare le API diventa estremamente importante e testarle ripetutamente, con diverse combinazioni di dati, lo rende un caso molto adatto per l'automazione.

In precedenza, per raggiungere questo obiettivo utilizzavamo linguaggi dinamici come groovy e ruby, ed era una sfida. Pertanto il test API non è stato esplorato dai test funzionali.

Ma utilizzare Rest Assuring, i test di automazione delle API e l'invio di semplici richieste https con personalizzazioni intuitive è semplice se si ha una conoscenza di base di Java. È necessario per comprendere i test API e i test di integrazione, ma pubblica che l'automazione Rest Assured offre un'ottima sicurezza sul back-end mentre i test front-end possono concentrarsi solo sull'interfaccia utente e sulle operazioni lato client. Rest Assured è un open source con molti metodi aggiuntivi e l'aggiunta di librerie lo ha reso un'ottima scelta per l'automazione delle API.

Come configurare Rest Assured.io con Eclipse

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. Stiamo utilizzando Intellij, ma otterrai una struttura simile su qualsiasi IDE che potresti utilizzare.
  2. Apri il tuo POM.xml
Struttura del progetto
Struttura del progetto

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+:

<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 vengano visualizzati errori e non sei sicuro che le dipendenze siano state scaricate correttamente,

  1. Esegui una build Maven per importare tutte le dipendenze, anche in questo caso troverai aiuto su Maven configurato su guru99.
  2. Tuttavia, vedi errori, quindi esegui una pulizia Maven seguita da un'installazione Maven e dovrebbe essere compilato senza errori.
  3. Puoi aggiungere le righe seguenti nella tua classe Java e vedere che non sono presenti errori di compilazione.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Primo semplice script Rest Assured

Sintassi:

La sintassi di Rest Assured.io è la parte più bella, poiché è molto simile a BDD e 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' ti consente di impostare uno sfondo, qui passi le intestazioni della richiesta, i parametri della query e del percorso, il corpo, i cookie. Questo è facoltativo se questi elementi non sono necessari nella richiesta
Quando() La parola chiave "quando" segna la premessa del tuo scenario. Ad esempio, "quando" ricevi/pubblichi/metti qualcosa, fai qualcos'altro.
Metodo() Sostituiscilo con una qualsiasi delle operazioni CRUD (get/post/put/delete)
Poi() Le tue condizioni di asserzione e di corrispondenza vanno qui

Ora che hai la configurazione e alcune nozioni di base sulla sintassi, creiamo il nostro primo semplice test. Va bene se finora la struttura ti sembra nuova, man mano che codifichi interpretando ulteriormente ogni riga, ne prenderai la mano.

Cosa prenderai?

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

Stai tranquillo

Nel caso in cui ricevi un errore sul browser quando provi a ottenere una risposta alla richiesta,

  1. Verifica se hai utilizzato Https o Http. Il tuo browser potrebbe avere impostazioni per non aprire siti Web non sicuri.
  2. Verifica se hai proxy o firewall che impediscono al tuo browser di aprire siti Web.

*Note: – qui non hai utilizzato alcuna intestazione, nessun corpo e nessun cookie. Era un URL e inoltre stai ricevendo contenuti dall'API e non pubblichi o aggiorni alcun contenuto esistente, quindi è una chiamata GET. Ricordatelo 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) Simile alla struttura appresa in precedenza di dato, quando e poi, digita il codice seguente

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

Quando(). -> Nessuna impostazione di condizioni specifiche

Ottenere('http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> è necessario fornire solo l'URL

Poi(). -> Non sono richieste asserzioni specifiche

tronco d'albero(). all() -> Una volta recuperata tutta la risposta, registra la risposta, le intestazioni, essenzialmente tutto ciò che la richiesta ti restituisce.

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

Ora nota che l'URL utilizzato è lungo e meno leggibile, se guardi da vicino, noterai che vengono utilizzati 3 parametri di query che sono

  1. Identificativo del cliente
  2. Password
  3. Conto_No

Stai tranquillo, ci aiuta a passare ogni parte (query, percorso, parametro di intestazione) separatamente, rendendo il codice più leggibile e facile da mantenere. Inoltre, possiamo parametrizzare i dati da un file esterno come richiesto.

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("http://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**Nota che abbiamo usato “body” invece di “all”; questo ci aiuta ad estrarre solo il corpo della risposta.

Produzione:

Ottenere il codice di stato della risposta

Il prossimo metodo che scriveremo sarà quello di ottenere il codice di stato e anche inserire un'asserzione per convalidare lo stesso.

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, utilizziamo il metodo integrato "getStatusCode" di Rest Assured per recuperare il valore del codice di stato

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

**Nota: l'URL è una variabile utilizzata per semplicità. L'URL contiene l'intero URL della richiesta API

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

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

}

* Nota:

  1. 200 è una risposta efficace per questo scenario. A volte, è necessario che anche la richiesta fallisca e quindi potresti utilizzare 4XX o 5XX. Prova a modificare il codice di stato fornendo parametri non validi e controlla.
  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

Il recupero del corpo della risposta e del codice di stato della risposta è già trattato nel segmento precedente. Vale la pena notare che per recuperare parti diverse della risposta, la parola chiave "estrai" è molto importante.

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

Tieni presente che 'given().when()' viene saltato qui e la riga di codice inizia da get(), questo perché non viene effettuata alcuna precondizione o verifica per soddisfare la richiesta e ottenere una risposta. In questi casi, è facoltativo utilizzare lo stesso.

Uscita:

Esigenza aziendale:

Spesso è necessario utilizzare il token di autorizzazione o un cookie di sessione per la richiesta successiva e, nella maggior parte dei casi, questi dettagli vengono 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 nel testare le API è il loro tempo di risposta, per misurare le prestazioni dell'applicazione. Tieni presente che il tempo impiegato per la chiamata potrebbe richiedere più o meno tempo a seconda della velocità di Internet, delle prestazioni dell'API in quel momento, del carico del server e di altri fattori che influiscono sul tempo.

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:

A volte ottenere il tipo di contenuto è essenziale per garantire che non vi siano lacune di sicurezza per eventuali minacce multiorigine o semplicemente per garantire che il contenuto trasmesso sia conforme agli standard dell'API.

Recupera il singolo elemento JSON

Dalla risposta data, ti viene chiesto di calcolare l'importo totale, devi recuperare ogni importo e sommarlo.

Passi:

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

Passo 2) State tranquilli, fornisce un meccanismo per raggiungere i valori nell'API utilizzando "percorso"

Passo 3) Il percorso per raggiungere gli importi è “result.statements.AMOUNT”. Pensalo come Xpath nel selenio.

Passo 4) Recupera tutti gli importi in una raccolta, quindi esegui il ciclo di tutti i valori per calcolare 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 è nel tipo di dati stringa, lo convertiamo in numero intero e lo utilizziamo per la somma.

Produzione:

Sommario

  • Rest Assured è un gruppo di librerie Java che ci consente di automatizzare Test dell'API resto
  • Stai tranquillo lo è Java-based e conoscenza del core Java è sufficiente per impararlo
  • Aiuta a recuperare i valori di richiesta e risposta da complesse strutture JSON
  • Il API la richiesta può essere personalizzata con una varietà di intestazioni, query, parametri di percorso ed eventuali sessioni o cookie da impostare.
  • Aiuta a stabilire affermazioni e condizioni.
  • Anche se Rest Assuring è molto utile quando la risposta è di tipo JSON, i suoi metodi potrebbero non funzionare perfettamente se il tipo di contenuto è ID HTML o testo semplice.

Per saperne di più leggi di più