DevTurtle logo DevTurtle

Tutorial API test con Playwright

guide/ Guida Playwright

Le applicazioni moderne spesso si basano su API (Application Programming Interface) per implementare la comunicazione tra frontend e backend o per integrare servizi di terze parti. Di conseguenza, la qualità e l'affidabilità delle API è cruciale. In questo tutorial, vedremo come usare Playwright per eseguire API test in modo efficace.

Nei precedenti articoli di questa guida abbiamo già visto come usare Playwright per implementare test di navigazione su interfacce web quindi partiremo da quanto già appreso per sperimentare questa nuova funzionalità.

Cos’è un API Test?

Un API test è un tipo di test automatico che verifica se un’API funziona come previsto. Si concentra principalmente su:

  • Funzionalità: L’API restituisce i dati corretti quando viene chiamata con parametri specifici?
  • Sicurezza: L’API è protetta contro minacce o accessi non autorizzati?
  • Affidabilità: L’API gestisce gli errori in modo appropriato e fornisce risposte coerenti?

A differenza dei test dell’interfaccia utente, i test API si concentrano direttamente sulla logica dell’applicazione e sui flussi di dati. Questo li rende più efficienti e meno dipendenti dalle modifiche visive.

Esempio di test con Playwright

Per sviluppare il nostro esempio di API Test useremo una delle API gratuite messe a disposizione da FreeAPI. In particolare proveremo ad invocare l’API “/public/youtube/videos/{videoId}” che permette di recuperare i dettagli di un video YouTube partendo dal relativo ID.

Per testare l’endpoint manualmente è possibile chiamarlo mediante il comando “curl” in console:

curl -X 'GET' \
  'https://api.freeapi.app/api/v1/public/youtube/videos/EQwmQLU1S6I' \
  -H 'accept: application/json'

Invocando il servizio con il videoID dell’esempio, la risposta in formato JSON ha la seguente struttura:

JSON
{
    "statusCode": 200,
    "data": {
        "channel": { ... },
        "video": {
            "kind": "youtube#videoListResponse",
            "items": {
                "kind": "youtube#video",
                "id": "EQwmQLU1S6I",
                ...
            }
        }
    },
    "message": "Video fetched successfully",
    "success": true
}

L’obiettivo del nostro test sarà:

  • verificare che l’API risponda con successo;
  • verificare che l’ID contenuto nel JSON della risposta sia lo stesso passato in input.

Di seguito l’esempio di codice del test Playwright:

TypeScript
import { test, expect } from '@playwright/test';

test('test youtube api', async ({ request }) => {
    const YOUTUBE_URL = 'https://api.freeapi.app/api/v1/public/youtube/videos/';
    const VIDEO_ID = 'EQwmQLU1S6I';
    var resp = await request.get(YOUTUBE_URL + VIDEO_ID, { headers:{ 'accept': 'application/json' } });
    expect (resp.ok()).toBeTruthy();
    var json = await resp.json();
    expect(json.data.video.items.id).toEqual(VIDEO_ID);
});

In sintesi abbiamo eseguito i seguenti passaggi:

  • request.get(YOUTUBE_URL + VIDEO_ID, { headers: { 'accept': 'application/json' } }): effettua una richiesta GET all’endpoint API formato dall’URL base e dall’ID del video. Aggiunge inoltre un header per specificare che ci si aspetta una risposta in formato JSON.
  • expect(resp.ok()).toBeTruthy(): asserzione che verifica che la richiesta API sia andata a buon fine. Il metodo resp.ok() restituisce un valore booleano che è true se il codice di stato HTTP della risposta è compreso tra 200 e 299 (cioè, una risposta di successo). La funzione toBeTruthy() si assicura che il risultato sia positivo.
  • var json = await resp.json(): trasforma la risposta della richiesta in formato JSON in un oggetto JavaScript utilizzabile.
  • expect(json.data.video.items.id).toEqual(VIDEO_ID): Questa asserzione controlla che l’ID del video restituito dalla risposta API (json.data.video.items.id) corrisponda all’ID del video che è stato richiesto (VIDEO_ID). Se l’ID corrisponde, il test passa; in caso contrario, fallisce.

In un solo test abbiamo quindi verificato sia il fatto che il servizio risponda alle chiamate HTTP che la bontà della risposta in quanto abbiamo controllato che l’id del video restituito sia quello corretto.

Playwright è dunque uno strumento completo e versatile che permette di implementare qualsiasi tipologia di test d’integrazione. E’ possibile combinare i test di navigazione con i test sulle API per ottenere una copertura totale sui propri applicativi e monitorare il corretto funzionamento sia del front-end che del back-end.