intive Argentina Blog

Testear 10 apps en simultáneo 

¿Quién no se queda sin tiempo para testear? 

Y sí, a todos nos pasa. En nuestro caso, teníamos 10 aplicaciones que debíamos testear en simultáneo. Unas estaban productivas y otras estaban por salir a producción. ¿Cómo llegar en tiempo y forma asegurando la calidad? ¿Cómo cumplir la demanda del cliente cuando se trata de un equipo pequeño de automatización? 

Todas estas incógnitas nos llevaron al primer paso: hacer una radiografía del estado del equipo, las tecnologías manejadas y las metodologías de trabajo.  

Los Rayos X  

Primero analizamos las aplicaciones y, encontramos que teníamos componentes de UI que son comunes a todas ellas. Estos componentes están hechos en React Redux y, al ser muy dinámicos, se montan y desmontan, entran y salen todo el tiempo de lo que es el Document Object Model (DOM), lo que implicaba un desafío para automatizar. No es lo mismo automatizar algo que va a ser siempre estático que algo que va a ser dinámico por la aplicación y la tecnología. 

Todas estas aplicaciones son domain specificlo que se traduce en que cada una de ellas se encarga de algo específico. Entonces, cada vez que aparece una app nueva, hay que entenderla bien en cuanto a su lógica de negocio, porque a veces en estilo pueden lucir más o menos iguales.  

Testing Manual 

Después continuamos analizando el testing manual, haciendo un relevamiento de dónde estaban los cuellos de botella.  

Nos encontramos con que, debido a la constante mutación de los datos, el cliente pedía que se hicieran Daily Checks, cuyos procesos consistían en probar los distintos features de la aplicación todas las mañanas. Se trataba de corridas de smokes y regresiones largas e indefinidas que costaban mucho tiempo y esfuerzo. ¿Cómo hacés si no tenés nada automatizado o no llegás a automatizar todo lo que necesitás? 

Parte del testing incluía evaluar que se indexaran periodicamente nuevos documentos al sistema que se mantuviera la experiencia de usuario y su usabilidad, lo que denominábamos Document Count & User Experience Monitoring 

¿Qué teníamos hasta ese momento armado en el proyecto? 

Seguimos viendo qué era lo que ya estaba automatizado. Contábamos con: 

  •  .Net Framework. La solución estaba creada en .NET usando C# como lenguaje y NUnit como biblioteca de testing 
  • Selenium (POM) + Restsharp, para UI y WebApi utilizando Page Factory para el Page Object Model 
  • Jenkins detrás orquestando los jobs que corrían las automatizaciones y, generando reportes en HTML que se enviaban por mail.  
  • Amazon Web Services utilizando instancias EC2 para correr los tests. 

Lo que definimos con la radiografía 

Con este escáner pudimos establecer algunas metas: 

Objetivos de testing para el equipo: 

Identificar y reducir los cuellos de botella del testing manual.  

Automatizar los daily checkssmokes, regresiones y tareas administrativas.  

Insertarnos en el proceso de Continuous DeliveryContinuous Integration creando un dashboard centralizado y conectado con los pipelines de Jenkins y los procesos de QA.  

Objetivos de testing para el cliente:  

  • Generar reportes claros que manifiesten el coverage de la solución y el estado de la misma.  
  • Demostrar que los procesos que se están siguiendo son los correctos.  

A partir de lo anterior, fijamos un roadmap para el alcance de tales objetivos: 

Refactorizacion de Page Factory a Dynamic POM: Page Factory es una biblioteca que tiende a tener más control de las instancias, pero, si un componente cambia en el DOM luego de su inicialización, hay que forzar su actualización. En cambio, con Dynamic POM puede delegarse el control de las instancias de los elementos a través del poder de lamba expressions para reducir exceptions 

Implementamos herramientas como Allureque cuenta con todo lo necesario para generar reportes de calidad con historiales, pasos de reproducción, capturas de pantalla, videos, coverage sheet, timeline, etc. 

Levantamos un sistema de clusters para correr grandes volúmenes de tests en menor tiempo. En ese sentido, empleamos Selenoidque tiene la capacidad de correr tests basados en browser y mobile, usando Docker para generar containers, con mucho potencial para autoescalarPor el contrario, Selenium GRID tiende a ser más inestable y necesitar más mantenimiento. Es también más difícil de autoescalar y en general no tiene el mismo rendimiento. 

Establecimos marcos de trabajos claros: para eso creamos un dashboard customizado que centralizara todos estos reportes (por aplicación), con progression chart, versionado y ejecutor de jobs por categorías. También pasamos a Kanban para tener más flexibilidad.  

El resumen de las tecnologías que usamos: 

 

El retorno de inversión 

Se preguntarán ahora cuáles fueron los resultados. Pues, en los últimos 2 años hubo un incremento del 75% en la performance de la solución, reduciendo tiempos de regresiones de hasta 3 horas por aplicación a tan solo 1 hora, siendo el pico máximo de 3 horas en total para las 10 aplicaciones (utilizando 10 containers). Anteriormente, el tiempo total era de 12 horas para la misma cantidad de tests. 

¿Qué aprendimos de esto? 

Muchos clientes suelen resolver rápidamente una problemática en común, accediendo a productos o servicios pagos. Si bien uno de los puntos fuertes de las opciones pagas es el soporte, las herramientas y tecnologías open source suelen tener un gran apoyo de sus comunidades y esto puede ser un deal breaker a la hora de ir por una solución. A excepción de Amazon Web Services, toda nuestra solución está construida con bibliotecas, herramientas y tecnologías open source.   

Y puntualmente aprendimos: 

  • Cómo automatizar inteligentemente: no automatizar todo, sino solo lo que ayude a aumentar el bandwith de los equipos.  
  • A pensar en grande: ¿1 millón de tests en paralelo? ¿Por qué no? El ensayo y error es imprescindible para aprender a generar soluciones escalables. 
  • Que los desarrolladores son amigos: la mejor interacción entre los equipos se da cuando se trabaja codo a codo con los equipos de desarrollo. 

Queremos saber tu experiencia automatizando tests simultáneos. ¿Cómo lo viviste? ¿Qué tecnologías usaron? ¿Qué aprendieron? 

Facundo Alarcón

Facundo Alarcón es líder de QA Automation en intive desde noviembre de 2017. Estudiante de Ingeniería en Sistemas de la Universidad de la Marina Mercante, Facundo además es webmaster profesional por la Universidad Tecnológica Nacional (UTN). Gamer desde chiquito (“me gustan los videojuegos desde que tengo uso de razón”) y estudiante de artes marciales (wing tsun y esgrima), hace poco comenzó a aprender a hacer sushi. Fan del whisky, es co-fundador de la brigada “after office” de dicha bebida en la oficina.

Sebastián Zapata

Sebastián Zapata trabaja en el área de QA Automation de intive desde marzo de 2018. Cuenta con 2 años de experencia en QA automation-manual,Selenium, ChromeDriver y EndtoEnd testing. Seba se define como un amante de las tecnologias y el desarrollo del software. Dentro del mundo IT seespecializa en lenguajes de programación y arquitectura empleada en casos de pruebas automatizadas. Los hobbies de Seba son los videojuegos y las motos. 

 

Deja un comentario