test automatici^2 per applicazioni web
Post on 13-Dec-2014
1.868 Views
Preview:
DESCRIPTION
TRANSCRIPT
Test automatici2 per applicazioni WebStefano Rodighiero - larsen@perl.it
Scrivere software =
Gestire la complessità
Complessità
You might think of this as mental juggling - the more mental balls the program requires you to keep in the air at once, the
more likely you’ll drop one of the balls, leading to a design or coding error.
-- Steve McConnell
• Loose coupling
• Tecniche standard
• KISS
• Test?
Gestire la complessità
Test?
«Testing by itself does not improve software quality. [...] Trying to improve software by increasing the amount of testing is like trying to lose weight by weighting yourself more often»
-- Steve McConnell
Test!
• Aumenta indirettamente la qualità del software
• Design for testing
• Refactoring
• Wishful thinking
• Confidenza con il proprio codice
Esempio
#!/usr/bin/perl -w
use Test::Simple tests => 2; use Date::ICal;
my $ical = Date::ICal->new; # make an objectok( defined $ical ); # check we got something ok( $ical->isa('Date::ICal') ); # and it's the right class
Gradualmente
• prova.pl → t/01_base.t
• diag()
• Usare gli occhi
• map <F8> :! prove %<C-M>
• YMMV :)
Applicazioni web
Paradigma MVC
Presentazione Model
Controllo
• Situazioni difficili da riprodurre
• Grande complessità
• Chi effettua il test non è il programmatore
Test di videogame
?
• Workflow complessi
• Quello che non è automatico tende a non essere fatto
Test di applicazioni web
WWW::Mechanize
#!/usr/bin/perl
use strict;use warnings;
use WWW::Mechanize;
my $agent = WWW::Mechanize->new();$agent->get( 'http://www.google.com' );print $agent->content();
Test::WWW::Mechanize
#!/usr/bin/perl
use strict;use warnings;
use Test::More qw/ no_plan /;use Test::WWW::Mechanize;
my $agent = Test::WWW::Mechanize->new();$agent->get_ok( 'http://www.google.com' );$agent->title_is( 'Google' );
WWW::Mechanize::Shell
calvin:~ larsen$ perl -MWWW::Mechanize::Shell -e shell>g http://www.google.comRetrieving http://www.google.com(200)http://www.google.com>script mech3.plhttp://www.google.com>quitcalvin:~ larsen$
WWW::Mechanize::Shell
#!perl -wuse strict;use WWW::Mechanize;use WWW::Mechanize::FormFiller;use URI::URL;
my $agent = WWW::Mechanize->new( autocheck => 1 );my $formfiller = WWW::Mechanize::FormFiller->new();$agent->env_proxy();
$agent->get('http://www.google.com');$agent->form(1) if $agent->forms and scalar @{$agent->forms};
mech3.pl
HTTP::Recorder
proxy.pl#!/usr/bin/perl
use strict;use warnings;
use HTTP::Proxy qw/ :log /;use HTTP::Recorder;
my $proxy = HTTP::Proxy->new;my $agent = HTTP::Recorder->new( file => "/tmp/tmpfile" , showwindow => 1 );
$proxy->logmask( STATUS | PROCESS | HEADERS );$proxy->port( 3128 );$proxy->host( '' );$proxy->agent( $agent );$proxy->start();
Demo
Idee
• Usare proxy.pl con un sistema di bugtracking (il ticket contiene il codice per riprodurre l’errore)
• Testare applicazioni non scritte in Perl
• Screenscraping
Conclusioni
• Integrate le pratiche di testing nel vostro workflow lavorativo
• Gradualmente!
• Sono pratiche che pagano da subito
• Come posso progettare il codice per facilitarne il test?
Monday, I could wait till TuesdayIf I make up my mindWednesday would be fine, Thursday’s on my mindFriday’d give me time, Saturday could waitBut Sunday’d be too late-- Sting
larsen@perl.ithttp://larsen.perlmonk.org/blog
Grazie :)
Riferimenti• Web Testing with HTTP::Recorder http://www.perl.com/pub/a/2004/06/04/recorder.html
• Test di applicazioni web http://www.perl.it/blog/archives/000036.html
• A Perl Testing Tutorial (PDF) http://www.wgz.org/chromatic/perl/IntroTestMore.pdf
• Migliorare la navigazione sul web con Perl http://www.perl.it/blog/archives/000076.html
• Documentazione dei vari moduli menzionati http://search.cpan.org/
top related