Un'Application Programming Interface (API) consente a due sistemi di comunicare tra loro. In sostanza, un'API offre il contratto e il linguaggio che regolano la comunicazione tra due sistemi.
Il test delle API consiste nella valutazione di queste interfacce per garantire che soddisfino gli standard di funzionalità, affidabilità, prestazioni e sicurezza, generalmente inviando varie richieste all'API e analizzando le risposte. Il test delle API è una priorità assoluta per quasi tutti gli sviluppatori, con oltre il 90% degli sviluppatori che dichiarano di testare o pianificare di testare le loro API, secondo l'indagine globale sulle API di Rapid del 2022.
Gli endpoint API sono percorsi o URL specifici che un'API mette a disposizione, consentendo l'accesso a diverse funzionalità dell'applicazione software. Ogni endpoint corrisponde a una funzione specifica, come recuperare dati, aggiornare un record o eseguire un calcolo, ed è progettato per gestire determinati tipi di richieste e risposte all'interno della struttura complessiva dell'API.
Testare regolarmente gli endpoint delle API durante l'intero processo di sviluppo aiuta a individuare i problemi anticipatamente, risparmiando tempo e risorse nel lungo termine.
Quindi, come si può effettuare il testing delle API in modo efficiente durante tutto il ciclo di vita dello sviluppo di un'API? Vediamolo insieme!
Cosa Sono gli Endpoint API?
Un'API è un insieme di regole e protocolli per la creazione e l'interazione con applicazioni software, che permette a diversi sistemi software di comunicare tra loro. La documentazione e le specifiche di ogni API indicano come possono essere scambiati i dati.
Le API possono utilizzare richieste HTTP per recuperare dati da un'applicazione web o da un server, proprio come viene visualizzata una pagina web.

Questi servizi sono raggiungibili tramite URL, proprio come quelli che usi per visitare un sito web. All'interno di un'API, un endpoint è una posizione particolare che riceve le richieste e le elabora. Tramite la trasmissione e ricezione di dati e comandi attraverso l'endpoint, si facilita la comunicazione tra diverse applicazioni e sistemi.
Consente agli sviluppatori di accedere rapidamente e utilizzare dati e funzionalità da altri sistemi, evitando così la necessità di costruire tutto da zero nelle nuove applicazioni.
Esempio di un Endpoint API
Vediamo com'è fatto un endpoint API. Userò come esempio la Cat API e la loro documentazione Postman:

In questo caso, gli endpoint sono "images", "favorites", "breeds", ecc. Ognuno consente diverse azioni, che vengono svolte tramite differenti metodi di richiesta HTTP. Ad esempio, i metodi più comunemente usati sono quelli che realizzano le operazioni CRUD: POST per la creazione, GET per la lettura, PUT per l'aggiornamento e DELETE per l'eliminazione.
La documentazione API dovrebbe fornire dettagli sugli endpoint disponibili, il metodo di richiesta consentito per l'endpoint e i modelli della richiesta e della risposta. Con queste informazioni, dovremmo essere in grado di iniziare a testare gli endpoint. Ne parleremo in una delle prossime sezioni.
Perché Testare gli Endpoint API?
Ogni API è creata per svolgere determinate funzioni e la funzionalità dell'applicazione dipende dalle transazioni API per ricevere una risposta. La transazione di base può comportare molte chiamate API interne; se una di queste chiamate fallisce, l'intero sistema potrebbe bloccarsi e smettere di funzionare. Inoltre, diverse applicazioni possono utilizzare la stessa API, quindi se un'API presenta malfunzionamenti, può danneggiare un gran numero di applicazioni. Il testing degli endpoint delle API aiuta a prevenire problemi prima che li scopra il cliente.
Come Testare gli Endpoint API
Il test delle API può essere effettuato sia manualmente che in modo automatico. Entrambi i tipi di test possono essere eseguiti tramite strumenti per il testing delle API.
A differenza dei test UI, i test delle API non dipendono da un browser. Tuttavia, è possibile utilizzare uno strumento di test delle API che funzioni da client.
Sulla base della documentazione, possiamo estrarre l'endpoint a cui inviare la richiesta HTTP, il metodo HTTP, i parametri di query, il corpo della richiesta (se necessario), i possibili codici di stato della risposta HTTP e il corpo della risposta HTTP. Utilizzando queste informazioni, possiamo identificare i casi di test API da eseguire.
A seconda dei requisiti, possiamo decidere quali test eseguire: dai test funzionali a quelli non funzionali, come i test di performance, test di carico e test di sicurezza.
Il test API più semplice consiste nell'inviare la richiesta e convalidare la risposta. A seconda del tipo di richiesta e dell'endpoint, potremmo aver bisogno di alcune informazioni aggiuntive per inviare la richiesta. Ecco un elenco di ciò che serve per inviare una richiesta:
- Endpoint/URL: questo è l'indirizzo a cui viene inviata la richiesta
- Il corpo della richiesta: per metodi di richiesta come POST e PUT, è richiesto un corpo, che contiene i dati da inviare al server
- Parametri di query: possono essere utilizzati parametri di ricerca aggiuntivi per limitare i risultati restituiti nella risposta
- Header: si tratta di metadati che possono essere inviati insieme alla richiesta. Nell'esempio del gatto visto prima, una chiave API può essere usata come header, il che permette di recuperare più informazioni rispetto a quando non si usa una chiave:

