+ Técnicas de automatización Going from GOOD to GREAT Diego Tortoriello Federico Regueira Gonzalo Ciosek + Forma de trabajo en este workshop + Are you ready? – [5 min] + Setup – [10 min] ① Conectar a la wi-fi “makeitworkshop” n Psw: MAKEITWORKSHOP ② Copiar al equipo personal la carpeta “MIW-WORKSHOP” n IDEExport n PageObjects n SelenoScripts ③ Chequear que se pueda acceder a la aplicación de prueba: n http://192.168.0.161:57300 + ¿Por qué se automatizan las pruebas? n Acumular cobertura. n Optimizar regresión. n Para “apalancar” las pruebas manuales (leverage). n Para reducir el “time to market” de los productos. n Para reducir el costo de las fallas detectándolas antes. + Grandes expectativas “La automatización de pruebas es la solución” + Gran autoconfianza al comenzar “Who’s awesome? We are!” + Cambios en el código “¡Hay que cambiar todos los scripts!” + Sentimiento de frustración “¡Esto es imposible de mantener!” + + Selenium IDE If you want to create quick bug reproduction scripts, create scripts to aid in automation-aided exploratory testing. + make it work! Lab 1: Grabar script – [15 min] ① URL: http://192.168.0.161:57300 ② Abrir FireFox, y el plugin Selenium IDE. ③ Grabar un script que ejecute las siguientes acciones. n Login (usuario: “Pedro” / pass: “contra”). n Condición de verificación:El nombre de usuario debe aparecer debajo del logo. n Crear nuevo proyecto. n Condición de verificación: El proyecto se muestra en la lista de proyectos. ④ Ejecutar script y observar comportamiento. + Conclusiones n Fácil de crear. n No requiere skills de programación. n Los scripts se generan rápidamente. n Es un primer comienzo que aporta elementos nuevos en un proyecto. n Los datos de prueba quedan “en duro”. n Los elementos quedan localizados “en duro”. n No es posible crear iteraciones. n Se ejecuta sólo desde FireFox. + Selenium 2.0 Selenium 1.0 + WebDriver = Selenium 2.0 If you want to: § create robust, browser-based regression automation suites and tests § scale and distribute scripts across many environments + make it work! Lab 2: Exportar a Selenium Webdriver – [10 min] ① Demo de exportación SeleniumIDE > Selenium 2.0. ② Observar el código generado por la exportación. n Locators repetidos. n Test-data. n ¡Estamos en Java! >> iteraciones + datasource externo. ③ Abrir Eclipse. ④ Abriel el proyecto “IDEExport”. + make it work! Lab 3: Iteraciones y data-source externo – [10 min]] ① Observar el código del proyecto “IDEExport”. n Iteración. n Conexión a datasource externo. + Conclusiones n Es sencillo pasar del script grabado en Selenese a un script que pueda ser potenciado en otro lenguaje (java). n Los “locators” de los elementos quedan repetidos en cada test. n El código queda poco legible y difícil de seguir. (Un script que en el IDE tiene 5 líneas, con la exportación genera 95 líneas.) n Este es un script chico, y por lo tanto fácilmente mantenible. n Con el tiempo, las suites de pruebas crecen, y es necesario agregar cada vez más líneas de código para mantener los scripts actualizados. n Con este apprach, si 10 scripts diferentes usan los mismos elementos de una página (control“usuario” / control “password”), cualquier cambio a un elemento deberá ser actualizado en los 10 scripts. Esto demanda mucho tiempo y es una fuente potencial de errores. + Usando POM (Page Object Model) n Un approach más eficiente para el mantenimiento de los scripts es separar las operaciones de localización (find) de las operaciones de input de datos o verificación de los elementos. n De esta forma, si un elemento de la página cambia, el cambio sólo debe hacerse en un archivo y no en 10 scripts difrentes. n A este approach se le llama Page Object Model(POM), y ayuda a mantener el código más legible, más fácil de mantener y más reutilizable. + + make it work! Lab 4: Trabajar con (Page Object Model) – [15 min] ① Cargar el proyecto “PageObject”. ② Observar la definición de clases. n Abrir la clase“PageLogin” del paquete “Pages”. n Abrir la clase “TestLogin” del paquete “Scripts”. ③ Escribir un test nuevo para el Login utlizando el template “TestEmpty”. ④ Observar el código (itellisense, etc) + Conclusiones n El uso de POM hace más sencillo el mantenimiento. n El código es más legible. n La lógica de las pruebas queda separada de la estructura HTML de la página. n El repositorio de objetos es independiente de los testcases, lo que nos permite reutilizar el repositorio para diferentes propósitos. Por ejemplo: es posible integrar los POMs con Junit para las pruebas funcionales y el mismo repositorio utlizarlo para UAT con Cucumber. n El código queda más “corto” y optimizado, pues los POMs se reutilizan en las demás clases. n Los métodos pueden tener nombres más adecuados a las acciones de las páginas (acciones de negocio) y pueden ser mapeados fácilmente con la operación descripta en la UX. Por ejemplo: luego de hacer click en un botón que navega a la home page, el método puede llamarse 'gotoHomePage()'. + Seleno Automation Framework Scripts simples de crear + ¿Qué es Seleno? n Seleno is an open source project from TestStack which helps you write automated UI tests with Selenium. n It focuses on the use of Page Objects and Page Components and by reading from and writing to web pages using strongly typed view models. + ¿Cómo trabajar con Seleno? MVC Apps (.Net) / Other apps MVC Apps Other apps El diseño del modelo de test se integra al modelo de desarrollo. Es necesario generar el mapping entre el modelo de objetos desarrollo (páginas, clases) y los objetos de Seleno. Lee el modelo de desarrollo directamente, y a partir de ahí mantiene los objetos dinámicamente (refactor). No lee el código fuente, tabaja sobre la app compilada . Necesita acceso al código fuente. + make it work! Lab 5: Observar Seleno en acción – [15 min] ① Demo de implementación de Seleno con app no MVC. n Herencia de clases provistas por el fwk. n Properties y métodos. n Test script usando Seleno. ② Demo de implementación de Seleno con app MVC. n Herencia de clases provistas por el fwk. n Properties y métodos. n Test script usando Seleno. + ¿Cómo trabajar con Seleno? MVC Apps (.Net) n Seleno desarrolla su máximo potencial cuando se utiliza como framework de automatización para aplicaciones desarrolladas con MVC(r) de Microsoft (r). n Seleno se integra al código fuente, y los objetos de prueba se leen directamente desde la definición del modelo. n Al trabajar con un modelo fuertemente tipado, Seleno permite manejar las páginas como objetos, definiendo propiedades y métodos. n Es posible intanciar durante las pruebas una instancia “populated” del modelo, e ingresar esa información en una página web utilizando el método “Input()”. + Conclusiones n Permite incorporar elementos y lenguaje de negocio en los tests. n n El código es más legible. Se hace más sencillo el mantenimiento de los scripts. n La lógica de las pruebas queda separada, pero integrada al modelo de desarrollo (MVC). n Permite trabajar con modelos y patrones (patterns), lo cual hace más sólido el diseño del modelo de pruebas. + Algunos resultados (3 proyectos) n A partir del segundo ciclo de automatización, el tiempo promedio de las pruebas de humo de negocio se redujo a la mitad. n Tiempo promedio de implementación del primer ciclo: entre 2 y 3 meses (análisis, implementación y ejecución). Automated test initial estimation Maual test initial estimation Automated test duration after one cycle + ¡Gracias! n DiegoT@makeitwotk.com.uy n FedericoR@makeitwork.com.uy n Gonzalo@makeitwork.com.uy