Performance testing: tipologie e casi d'uso

Se almeno una volta ti è venuta in mente la domanda su come simulare degli utenti che usano l’API che hai progettato, oppure hai avuto bisogno di stimare quante richieste la tua API può o non può gestire, allora avrai dovuto lavorare con dei test.
TOC
Certo, in alcune realtà questa attività può essere in carico al team che si occupa di QA, ossia Quality Assurance, ma la realtà è che sapere come testare le prestazioni della tua API ti aiuterà a consolidare la conoscenza della tecnologia o del framework che stai utilizzando per la creazione e quindi anche a migliorare come professionista.
Quando esegui un test, magari noterai un problema, e quindi magari tornerai al tuo IDE per capire se il problema è una query, o una funzione che manca di logica, e allora inizierai a porti delle domande e ad approfondire, selezionando delle strutture dati migliori, riscrivendo parte del codice, e via dicendo.
Alla fine di tutto questo, ne avrai guadagnato in esperienza, perché ciò che impari dai test delle prestazioni è infinito.
La realtà è che mi chiedessero oggi cosa vuol dire essere un Senior Backend Engineer, la mia risposta sarebbe che significa conoscere almeno un linguaggio di programmazione che si occupa di sviluppo di sistemi back-end, capisce la progettazione di questi sistemi e i relativi pattern, è esperto/a delle migliori pratiche e tool DevOps e quindi anche di come eseguire dei test delle prestazioni, nonché ha una buona esperienza in strutture dati e algoritmi.
Ma, tornando al cuore del post, quali sono i vari tipi di testing, e quali sono alcuni esempi di scenari utili?
Tipologie di test
Il test delle prestazioni è fondamentale per garantire che un’applicazione possa gestire il carico degli utenti e rispondere in modo efficace. Esistono diversi tipi di test, ognuno con obiettivi specifici e casi d’uso. Di seguito sono riportate le principali categorie di performance test, accompagnate da un esempio pratico per ciascuna.
Load Testing
Il load testing valuta come un sistema si comporta sotto carichi di utenti che è possibile e auspicabile prevedere.
Un caso d’uso è il seguente: immagina di lanciare un sito di e-commerce e di prevedere che 500 utenti navigheranno e faranno acquisti simultaneamente durante le ore di punta. Un test di carico simula 500 utenti che navigano nel sito, aggiungono articoli al carrello e completano gli acquisti.
Tra le metriche che è importante valutare abbiamo sicuramente il tempo di risposta, i tempi delle query al database e l’utilizzo delle risorse del server.
L’obiettivo dei test diventa quindi identificare query o endpoint poco performanti per ottimizzare l’esperienza utente e prevenire perdite di entrate durante i periodi di alta affluenza.
Stress Testing
Lo stress testing determina il punto di rottura del sistema applicando un carico superiore a quello previsto.
In altre parole, lo scenario è il seguente: vuoi capire come la tua piattaforma social gestisce picchi di traffico, ad esempio durante un evento virale? Un test di stress simula 50.000 utenti che pubblicano, mettono “mi piace” e commentano simultaneamente. Se 30.000 utenti sono il tuo limite inferiore, quindi il risultato che viene fuori da un test di carico, magari 50.000 sarà il limite superiore.
Cosa valutare in termini di metriche? Bisogna analizzare la stabilità del sistema, i tassi di errore e il tempo di recupero dopo un guasto.
L’obiettivo in questo caso è ottenere informazioni sui limiti che portano il sistema a fallire e sulle strategie di recupero per mantenere la fiducia degli utenti durante situazioni di alta domanda.
Scalability Testing
Questo test verifica la capacità del sistema di scalare in base all’aumento del carico o della disponibilità delle risorse.
Qui il caso d’uso è semplice: la tua app di streaming video prevede di aggiungere 1 milione di utenti l’anno prossimo, raddoppiando la base attuale. Un test di scalabilità aumenta gradualmente il numero di utenti simultanei (da 10.000 a 50.000) e osserva le prestazioni del sistema.
In questo caso, è importante valutare metriche quali i tempi di risposta del server, le prestazioni del database e l’efficienza della scalabilità orizzontale o verticale.
Questo perché l’obiettivo primario diventa quello di validare se l’attuale infrastruttura e le relative risorse e configurazioni, come l’autoscaling o lo sharding del database, sono efficaci.
Volume Testing
Questo tipo di test è utile per testare la capacità del sistema di gestire grandi volumi di dati mantenendo prestazioni ottimali.
Questo caso d’uso è più particolare: ad esempio, un’applicazione finanziaria deve elaborare e memorizzare 10 milioni di transazioni giornaliere. Un test di volume carica il database con un grande set di dati (10 milioni di record) e testa recuperi, aggiornamenti e query.
Risulta quindi importante valutare metriche come il tempo di esecuzione delle query, l’I/O su disco e le prestazioni degli indici del database.
Obiettivo finale: garantire operazioni fluide per gli utenti finali e ridurre il rischio di inattività durante transazioni critiche.
Endurance Testing (alias Soak Testing)
Infine, esiste l’endurance testing, che verifica la stabilità del sistema su un range di tempo prolungato.
Se prendessimo come caso d’uso una piattaforma di gaming online, queste spesso si trovano a dover gestire 20.000 giocatori contemporaneamente per 48 ore senza downtime o perdite di dati.
Un test di questo tipo simula il gioco continuo da parte di 20.000 utenti per due giorni per essere certi della stabilità su un tempo più lungo di qualche ora.
Cosa tenere in considerazione come metriche? Sicuramente l’utilizzo della memoria, l’utilizzo della CPU e i tassi di errore nel tempo.
Scoprire perdite di dati o l’eventuale calo delle prestazioni per mantenere la soddisfazione degli utenti evitando costosi downtime diventa l’obiettivo primario.
Questi tipi diversi di testing delle prestazioni assicurano che il tuo servizio sia pronto a fronteggiare vari scenari reali, dalla gestione del traffico normale a condizioni estreme e prolungate.
Per sapere come utilizzare JMeter per eseguire dei test, leggi questi articoli.