JMeter è un'applicazione desktop sviluppata dalla Apache Software Foundation che permette di effettuare test di carico delle proprie applicazioni. Inizialmente JMeter fu progettato per testare le applicazioni Web ma, successivamente, è stato esteso e attualmente permette di testare qualsiasi tipologia di software, da una semplicissima porzione di codice a una applicazione completa. È possibile addirittura simulare la concorrenza attraverso i Threads permettendo quindi di misurare la performance al variare del carico. I risultati prodotti da JMeter forniscono valori statistici come la media, la mediana, la varianza e il throughput.
È possibile scaricare l'ultima versione stabile (2.3.1) dal sito ufficiale. Per lanciare il programma è sufficiente eseguire il file jmeter.bat presente nella cartella bin.
JMeter fornisce moltissime funzionalità, in questo articolo spiegheremo come testare un'applicazione Web mediante richieste HTTP.
Prima di tutto bisogna creare un Piano di Test (Test Plan) che descrive i passi che JMeter dovrà seguire per l'esecuzione del Test. È possibile configurare i seguenti parametri:
- Name: ciascun piano di test viene identificato con un nome che comparirà nel menu si sinistra;
- User Definned Variables: è possibile associare al piano di test n variabili che possono essere richiamate all'interno del test;
- Run Thread Group consecutively: è possibile stabilire se i thread (utenti virtuali) devono essere avviati in modalità sequenziale (al termine di un thread viene avviato il successivo) oppure in modalità parallela (viene lanciato il primo, dopo k secondi viene lanciato il secondo, dopo 2k secondi il terzo e così via);
- Library: è possibile aggiungere delle classi o dei pacchetti jar al classpath.
Possiamo notare come nel menù ad albero sulla sinistra sia stato inserito il nome del nostro piano di test. Cliccando con il tasto destro del mouse sul nome possiamo aggiungere gli elementi al nostro Test Plan.
L'elemento principale di un Test Plan è il Thread Group che può contenere tutti gli altri elementi. Il Thread Group permette di impostare il numero di threads che simulano l'accesso concorrente di un numero variabile di utenti, il tempo massimo che intercorre dall'avvio del primo thread all'avvio dell'ultimo (ramp-up period) e il numero di volte che deve essere eseguito il test.
Aggiungiamo, quindi, un Gruppo di Thread che rappresenta gli utenti della nostra Web application.
È possibile accedere alle proprietà del Thread Group cliccando sul nome corrispondente nel menù di sinistra.
Adesso aggiungiamo una richiesta HTTP, per fare ciò clicchiamo con il tasto destro sul nome del Thread Group presente nel menu di sinistra e selezioniamo la voce Add->Sampler->Http Request.
Si aprirà una schermata nella quale è possibile impostare i seguenti parametri principali:
- Name: nome con il quale identificare la richiesta nel menu;
- Server Name o IP: nome del server o IP al quale connettersi;
- Method: metodo GET o POST con il quale inviare la richiesta;
- Path: risorsa del server da richiamare;
- Parameters: parametri da passare nella richiesta.
Per visualizzare i risultati di un test occorre inserire dei Listener. JMeter mette a disposizione diverse tipologie di Listener ognuno dei quali visualizza i risultati in modo differente. I principali sono i seguenti:
- graph results che costruisce un grafico dell'andamento dei tempi di risposta;
- view results tree che riassume tutte le richieste e risposte HTTP eseguite durante il test.
I parametri principale del grafico sono i seguenti:
- throughput: stima del numero di richieste che il server può servire al minuto;
- data: tempo di risposta in millisecondi per ciascuna richiesta;
- average, median, deviation: andamento del tempo medio di risposta, della mediana e della deviazione standard.
Fatto ciò possiamo finalmente lanciare il nostro Test cliccando sulla voce di menù Run->Start.
Poiché JMeter è uno strumento utilissimo per testare la performance di un'applicazione e analizzare i tempi di risposta, non possiamo trascurare il modo in cui eseguire i nostri test per renderli quanto più reali possibile. Possiamo analizzare tre situazioni differenti ognuna delle quali ha dei vantaggi e degli svantaggi.
- Lanciare il test dalla stessa macchina sulla quale è in esecuzione il server Web.
- pro: non ci sono ritardi introdotti dalla rete.
- contro: JMeter entra in competizione per le risorse del server.
- Lanciare JMeter da una macchina remota diversa da quella in cui è in esecuzione il server Web.
- pro: JMeter non influisce sulle prestazioni del server.
- contro: possibili ritardi introdotti dal traffico del segmento di rete utilizzato.
- Lanciare n istanze di JMeter da macchine remote diverse da quella in cui è in esecuzione il server Web.
- pro: si minimizza il problema dei colli di bottiglia di rete.
- contro: configurazione e avvio un po' più laborioso.