I test di performance

In ambito informatico ogni anno che passa diventa sempre più importante che un’applicazione non solo funzioni ma anche che sia veloce nell’erogare le sue funzionalità. E che continui a fornire tali funzionalità in maniera soddisfacente, anche ad esempio in caso di eventuali aumenti di carico ipotizzati per il sistema.

Una valida tecnica utilizzata per il controllo delle performance di un’applicazione è quella dell’utilizzo dei test di performance. Essa è stata recentemente introdotta anche dal laboratorio smeup in maniera sperimentale su alcuni prodotti, quali Web.UP e framework IoT.

Un test di performance è una simulazione controllata e fittizia del comportamento degli utenti, eseguita in un ambiente di test parallelo alla produzione. In ambito web ad esempio possono essere simulati un determinato numero di utenti concorrenti che effettuino sull’applicazione delle specifiche chiamate ad URL o degli specifici percorsi di utilizzo (ad esempio: login, click su una lista di ordini, click sul dettaglio dell’ordine…). Modificando distribuzione degli utenti concorrenti, chiamate/percorsi e configurazioni dell’ambiente di test e monitorando ciò che avviene è possibile valutare la reattività e la stabilità del sistema ad un dato carico, nonché la scalabilità, l’affidabilità e il buon utilizzo delle risorse.

Tipologie di test di performance

Tutti questi obiettivi possono essere raggiunti con test di performance di tipologia differente. Si possono infatti distinguere varie categorie di test, ciascuna con un obiettivo specifico, tra le quali si elencano di seguito le quattro ritenute più utili in smeup.

Load testing

Quella dei load testing (test di carico) è la più semplice e più conosciuta forma di test di performance. Essa serve a monitorare il sistema sottoponendolo a determinati carichi di lavoro, generalmente simili a quelli attesi durante l’esercizio in produzione.

Capacity testing

Il capacity (o scalability) test ha lo scopo di monitorare il sistema sottoponendolo a carichi di lavoro di diversa intensità, per valutarne la capacità di scalare in caso di futuri aumenti del volume di carico.

Stress testing

Lo stress test ha lo scopo di provare a mandare in tilt il sistema sotto test, ad esempio sovraccaricando le sue risorse con un volume di traffico molto alto oppure sottraendogli risorse. Lo scopo di questo tipo di test è verificare che dopo la situazione di crash il sistema recuperi il più possibile in maniera indolore (in termine tecnico, che il sistema sia fault-tolerant), ovvero ad esempio che recuperi l’ultimo stato corretto, che mostri messaggi di errore comprensibili all’utente, etc…

Endurance testing

L’endurance test, detto anche soak test, consiste nell’applicare il carico simulato per un periodo di tempo esteso, in modo da monitorare eventuali problemi di degradazione delle performance nel tempo. Può infatti capitare che l’applicazione saturi progressivamente le risorse disponibili. Un esempio è quello che può avvenire con la memoria, a causa di quelli che sono definiti memory leaks (consumo indesiderato di memoria dovuto alla mancata deallocazione di variabili o dati non più utilizzati dai processi in atto).

Strumenti

Per un test di carico sono necessarie due tipologie di strumenti differenti:

1.Performance scripting tool.

Queste tipologie di tool permettono:

  • Di creare vari template di percorsi utente sull’applicazione in esame
  • Di sottoporre la propria applicazione a diverse simulazioni, combinando determinate distribuzioni di concorrenza e durata con i workflow definiti nella prima fase

2. Performance monitoring tool

Queste tipologie di tool permettono di monitorare l’applicazione e le sue dipendenze, ad esempio permettono di controllare:

  • I tempi di risposta delle varie transazioni
  • Le metriche relative ai database (es: elenco delle query meno performanti…) o relative ai web services (es: elenco delle chiamate più lente) utilizzati dall’applicazione
  • Le metriche dei server che ospitano l’applicazione (es: cpu, memoria…)
  • Le metriche dei runtime applicativi che ospitano l’applicazione.

Essi possono anche permettere di effettuare quella che si definisce profilazione del codice, per individuare quali parti del software contribuiscono maggiormente a ridurre le performance.

Test di performance in smeup

In smeup si stanno attualmente utilizzando i test di performance su alcune applicazioni pilota, quali Web.UP e framework IoT.
Lato performance scripting si è scelto il prodotto Jmeter, uno dei software leader in tale ambito, associato all’utilizzo di Selenium Web Driver per la creazione dei template dei percorsi utente.

Lato performance monitoring sono state esaminate diverse soluzioni e sono stati in particolare incrociati più tool di monitoring, agganciati sia alle applicazioni sia alle macchine ospitanti, in maniera tale da poter controllare il maggior range di metriche possibili.

smeup dashboard test performance

Estratto di esempio della dashboard associata ad un test di performance eseguito su Web.UP.

smeup dashboard monitoring

Estratto di esempio della dashboard di monitoring delle metriche dell’applicazione Web.UP soggetta a test di performance.

smeup dashboard monitoring metriche

Un altro estratto di esempio della dashboard di monitoring delle metriche del sistema ospitante l’applicazione Web.UP soggetta a test di performance.

Particolarmente utili si sono rivelati i test di tipologia endurance sulle due applicazioni in esame, che hanno permesso di individuare e risolvere colli di bottiglia nell’utilizzo prolungato delle stesse. In questi casi si è mantenuto lo stesso carico costante per diverse ore e si è monitorato l’eventuale degrado delle metriche in esame.
In base a quanto già riscontrato e alle potenzialità dei test di performance si comprende come il loro supporto può essere notevole nell’aumento della QA delle applicazioni smeup. Un buon obiettivo per il futuro potrebbe essere quello di riuscire ad affiancare ai test automatici della correttezza delle funzionalità delle applicazioni smeup anche test di performance il più possibile automatizzati. Una modalità potrebbe essere quella di riuscire ad esempio a schedulare l’esecuzione periodica di test di performance sull’applicazione in sviluppo, i quali siano anche in grado di allertare automaticamente il laboratorio nel caso siano state superate determinate soglie di alcune metriche scelte.

Scopri di più su smeup LAB e su come sviluppa le sue soluzioni.

Chiara Zambelli
Responsabile CI/CD – smeup
My LinkedIn Profile

Published On: Giugno 12th, 2018 / Categories: ERP / Tags: , , , , , , /

Naviga per categoria:

Seleziona una categoria d’interesse dal nostro magazine