Monday, March 31, 2008

Test e profiling di applicazioni web

Testare e profilare applicazioni web è una attività davvero semplice, infatti sono disponibili molti strumenti, alcuni dei quali anche open source, per svolgere questo compito.

La procedura da seguire varia in funzione del tipo di attività che si vuole eseguire e che individuamo in quattro tipologie:
  1. test funzionali, utili per verificare che l'applicazione risponda ai requisiti
  2. test di non regressione, utili per evitare di introdurre errori durante la manutenzione evolutiva
  3. test di performance, o stress test, per individuare i limiti imposti dall'accoppiata hardware e software
  4. profilatura per l'individuazione di colli di bottiglia e di punti di memory leak
In tutti i casi il tool che suggerisco di utilizzare è Jakarta JMeter, un tool open source realizzato in Java, e quindi utilizzabile su qualunque piattaforma, dotato di comoda interfaccia utente grafica per la realizzazione, manipolazione e verifica dei test.

Se l'applicazione che vogliamo sottoporre a test esiste già o ha una interfaccia utente già definita mediante un prototipo statico, l'attività di creazione del test è davvero banale:
  1. si lancia JMeter e si crea nel Workbench un elemento di tipo HTTP Proxy Server che utilizzeremo per registrare le attività che svolgeremo all'interno del nostro browser
  2. si lancia il browser preferito e si passa alla configurazione dei parametri di rete per fare in modo che utilizzi JMeter (127.0.0.1:8080) come se si trattasse di un server proxy
  3. si attiva, non necessariamente sulla macchina locale, l'applicazione web che vogliamo sottoporre al test
  4. utilizziamo il nostro web browser per navigare all'interno dell'applicazione avendo cura di eseguire tutte le attività che vogliamo sottoporre al test
Alla fine di questi passaggi JMeter avrà registrato tutte le operazione che avremo effettuato e sarà in grado di replicarle tutte le volte che vogliamo.

Se il nostro obiettivo è quello di creare una suite di test funzionali o di non regressione possiamo istruire JMeter per utilizzare una certa serie di parametri oppure di verificare mediante regular expression che l'output restituito contenga una determinata stringa.

Se il nostro obiettivo è quello di effettuare un test prestazionale o una profilatura allora dovremo chiedere a JMeter di eseguire il test in multiutenza ovvero come se si molti computer si connettessero contemporaneamente all'applicazione oltre che di raccogliere le informazioni statistiche di cui abbiamo bisogno.

Gli accorgimenti che suggerisco di seguire sono i seguenti:
  • raccogliere sempre in un unico punto i parametri relativi al server che si va a testare, così da non dover modificare tutta la suite di test nel caso si dovesse ripetere il test sulla stessa applicazione deployata su un altra macchina
  • attivare la gestione della sessione attraverso cookies o attraverso url rewriting
  • definire sempre un listener per verificare le attività svolte dal tool
  • inserire un eventuale processo di autenticazione (login) in un controller che lo esegua solo la prima volta
  • definire eventuali liste di parametri comuni a più richieste all'interno dell'apposito elemento di configurazione

No comments: