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

12,621 views

Published on

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.

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,621
On SlideShare
0
From Embeds
0
Number of Embeds
97
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. 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 <lem@inmobiliarios.com.ve> Inmobiliarios.com.ve agosto, 2007 / Perl Mongers, Caracas Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  2. 2. 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.ve Pruebas con Perl
  3. 3. 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.ve Pruebas con Perl
  4. 4. Introducción Código Documentación Web ¿Qué son pruebas automáticas? Programas que revisan a otros programas Las tareas aburridas las deben hacer las computadoras, no los programadores. . . Ejecutar las pruebas no debe requerir presencia humana – La ejecución manual de pruebas es un desperdicio de tiempo Las pruebas deben ser tan instantáneas como sea posible Podemos revisar más que nuestros programas. . . Pruebas de calidad y del servicio Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  5. 5. Introducción Código Documentación Web ¿Qué ganamos con las pruebas? Promovemos la automatización Código desacoplado Código usable en otros programas No perdemos funcionalidad No ganamos funcionalidad accidental Cuando las pruebas pasan . . . ¡terminamos! Reportes de error más informativos Mejor la salida del error que un “no funciona” Generado fácilmente por usuarios finales Ayuda cuando se porta hacia otra arquitectura Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  6. 6. Introducción Código Documentación Web Correctitud general de los módulos Basado en Test::More # $ I d : 00− l o a d . t , v . . . $ Ejercita un use Módulo; y u s e T e s t : : More ; detecta errores my @modules = qw/ Plan de prueba dinámico ICV : : L o gs ICV : : H e l p Especialmente efectivo para ICV : : H e l p : : Node ... identificar errores de sintaxis y /; problemas que previenen la p l a n t e s t s => s c a l a r @modules ; carga del módulo my @ok = g r e p { use_ok ( $_ ) } @modules ; BAIL_OUT( " Load f a i l u r e " ) No tiene sentido continuar con u n l e s s @ok == @modules ; pruebas más profundas si no podemos cargar los módulos: BAIL_OUT Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  7. 7. Introducción Código Documentación Web Pruebas con objetos. . . isa_ok() permite verificar que ok ( $nc− n s e r t , >i " I n s e r t c a t e g o r y c1 " ) ; un objeto pertenece a una clase i s a _ o k ( $s− >add ( $nc , $_ ) , ’ Magic : : Word ’ ) ; can_ok() permite verificar que can_ok ( $ p e n g u i n , ’ swim ’ ) ; un objeto tiene definido un método Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  8. 8. Introducción Código Documentación Web ¿Se parece. . . ? is() Comparación sencilla i s ( $c [0]−>name , ’ c2 ’ , isnt() Negación de la ’ C o r r e c t c l a s s matched ’ ) ; i s n t ( $ p e n g u i n , ’ mammal ’ ) ; comparación sencilla l i k e ( $foo , qr / bar / ) ; u n l i k e ( $baz , q r / b a r / ) ; like() ¿Coincide con una expresión regular? unlike() Negación de like() Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  9. 9. Introducción Código Documentación Web Correctitud general de la documentación POD Basado en Test::Pod # $ I d : 00−pod . t , v . . . $ plan skip_all ... permite u s e T e s t : : More ; saltar las pruebas si Test::Pod e v a l " u s e T e s t : : Pod " ; p l a n s k i p _ a l l => no está disponible; " T e s t : : Pod r e q u i r e d " i f $@ ; all_pod_files_ok (); Verifica la estructura del POD Revisa automáticamente todos los módulos en la distribución Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  10. 10. Introducción Código Documentación Web ¿Está documentado todo el código? Basado en Test::Pod::Coverage Verifica que todas las funciones # $ I d : 00−pod−c o v e r a g e . t , v . . . $ visibles externamente estén u s e T e s t : : More ; documentadas e v a l " u s e T e s t : : Pod : : C o v e r a g e " ; p l a n s k i p _ a l l => . . . cuando comienzan por “_” " T e s t : : Pod : : C o v e r a g e r e q u i r e d " i f $@ ; se asumen como internas p l a n qw/ n o _ p l a n / ; Una clase heredada no tiene que p o d _ c o v e r a g e _ o k ( ’ ICV : : C h a r l o t t e ’ ) ; documentar los métodos heredados En este ejemplo, no hay un plan de pruebas fijo Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  11. 11. 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 con el web – LWP::UserAgent, WWW::Mechanize . . . cuenta con librerías para analizar formatos comunes HTML::Parser, XML::Simple, . . . La infraestructura simplifica la escritura de las pruebas prove permite ejecutar conjuntos de pruebas arbitrarios Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  12. 12. Introducción Código Documentación Web Una sesión de prueba típica Perl como arnés de prueba para aplicaciones web 794 pruebas sobre los $ p r o v e −r − i m e r t e s t s / −t componentes mayores del t e s t s / d n s . . . . . . . . . . . . . . ok 13926 ms t e s t s /web/ b 0 r k 3 d . . . . . . . ok 39879 ms sitio web t e s t s /web/ b a s i c . . . . . . . . ok 11291 ms ... Poco más de 3 minutos t e s t s /web/ i m a g e s . . . . . . . ok 6557 ms Totalmente desatendidas t e s t s /web/ i n v / c a p t c h a . . ok 6456 ms t e s t s /web/ i n v / s u b m i t . . . ok 52183 ms Repetibles y consistentes t e s t s /web/ s e a r c h . . . . . . . ok 17936 ms All tests successful . F i l e s =13 , T e s t s =794 , 196 w a l l s e c s Se valida más que el software: Servicios externos, configuración . . . Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  13. 13. 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 l u s e Net : : DNS ; u s e NetAddr : : I P ; u s e T e s t : : More t e s t s => 9 9 ; Uso de Net::DNS, my $ r e s = new Net : : DNS : : R e s o l v e r ; my $dom_a = $ r e s − u e r y >q NetAddr::IP y Test::More ( ’ i n m o b i l i a r i o s . com . v e ’ , ’A ’ , ’ IN ’ ) ; para simplificar el trabajo i s ( $dom_a− e a d e r− c , 0 , >h >t " $ns : not t r u n c a t e d " ) ; ¿Se puede determinar la i s ( $dom_a− e a d e r− c o d e , ’NOERROR ’ , >h >r dirección IP del servidor web? " $ns : r e s p o n s e code " ) ; Respuesta completa my @dom_a = map { $_− d d r e s s } >a g r e p { $_− y p e eq ’A ’ >t Respuesta sin errores and $_− l a s s eq ’ IN ’ } >c $dom_a− n s w e r ; >a La respuesta contiene 2 i s ( s c a l a r @dom_a , 2 , " $ n s : number o f s e r v e r s " ) ; registros IN A 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 " ) ; Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  14. 14. Introducción Código Documentación Web ¿Mis páginas están disponibles? Perl como arnés de prueba para aplicaciones web Test::WWW::Mechanize u s e T e s t : : More ; facilita las pruebas web u s e T e s t : :W W: : M e c h a n i z e ; W Plan de prueba dinámico my @ u r l s = . . . ; p l a n t e s t s => @ u r l s ∗ 2 + 7 ; my $m = new T e s t : :W W: : M e c h a n i z e ; W get_ok() ¿Se puede acceder a f o r my $ u r l ( @ u r l s ) una página web vía el { $m−>get_ok ( $ u r l , método GET? " $ u r l i s OK" ) ; $m− o n t e n t _ l a c k s ( q r / e r r o r / i , >c content_lacks() Evalúa si el " C o n t e n t − no ’ e r r o r ’ " ) ; } contenido no coincide con una expresión regular Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  15. 15. Introducción Código Documentación Web Pruebas de autorización web Perl como arnés de prueba para aplicaciones web Verificar que la configuración del $m−>g e t ( $ p a g _ s e c ) ; servidor requiere autorización para un determinado URL i s ($m−>s t a t u s , 4 0 1 , " a c c e s o $pag_sec " ) ; Revisamos el resultado de la operación con status(), heredado de WWW::Mechanize Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  16. 16. Introducción Código Documentación Web Verificando si mis imágenes son correctas Perl como arnés de prueba para aplicaciones web my % img = ( i c v => Digest::MD5 permite { u r l => ’ / i m a g e s / i c v . png ’ , comparar fácilmente el md5 => ’ 32 de64d . . . ’ , t y p e => ’ image / png ’ , contenido de la imágen ... }, También podrían usarse ... ); módulos como GD o f o r my $ i ( s o r t k e y s % img ) ImageMagick (siga { my $ u r l = $ b a s e . $img { $ i }−>{ u r l } ; atento...) $m− >get_ok ( $ u r l , " F e t c h image $ i " ) ; i s ( md5_hex ($m− o n t e n t ) , >c Los métodos de LWP dan $img { $ i }−>{md5 } , " C o r r e c t image s i g n a t u r e " ) ; acceso a los encabezados i s ($m− e s − e a d e r ( ’ C o n t e n t−Type ’ ) , >r >h $img { $ i }−>{t y p e } , HTTP como " C o r r e c t image t y p e " ) ; ok ($m− e s − e a d e r ( ’ Cache−C o n t r o l ’ ) , >r >h Content-Type y " Cache−C o n t r o l p r e s e n t " ) ; } Cache-Control Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  17. 17. Introducción Código Documentación Web Otra forma de verificar las imágenes Perl como arnés de prueba para aplicaciones web $m− >get_ok ( $ u r l , " c a p t c h a " ) ; No podemos saber de antemano my $im = GD : : Image− >new ($m− o n t e n t ) ; >c qué imagen generará un i s a _ o k ( $im , ’GD : : Image ’ , " C a p t c h a i s an image " ) ; captcha, pero con GD evaluamos ok ( ( $im− e t B o u n d s ) [ 0 ] > 0 , >g algunas propiedades. . . " C a p t c h a h a s non−z e r o w i d t h " ) ; ok ( ( $im− e t B o u n d s ) [ 1 ] > 0 , >g Dimensiones, vía " C a p t c h a h a s non−z e r o h e i g h t " ) ; getBounds() ok ( $im− o l o r s T o t a l > 8 , >c " $ s : Count o f c o l o r s " ) ; Número de colores, vía colorsTotal() Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl
  18. 18. Introducción Código Documentación Web Prueba de formularios Perl como arnés de prueba para aplicaciones web $m−>form_number ( 5 ) ; $m− i e l d ( name => " Nombre " ) ; >f WWW::Mechanize facilita el $m− i e l d ( e m a i l => ’ f o o @ b a r . com ’ ) ; >f $m− i e l d ( rm => $o ) ; >f llenado de formularios en las $m− l i c k ( ’ C o n t i n u a r ’ ) ; >c páginas que probamos i s ($m− t a t u s , 2 0 0 , >s " Submit g o t 200 " ) ; Test::WWW::Mechanize hace $m− o n t e n t _ u n l i k e >c ( qr / e r r o r / , fácil determinar si el formulario " C o n t e n t w/ o ’ e r r o r ’ " ) ; se pudo procesar correctamente Luis E. Muñoz Inmobiliarios.com.ve Pruebas con Perl

×