Dopo che la richiesta è stata inviata con successo, il test dovrebbe controllare la risposta. Gli aspetti da verificare nella risposta sono:
- Il codice di stato HTTP: ogni risposta ha un codice di stato. Questi possono essere raggruppati in 5 categorie principali: i codici che iniziano per 1 (100-199) rappresentano una risposta informativa, quelli che iniziano per 2 (200-299) rappresentano un messaggio di successo, i codici tra 300 e 399 sono redirect, i codici che iniziano per 4 (400-499) sono errori lato client e i codici nella fascia dei 500 sono errori lato server.
- Il corpo della risposta HTTP: le informazioni che tornano dal server. La documentazione dovrebbe indicare quale tipo di informazione dovrebbe contenere la risposta, per esempio:

- Header di risposta: metadati che vengono restituiti dai server
- Tempo di risposta: se ci interessa anche la performance dell’API.
Per un esempio veloce, utilizzerò Postman per mostrare come si presenta una richiesta GET utilizzando la Cat API. Invierò una richiesta GET per l'endpoint delle immagini. In questo caso, è sufficiente usare l'indirizzo dell'endpoint, il metodo GET e inviare la richiesta:

Dopo aver inviato la richiesta, possiamo vedere il codice di risposta HTTP, il corpo e il tempo impiegato per ricevere una risposta:

