¿cómo usar perl para automatizar planes de prueba?

18
Introducción Código Documentación Web Perl Productivo para Probar Programas ¿Cómo usar Perl para automatizar planes de prueba? Luis E. Muñoz <[email protected]> Inmobiliarios.com.ve agosto, 2007 / Perl Mongers, Caracas Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl

Upload: itverx-ca

Post on 02-Jul-2015

12.343 views

Category:

Technology


4 download

DESCRIPTION

Una presentación que demuestra la aplicación de nuestra experiencia en arneses de prueba, para el desarrollo de mecanismos de validación de sitios web incluyendo aplicaciones complejas.

TRANSCRIPT

Page 1: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Perl Productivo para Probar Programas¿Cómo usar Perl para automatizar planes de prueba?

Luis E. Muñoz <[email protected]>

Inmobiliarios.com.ve

agosto, 2007 / Perl Mongers, Caracas

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 2: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Agenda

1 Introducción

2 Código

3 Documentación

4 Web

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 3: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

¿Pruebas? ¿Qué son pruebas?

Lo que todos sabemos que debemos hacer, pero no hacemos . . .

Revisa que el código hace lo que se supone que debe hacer . . .. . . con granularidad variable. . . en varios entornos. . . en múltiples momentos de su desarrollo

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 4: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

¿Qué son pruebas automáticas?

Programas que revisan a otros programasLas tareas aburridas las deben hacer las computadoras, no losprogramadores. . .Ejecutar las pruebas no debe requerir presencia humana – Laejecución manual de pruebas es un desperdicio de tiempoLas pruebas deben ser tan instantáneas como sea posiblePodemos revisar más que nuestros programas. . . Pruebas decalidad y del servicio

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 5: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

¿Qué ganamos con las pruebas?

Promovemos la automatizaciónCódigo desacopladoCódigo usable en otros programas

No perdemos funcionalidadNo ganamos funcionalidad accidentalCuando las pruebas pasan . . . ¡terminamos!Reportes de error más informativos

Mejor la salida del error que un “no funciona”Generado fácilmente por usuarios finalesAyuda cuando se porta hacia otra arquitectura

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 6: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Correctitud general de los módulos

# $Id : 00− l o a d . t , v . . . $

use Test : : More ;

my @modules = qw/ICV : : LogsICV : : HelpICV : : Help : : Node. . ./ ;

p l an t e s t s => s c a l a r @modules ;

my @ok = grep { use_ok ($_) }@modules ;

BAIL_OUT( " Load f a i l u r e " )un l e s s @ok == @modules ;

Basado en Test::More

Ejercita un use Módulo; ydetecta erroresPlan de prueba dinámicoEspecialmente efectivo paraidentificar errores de sintaxis yproblemas que previenen lacarga del móduloNo tiene sentido continuar conpruebas más profundas si nopodemos cargar los módulos:BAIL_OUT

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 7: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Pruebas con objetos. . .

ok ( $nc−>i n s e r t ," I n s e r t c a t e g o r y c1 " ) ;

i sa_ok ( $s−>add ( $nc , $_ ) ,’ Magic : : Word ’ ) ;

can_ok ( $penguin , ’ swim ’ ) ;

isa_ok() permite verificar queun objeto pertenece a una clasecan_ok() permite verificar queun objeto tiene definido unmétodo

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 8: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

¿Se parece. . . ?

i s ( $c [0]−>name , ’ c2 ’ ,’ C o r r e c t c l a s s matched ’ ) ;

i s n t ( $penguin , ’mammal ’ ) ;l i k e ( $foo , qr / bar / ) ;u n l i k e ( $baz , qr / bar / ) ;

is() Comparación sencillaisnt() Negación de la

comparación sencillalike() ¿Coincide con una

expresión regular?unlike() Negación de like()

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 9: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Correctitud general de la documentación POD

# $Id : 00−pod . t , v . . . $

use Test : : More ;e va l " use Test : : Pod" ;p l an s k i p _ a l l =>

