¡Quiero una Automatización sobre un Flujo de Interfaz de Usuario!
En el mundo de las pruebas automatizadas se tienen unos lineamientos muy claros; hablemos de pruebas automatizadas funcionales de aseguramiento de calidad, teniendo en cuenta las características del entorno en el cual vamos a trabajar.
Dentro de los niveles de pruebas que podemos automatizar funcionalmente tenemos: Pruebas de Integración (servicios web y APIs) y Pruebas a nivel de Interfaz de Usuario (UI) (por componentes y E2E).
Tipo de Proyecto
En los proyectos donde el producto que está bajo pruebas es un mantenimiento, dependiendo del tipo de mantenimiento, se recomienda realizar pruebas a nivel de UI para seguir garantizando la continuidad de la navegabilidad de cara a los usuarios; para proyectos donde se está en desarrollo (incluye cambios grandes a nivel de UI) se recomienda realizar las pruebas a nivel de Integraciones ya que la inestabilidad de la interfaz no permite realizar unas pruebas automatizadas exitosas.
Dependencias externas
Cuando la aplicación en pruebas tiene una alta dependencia con otras aplicaciones, la recomendación es realizar automatizaciones sobre las integraciones que permitan validar constantemente que el paso de información es correcto, en este punto las pruebas de UI tienen un gran riesgo que hace que estas automatizaciones fallen:
1) Si dentro del proyecto no se tiene conocimiento de las aplicaciones externas entonces los cambios son no controlados y no predecibles.
2) Si el proyecto tiene conocimiento de las aplicaciones externas, pero no control sobre los despliegues, igualmente los cambios en el ambiente de pruebas se vuelven incontrolables.
Con estos dos puntos anteriores, el retorno de inversión de una automatización a nivel de UI con esas características es incierto, más aún cuando se sabe que las aplicaciones con las que se interactúa hacen cambios constantes y reversan esos cambios con igual periodicidad.
Velocidad de ejecución
Otra característica de las automatizaciones de UI, es que la velocidad de los robots, no es significativamente menor a una prueba manual (ya que depende mucho de los tiempos de carga y respuesta de las páginas), entre las ventajas esta la cobertura, las pruebas de compatibilidad, y la posibilidad de ejecutar pruebas desatendidas que afecta positiva y directamente el tiempo utilizado en las pruebas de regresión.
En conclusión, si revisamos las características antes mencionadas: tipo de proyecto, dependencia externa, y velocidad de ejecución, podemos resaltar unos aspectos a tener en cuenta cuando se quieren hacer automatizaciones a nivel de UI.
- Validar la existencia de dependencias externas en la aplicación a automatizar que afecten la interfaz.
- Si hay dependencias, validar siempre la estabilidad, tiempos de respuesta, y programación de despliegues. Si no se puede determinar esta información, no es candidata para automatizar por UI.
- Manejar la expectativa de reducción en tiempos de ejecución, se reduce el tiempo de una persona ejecutando la prueba, el tiempo total de ejecución no se reduce significativamente a menos que sean pruebas de compatibilidad.
- Si el proyecto es un mantenimiento, verificar si los cambios en la interfaz sobre los flujos a automatizar son significativos. Si lo son, no es candidata para automatizar por UI.
- Hacer un cálculo de retorno de inversión antes de comenzar permite saber en qué momento se comienza a generar valor y manejar así la expectativa inmediata del cliente.
- No se debe automatizar solo porque el cliente lo pide, se debe analizar, hacer cálculos y generar una decisión que genere valor.
Las automatizaciones de UI son muy útiles, pero hay que saberlas seleccionar; dentro de todos los tipos de automatizaciones se aconseja que sea las que se tengan en menor cantidad pues cuando se entra en ciclos de mantenimiento pueden incurrir en alto costo de actualizaciones y como ya se discutió, el retorno está dado por una combinación de factores no por la velocidad de ejecución.
Se pueden automatizar por UI aplicaciones de escritorio, web y móviles, para las tres se aplica lo que se discutió anteriormente; adicionalmente hay que prestarle atención al diseño de las automatizaciones, de tal modo que se permita hacer mantenimientos rápidos y sostenidos en el tiempo.