Il contenuto del body della risposta è ciò che un’API restituisce in base all’input fornito, mentre il codice di stato della risposta indica lo stato attuale della richiesta.
Ci sono differenze nei tipi e nelle dimensioni dei dati di una risposta API. Testo semplice, un documento XML, una struttura dati JSON e altri formati sono possibili per le risposte. Possono essere anche un file JSON/XML di cento pagine o una stringa semplice di poche parole, persino vuota. Pertanto, è fondamentale selezionare una tecnica di verifica appropriata per una specifica API.
Creazione di casi di test per API
I casi di test funzionali possono essere estratti utilizzando le tecniche di testing black box. La documentazione specifica quali tipi di dati accetta ciascun parametro, quindi possono essere create partizioni e limiti basati su questi dati.
Successivamente, possiamo creare scenari più complessi combinando più richieste in un singolo test. Ad esempio, un test che crea una risorsa, la aggiorna, la legge e poi la elimina, invierà 4 richieste diverse.
Sia i test positivi che quelli negativi sono necessari nei test API per verificare che l’API funzioni come richiesto. Dato che il test delle API è una sotto-categoria del black-box testing, i dati di input e output sono i fattori trainanti di entrambi i tipi di test. Alcune idee per la creazione di scenari di test sono le seguenti:
Scenari positivi:
- Verificare che l’API accetti l’input e produca il risultato desiderato come da requisito.
- Verificare che il codice di stato della risposta—sia che restituisca un codice di errore o un 2xx—venga restituito nelle modalità indicate dal requisito.
- Indicare il numero minimo e massimo di campi che devono essere inseriti.
Scenari negativi:
- Assicurarsi che, nei casi in cui l’output atteso sia assente, l’API restituisca una risposta adeguata.
- Eseguire un test di validazione dell’input.
- Esaminare i comportamenti dell’API a diversi livelli di autorizzazione.
Test non funzionali delle API
Oltre al testing funzionale, possiamo effettuare vari test non funzionali sulle API. Ecco alcuni tra i più importanti:
Test delle prestazioni
Il test delle prestazioni si riferisce alla misurazione delle prestazioni del software sotto diversi carichi di lavoro, scenari e condizioni. Può aiutarti a individuare i colli di bottiglia delle risorse, garantire la stabilità e la scalabilità. I sotto-tipi di test delle prestazioni includono il test di carico, il test di stress, il test di endurance e il test di spike. Il test delle prestazioni più diffuso, noto come test di carico, simula un traffico medio o elevato di utenti sul tuo software. Può aiutarti a valutare la throughput del tuo software, i tempi di risposta e l'utilizzo delle risorse. Apache JMeter, uno strumento open source Java che può generare e inviare diverse richieste alla tua API e misurare i risultati, è uno dei migliori strumenti per il test di carico della tua API.
Test di sicurezza
Il processo di verifica che il tuo software sia protetto da attacchi dannosi, accessi non autorizzati e violazioni di dati è noto come test di sicurezza. Può aiutarti a garantire la privacy, l'integrità e la disponibilità dei dati della tua applicazione. Possono essere effettuati test di sicurezza a vari livelli, tra cui database, applicazione e rete. Code review, penetration test, scansioni di vulnerabilità e ethical hacking sono alcuni dei metodi più diffusi per il test di sicurezza. Postman è un apprezzato strumento multipiattaforma che può inviare e ricevere richieste alla tua API e testare funzionalità di sicurezza come autenticazione, autorizzazione, crittografia e gestione degli errori. È uno dei migliori strumenti per il test di sicurezza della tua API.
Test di affidabilità
Il test di affidabilità è il processo che determina quanto il tuo software sia affidabile e coerente nel tempo e in diverse situazioni. Può aiutarti a garantire la capacità di recupero, la tolleranza ai guasti e la disponibilità del tuo software. Puoi eseguire test di affidabilità introducendo intenzionalmente bug, errori o guasti nel tuo software e osservando come reagisce e si riprende. Mean time between failures (MTBF), mean time to failure (MTTF), mean time to repair (MTTR) e failure rate sono alcune delle metriche più utilizzate per i test di affidabilità. Chaos Monkey, uno strumento che termina casualmente istanze nel tuo ambiente cloud e testa come il tuo software gestisce tali interruzioni, è uno dei migliori strumenti per i test di affidabilità della tua API.
Considerazioni finali
Il test delle API è una competenza sempre più importante per i professionisti QA. È essenziale testare in modo approfondito gli endpoint delle API per assicurarsi che funzionino come previsto e soddisfino gli standard richiesti. Testare gli endpoint API aiuta a identificare e risolvere potenziali problemi o bug e valida la funzionalità complessiva dell'applicazione.
Per testare efficacemente gli endpoint delle API, è importante seguire le best practice come progettare casi di test completi, considerare vari input e output, e utilizzare strumenti di automazione per un test efficiente e affidabile. Inoltre, sfruttare ambienti di test che simulano da vicino gli scenari del mondo reale può migliorare ulteriormente la precisione dei test degli endpoint API.
Un test completo ed efficace degli endpoint API è essenziale per garantire l'affidabilità, le prestazioni e la funzionalità delle applicazioni moderne. Comprendendo cosa sono gli endpoint API e come testarli, gli sviluppatori possono assicurare una corretta integrazione delle loro applicazioni con altri sistemi, offrendo al contempo un'esperienza utente di alto livello.
Ti invitiamo a iscriverti alla newsletter QA Lead per ricevere aggiornamenti su nuovi contenuti relativi ai test.