" Test : : Pod r e q u i r e d "i f $@ ;

a l l _ p o d _ f i l e s _ o k ( ) ;

Basado en Test::Pod

plan skip_all ... permitesaltar las pruebas si Test::Podno está disponible;Verifica la estructura del PODRevisa automáticamente todoslos módulos en la distribución

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 10: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

¿Está documentado todo el código?

# $Id : 00−pod−cove rage . t , v . . . $

use Test : : More ;e va l " use Test : : Pod : : Coverage " ;p l an s k i p _ a l l =>

" Test : : Pod : : Coverage r e q u i r e d "i f $@ ;

p l an qw/ no_plan / ;

pod_coverage_ok ( ’ ICV : : C h a r l o t t e ’ ) ;

Basado enTest::Pod::CoverageVerifica que todas las funcionesvisibles externamente esténdocumentadas

. . . cuando comienzan por “_”se asumen como internas

Una clase heredada no tiene quedocumentar los métodosheredadosEn este ejemplo, no hay un plande pruebas fijo

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 11: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Perl como arnés de pruebas para aplicaciones web

Perl cuenta con librerías muy poderosas para interactuar conel web – LWP::UserAgent, WWW::Mechanize

. . . cuenta con librerías para analizar formatos comunesHTML::Parser, XML::Simple, . . .La infraestructura simplifica la escritura de las pruebasprove permite ejecutar conjuntos de pruebas arbitrarios

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 12: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Una sesión de prueba típicaPerl como arnés de prueba para aplicaciones web

$ prove −r −−t i m e r t e s t s /t e s t s / dns . . . . . . . . . . . . . . ok 13926 mst e s t s /web/ b0rk3d . . . . . . . ok 39879 mst e s t s /web/ b a s i c . . . . . . . . ok 11291 ms. . .t e s t s /web/ images . . . . . . . ok 6557 mst e s t s /web/ i n v / captcha . . ok 6456 mst e s t s /web/ i n v / submit . . . ok 52183 mst e s t s /web/ s e a r c h . . . . . . . ok 17936 msA l l t e s t s s u c c e s s f u l .F i l e s =13, Tes t s =794 , 196 w a l l s e c s

794 pruebas sobre loscomponentes mayores delsitio web

Poco más de 3 minutosTotalmente desatendidasRepetibles y consistentes

Se valida más que elsoftware: Servicios externos,configuración . . .

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 13: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

¿Pueden encontrar mi página?Perl como arnés de prueba para aplicaciones web

#!/ u s r / b i n / p e r luse Net : : DNS;use NetAddr : : IP ;use Test : : More t e s t s => 99 ;

my $ r e s = new Net : : DNS : : R e s o l v e r ;my $dom_a = $res−>query

( ’ i n m o b i l i a r i o s . com . ve ’ ,’A ’ , ’ IN ’ ) ;

i s ($dom_a−>header−>tc , 0 ," $ns : not t r u n c a t e d " ) ;

i s ($dom_a−>header−>rcode ,’NOERROR ’ ," $ns : r e s p o n s e code " ) ;

my @dom_a = map { $_−>a d d r e s s }grep { $_−>type eq ’A ’

and $_−>c l a s s eq ’ IN ’ }$dom_a−>answer ;

i s ( s c a l a r @dom_a , 2 ," $ns : number o f s e r v e r s " ) ;

ok ($dom_a [ 0 ] ne $dom_a [ 1 ] ," $ns : d i f f e r e n t s e r v e r s " ) ;

Uso de Net::DNS,NetAddr::IP y Test::Morepara simplificar el trabajo¿Se puede determinar ladirección IP del servidor web?

Respuesta completaRespuesta sin erroresLa respuesta contiene 2registros IN A

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 14: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

¿Mis páginas están disponibles?Perl como arnés de prueba para aplicaciones web

use Test : : More ;use Test : :WWW: : Mechanize ;

my @ u r l s = . . . ;p l an t e s t s => @ u r l s ∗ 2 + 7 ;my $m = new Test : :WWW: : Mechanize ;

