SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Weitere ähnliche Inhalte

Andere mochten auch

Grok® Ticketing Solution
Grok® Ticketing SolutionGrok® Ticketing Solution
Grok® Ticketing SolutionItverx C.A.
 
Correo Electrónico Administrado
Correo Electrónico AdministradoCorreo Electrónico Administrado
Correo Electrónico AdministradoItverx C.A.
 
Servicios de Prueba de Penetración
Servicios de Prueba de PenetraciónServicios de Prueba de Penetración
Servicios de Prueba de PenetraciónItverx C.A.
 
Servicios de Email Deliverability
Servicios de Email DeliverabilityServicios de Email Deliverability
Servicios de Email DeliverabilityItverx C.A.
 
Análisis y Control de Riesgos del Negocio
Análisis y Control de Riesgos del NegocioAnálisis y Control de Riesgos del Negocio
Análisis y Control de Riesgos del NegocioItverx C.A.
 
Problemas Clásicos de Correo Electrónico
Problemas Clásicos de Correo ElectrónicoProblemas Clásicos de Correo Electrónico
Problemas Clásicos de Correo ElectrónicoItverx C.A.
 

Andere mochten auch (6)

Grok® Ticketing Solution
Grok® Ticketing SolutionGrok® Ticketing Solution
Grok® Ticketing Solution
 
Correo Electrónico Administrado
Correo Electrónico AdministradoCorreo Electrónico Administrado
Correo Electrónico Administrado
 
Servicios de Prueba de Penetración
Servicios de Prueba de PenetraciónServicios de Prueba de Penetración
Servicios de Prueba de Penetración
 
Servicios de Email Deliverability
Servicios de Email DeliverabilityServicios de Email Deliverability
Servicios de Email Deliverability
 
Análisis y Control de Riesgos del Negocio
Análisis y Control de Riesgos del NegocioAnálisis y Control de Riesgos del Negocio
Análisis y Control de Riesgos del Negocio
 
Problemas Clásicos de Correo Electrónico
Problemas Clásicos de Correo ElectrónicoProblemas Clásicos de Correo Electrónico
Problemas Clásicos de Correo Electrónico
 

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

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion ContinuaLenin Lozano
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007JuancaPompilla
 
Inyecciones sql para aprendices
Inyecciones sql para aprendicesInyecciones sql para aprendices
Inyecciones sql para aprendicesTensor
 
Inyecciones SQL para Aprendices
Inyecciones SQL para AprendicesInyecciones SQL para Aprendices
Inyecciones SQL para AprendicesTensor
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven InfrastructureAngel Nuñez
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#Luis Ruiz Pavón
 
Programación del curso inf212 - POO
Programación del curso inf212 - POOProgramación del curso inf212 - POO
Programación del curso inf212 - POODiego Santimateo
 
Semana xiii.i
 Semana xiii.i Semana xiii.i
Semana xiii.ielssalinas
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...TestingUy
 
Webinar Gratuito: Guía de Pruebas de OWASP
Webinar Gratuito: Guía de Pruebas de OWASPWebinar Gratuito: Guía de Pruebas de OWASP
Webinar Gratuito: Guía de Pruebas de OWASPAlonso Caballero
 

Ähnlich wie ¿Cómo usar Perl para automatizar planes de prueba? (20)

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
software testing
software testingsoftware testing
software testing
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
 
Inyecciones sql para aprendices
Inyecciones sql para aprendicesInyecciones sql para aprendices
Inyecciones sql para aprendices
 
Inyecciones SQL para Aprendices
Inyecciones SQL para AprendicesInyecciones SQL para Aprendices
Inyecciones SQL para Aprendices
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven Infrastructure
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
Java
JavaJava
Java
 
Programación del curso inf212 - POO
Programación del curso inf212 - POOProgramación del curso inf212 - POO
Programación del curso inf212 - POO
 
Semana xiii.i
 Semana xiii.i Semana xiii.i
Semana xiii.i
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
8.realizacion de pruebas
8.realizacion de pruebas8.realizacion de pruebas
8.realizacion de pruebas
 
JAVA3.0
JAVA3.0JAVA3.0
JAVA3.0
 
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
 
Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.
 
Webinar Gratuito: Guía de Pruebas de OWASP
Webinar Gratuito: Guía de Pruebas de OWASPWebinar Gratuito: Guía de Pruebas de OWASP
Webinar Gratuito: Guía de Pruebas de OWASP
 

Kürzlich hochgeladen

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Kürzlich hochgeladen (13)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

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

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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