Apache JMeter è un progetto open source destinato principalmente al test di carico e funzionale delle applicazioni di tipo web, ma non solo. Col tempo infatti è stato esteso con molti connettori, plugin e script di terze parti che lo rendono un ottimo strumento per il test di database, server di posta, server Java Enterprise (JEE), LDAP.
In questo appuntamento vedremo come sia davvero molto semplice impostare un test per misurare le performance di un sito web, utilizzando gli strumenti di base di JMeter.
Preparazione
Prima ancora di costruire il piano dei test (Test plan) sarà bene stabilire cosa vogliamo misurare:
- utenti anonimi vs utenti loggati;
- ricerche;
- inserimento di contenuti: articoli, pagine, commenti;
- pagine di errore;
- tentativi di intrusione: SQL injection, manipolazione dei parametri, URL casuali.
JMeter, se opportunamente configurato, consente di effettuare tutti questi test, ma una descrizione approfondita occuperebbe l’intero blog per mesi! Procediamo quindi nel modo più semplice e utile alla maggior parte dei siti web, ovvero la simulazione di un certo numero di utenti anonimi che visitano il nostro sito, caricando le varie pagine ed effettuando delle ricerche.
Prendiamo come esempio un sito realizzato con Drupal, l’elenco delle URL sarà:
- http://www.example.org/node/1
- http://www.example.org/node/2
- http://www.example.org/node/3
- http://www.example.org/search/node/lorem
- http://www.example.org/search/node/ipsum
- http://www.example.org/search/node/dolor
Le prime tre URL rappresentano pagine o articoli del sito, mentre le ultime tre sono delle ricerche sui termini lorem, ipsum e dolor.
Scarichiamo ora il programma dal sito ufficiale (la versione attualmente disponibile è la 2.5.1), estraiamo l’archivio e lanciamo lo script:
- bin/jmeter.bat su sistemi Windows;
- bin/jmeter sui sistemi UNIX/Linux.
Lo spazio di lavoro che ci viene presentato è diviso in due: sulla sinistra abbiamo un albero rispecchia la struttura del progetto, mentre sulla destra l’area principale dove vengono mostrate le pagine di configurazione. Inizialmente abbiamo solamente due elementi: Test Plan è il progetto vero e proprio, mentre Workbench è una sorta di “clipboard” dove si possono parcheggiare gli elementi durante l’editing.
Creazione del Test Plan
Clicchiamo con il tasto destro su Test plan e selezioniamo dai menu a cascata Add / Threads (Users) / Thread Group. L’elemento Thread Group ci permette di configurare un pool di thread che agiranno in parallelo, simulando il comportamento di utenti reali; immettiamo quindi questi valori:.
- Name: Utenti Anonimi;
- Thread properties:
- Number of Threads: 5. Simula il numero di utenti in parallelo;
- Ramp-up period: indica il tempo impiegato per far partire tutti i thread. Se inseriamo il valore 5, partirà un thread al secondo (vedi Number of Threads);
- Loop count: 10, indica il numero di volte che verranno ripetute le richieste;
- cliccare con il tasto destro del mouse sul thread group Utenti Anonimi, selezionare la voce Add / Config Element / HTTP Request Defaults. Questo elemento permette di condividere le stesse configurazioni su diverse richieste HTTP;
- inserire i valori di Server name or IP e port (senza http://);
- implementation: selezionare HTTPClient4;
- Add / Config Element / HTTP Cookie Manager.
Ora siamo pronti per aggiungere le singole richieste HTTP, per farlo selezionare Add / Sampler / HTTP Request, inserire Name e Path delle pagine da caricare (deve iniziare per “/”), ripetere per ogni URL da testare.
Ora passiamo ai Listener, che sono degli oggetti specializzati nella raccolta dei risultati dei test. Sempre cliccando col tasto destro del mouse sul thread group:
- Add / Listener / Graph Results;
- Add / Listener / View Results Tree.
Siamo pronti per partire! Prima di farlo però, vogliamo darvi un consiglio: se dovete eseguire dei test su uno shared hosting o su un server altrui, è molto importante avvertire il personale, che non verrà impensierito da una quantità anomala di traffico e non prenderà le contromisure necessarie.
Per far girare i test è sufficiente premere CTRL-R oppure andare nel menu Run / Start. Se selezioniamo il nodo Graph Results possiamo vedere in tempo reale il grafico che va via via formandosi; questo grafico ci mostra i tempi di risposta del server, la media, la deviazione standard e altri valori utili per le misurazioni. Il nodo View Results Tree invece ci mostra il log completo di tutte le richieste HTTP e le relative risposte del server.
Sviluppi
Abbiamo visto come sia davvero molto semplice impostare dei test per capire se il nostro sito ha problemi di performance, ma abbiamo utilizzato una frazione infinitesimale delle potenzialità di JMeter. Nel prossimo appuntamento vedremo come utilizzare strumenti più avanzati per eseguire test molto più approfonditi.