f o r my $ u r l ( @ u r l s ){

$m−>get_ok ( $ u r l ," $ u r l i s OK" ) ;

$m−>c o n t e n t _ l a c k s ( qr / e r r o r / i ," Content − no ’ e r r o r ’ " ) ;

}

Test::WWW::Mechanizefacilita las pruebas webPlan de prueba dinámico

get_ok() ¿Se puede acceder auna página web vía elmétodo GET?

content_lacks() Evalúa si elcontenido no coincidecon una expresiónregular

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 15: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Pruebas de autorización webPerl como arnés de prueba para aplicaciones web

$m−>get ( $pag_sec ) ;

i s ($m−>s t a t u s , 401 ," acce so $pag_sec " ) ;

Verificar que la configuración delservidor requiere autorizaciónpara un determinado URLRevisamos el resultado de laoperación con status(),heredado de WWW::Mechanize

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 16: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Verificando si mis imágenes son correctasPerl como arnés de prueba para aplicaciones web

my % img =(

i c v =>{

u r l => ’ / images / i c v . png ’ ,md5 => ’ 32 de64d . . . ’ ,t ype => ’ image /png ’ ,. . .

} ,. . .) ;

f o r my $ i ( s o r t keys %img ){

my $ u r l = $base . $img{ $ i}−>{ u r l } ;$m−>get_ok ( $ u r l , " Fetch image $ i " ) ;i s ( md5_hex ($m−>con ten t ) ,

$img{ $ i}−>{md5} ," C o r r e c t image s i g n a t u r e " ) ;

i s ($m−>res−>header ( ’ Content−Type ’ ) ,$img{ $ i}−>{type } ," C o r r e c t image type " ) ;

ok ($m−>res−>header ( ’ Cache−C o n t r o l ’ ) ," Cache−C o n t r o l p r e s e n t " ) ;

}

Digest::MD5 permitecomparar fácilmente elcontenido de la imágenTambién podrían usarsemódulos como GD oImageMagick (sigaatento...)Los métodos de LWP danacceso a los encabezadosHTTP comoContent-Type yCache-Control

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 17: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Otra forma de verificar las imágenesPerl como arnés de prueba para aplicaciones web

$m−>get_ok ( $ u r l , " captcha " ) ;my $im = GD : : Image−>new

($m−>con ten t ) ;i sa_ok ( $im , ’GD : : Image ’ ,

" Captcha i s an image " ) ;ok ( ( $im−>getBounds ) [ 0 ] > 0 ,

" Captcha has non−z e r o width " ) ;ok ( ( $im−>getBounds ) [ 1 ] > 0 ,

" Captcha has non−z e r o h e i g h t " ) ;

ok ( $im−>c o l o r s T o t a l > 8 ," $s : Count o f c o l o r s " ) ;

No podemos saber de antemanoqué imagen generará uncaptcha, pero con GD evaluamosalgunas propiedades. . .

Dimensiones, víagetBounds()Número de colores, víacolorsTotal()

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl

Page 18: ¿Cómo usar Perl para automatizar planes de prueba?

Introducción Código Documentación Web

Prueba de formulariosPerl como arnés de prueba para aplicaciones web

$m−>form_number ( 5 ) ;$m−>f i e l d ( name => "Nombre" ) ;$m−>f i e l d ( e m a i l => ’ foo@bar . com ’ ) ;$m−>f i e l d ( rm => $o ) ;$m−>c l i c k ( ’ Cont i nua r ’ ) ;

i s ($m−>s t a t u s , 200 ," Submit got 200 " ) ;

$m−>c o n t e n t _ u n l i k e( qr / e r r o r / ,

" Content w/o ’ e r r o r ’ " ) ;

WWW::Mechanize facilita elllenado de formularios en laspáginas que probamosTest::WWW::Mechanize hacefácil determinar si el formulariose pudo procesar correctamente

Luis E. Muñoz Inmobiliarios.com.vePruebas con Perl