-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« Il test di Joel | Home | ciscoscan »

Test di applicazioni web
01.04.04

E' cosa risaputa che "a causa" di CPAN programmare in Perl diventa rapidamente poco interessante: uno ha un'idea, gli pare buona, non vede l'ora di trafficare un po' per avere un oggettino da mostrare e provare, poi in un modo o nell'altro scopre che quell'idea la ha già avuto qualcun altro, e che questo qualcuno l'ha messa su CPAN.
La storia che segue è quindi isomorfa a tante altre, ma per un po' di motivi, mi pare particolarmente interessante.

Uno dei miei chiodi fissi, ultimamente, è il test delle applicazioni: sono assolutamente convinto che i test siano uno strumento utile e che tendano a far guadagnare tempo durante lo sviluppo, purtroppo però non sono abbastanza bravo da scriverli e mantenerli in maniera sufficientemente veloce. Inoltre, finché si tratta di scrivere i test per i moduli di backend di un'applicazione, non c'è problema, ma non mi è molto chiaro come testarne l'interfaccia utente.

Questa sera, dunque, mi è venuto in mente di provare a vedere WWW::Mechanize, che pare promettere bene. In effetti l'interfaccia del modulo è piuttosto intuitiva, e pare semplice mettere a punto degli script che girino per l'applicazione e verifichino i risultati ottenuti. Semplice, ma lungo e tedioso.

Enters WWW::Mechanize::Shell.

Questo modulo implementa una sorta di shell che mima un browser web. Ecco un esempio di interazione:

# Search for a term on Google
get http://www.google.com
value q "Corions Homepage"
click btnG

La cosa bella è il comando script di WWW::Mechanize::Shell, che trasforma la sessione appena intercorsa in uno script Perl basato su WWW::Mechanize. Comincia a frullarvi qualche rotella? Proseguo.

Per preparare i test per la propria applicazione, basta passare un po' di tempo davanti a WWW::M::S e salvare, volta per volta, le sessioni che andranno a costituire l'insieme di test dell'applicazione (ad esempio: login con password sbagliata, login con password corretta, inserimento dati, inserimento dati incompleti...). E tutto questo lavoro si dovrà fare una volta sola.

Bello, ma scomodo. Usare una shell al posto di browser e mouse, almeno per quanto riguarda le applicazioni web, è scomodo. E qui salta fuori la mia idea (e come vi ho già anticipato, su CPAN c'è già).

Perchè non fare in modo che sia l'applicazione stessa, mentre viene usata, a produrre lo script per WWW::Mechanize? La cosa avrebbe il considerevole vantaggio di permettere ai tester (che in un mondo ideale non coincidono con gli sviluppatori) di includere nel ticket di segnalazione di un errore i passi esatti per riprodurlo (modulo lo stato particolare di altri pezzi del sistema, ovviamente). In altri termini, si scriverebbe una parte importante del codice di test direttamente usando l'applicazione.

Stavo pensando a come implementare questa cosa, quando mi sono imbattuto in HTTP::Recorder, di Linda Julien. E' implementato in una maniera diversa da quella che cominciava a farsi strada nella mia mente, però pare molto efficace, e facile da usare. Enjoy.

La gloria, per me, arriverà un'altra volta :)

Inviato da larsen il 01.04.04 00:07
Ti è piaciuto questo articolo? Iscriviti al feed!

Inviato da LucaS il 01.04.04 02:43

... non centra poi tanto con quanto da te scritto, ma leggendo e forse vista l'ora, mi e' venuta in mente una frase letta di un famoso e storico informatico di cui ora purtroppo non ricordo il nome e che dice... l'unica certezza che hai nel testare un programma e' che vi siano dei Bug ma non il contrario.

Inviato da dada il 01.04.04 11:03

larsen, il modulo che hai trovato, nonché il backend che utilizza, HTTP::Proxy, mi sembrano davvero interessanti (e ti ringrazio davvero per averli portati alla mia e nostra attenzione :-).

ora, non per essere indiscreto, ma solo perché mi interessa e penso possa interessare anche altri, in che maniera lo avresti implementato tu?

Inviato da larsen il 01.04.04 11:26

Lucas: al momento non riesco a recuperare la citazione precisa, ma potrebbe trattarsi di Donald Knuth. Indagherò. Se scopro che non è di Knuth, passo a Dijkstra. E poi a Wirth, Hoare... l'importante è avere una lista di sospetti :)
Di Knuth, a proposito dei bug, ho trovato facilmente questa: "Beware of bugs in the above code; I have only proved it correct, not tried it.". Che immagino tu conoscessi già.



dada: visto che uso CGI::Application, pensavo di scrivere un metodo ad hoc all'interno dell'applicazione stessa (probabilmente cgiapp_prerun()) che esaminasse la query e costruisse il codice per WWW::Mechanize::Shell, oppure direttamente per WWW::Mechanize.

Inviato da Oha il 08.04.04 14:07

io scriverei un proxy http che legge stdin e stdout e registra questa sequenza

quando rieseguito reinvia in sequenza le richieste e confronta le risposte

nel caso di variazioni ai template, e' possibile inserire i dati risultati in campi ben distinguibili

Inviato da dada il 13.04.04 15:01

oha, non è proprio così che funziona il modulo HTTP::Recorder menzionato da larsen? mi sono perso qualcosa?

Inviato da larsen il 05.06.04 18:55

E' appena uscito un articolo su perl.com della stessa autrice del modulo, Linda Julien: Web Testing with HTTP::Recorder










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google