El futuro del testing automático E2E en Flutter: Maestro

Flutter, la herramienta de desarrollo de software que usa el lenguaje Dart creada por Google, nos ofrece una facilidad increíble y novedosa para el desarrollo tanto en distintas plataformas móviles (Android e iOS) como, en las recientes versiones, en un entorno web más tradicional pensado para el acceso desde un escritorio.

En el entorno de testing automático E2E* a lo largo de los años se han dado a conocer muchas tecnologías para su desarrollo tanto por el mismo equipo de Flutter como de desarrollo externo por parte de comunidades que ven el potencial de la herramienta.

Hoy veremos una herramienta de este último grupo, Maestro.

*(End To End, donde de forma resumida se prueba como QA desde el punto de vista de un usuario el recorrido de un punto X a un punto Y de la aplicación).

Sobre el testing automático en Flutter

Para decidir si nos decantamos por una tecnología u otra a la hora de automatizar los casos de prueba de nuestra aplicación, primero debemos comprender bien qué es exactamente el “testing automático en flutter”.

Centrándonos en el “end to end”, flutter nos ofrece la librería flutter_test y bdd_widget_test. Dos herramientas que, ubicándose dentro de la aplicación que estamos desarrollando con el total acceso a los distintos widgets, páginas y líneas de código nos ofrece un gran control de todo lo que ocurre dentro de ella y es la solución número uno para el testing unitario en flutter.

También ofrecen compatibilidad con Cucumber, haciendo de nuestro testing algo mucho más legible para usuarios no tan técnicos gracias al lenguaje Gherkin que ofrece.

Si bien ofrece todo esto, si que hay que tener en cuenta algo ineludible. El gran conocimiento que requiere del tester sobre flutter, las librerías antes mencionadas y Cucumber, que suele ser la gran montaña a escalar a la hora de afrontar el QA de nuestro proyecto.

Y para solucionar esto entra Maestro en juego.

Maestro, efectividad en la simplicidad

Escrito en base a Appium, Espresso, UIAutomator y XCTest entre otros, mediante el llamado “Flow” (La definición de los pasos del usuario en la aplicación) ofrece un testing que de forma muy sencilla e inmediata nos permite empezar a correr tests donde sea, ya que no es inherente al proyecto sino una ejecución externa.

Esta ejecución ocurre a través de un formato .yaml (un lenguaje pensado para la fácil lectura y escritura para personas sin conocimientos extensos en términos técnicos).

Está diseñado de una forma la cual, a través de los comandos que ofrece puedas de manera sencilla no solo detectar cualquier emulador que se esté reproduciendo en pantalla sin necesidad de vincular nada, también de encontrar de manera rápida los distintos widgets que nos hagan falta para completar el recorrido deseado para el test.

Para compensar la falta de compatibilidad con el modelo POM y Cucumber, Maestro ofrece la posibilidad de organizar una estructura de ejecuciones anidadas unas llamado “Nested flows”. Con la ayuda del comando “runFlow”, que, siempre que la anidación sea correcta, nos permite ejecutar archivos de Maestro por separado, lo que facilita enormemente a la reutilización de código y la posibilidad de organizar una estructura fácil de comprender y manejar.

En profundidad sobre Maestro, sus ventajas y desventajas.

Simpleza demasiado simple

A la hora de ahondar en Maestro vemos que de un rápido vistazo ya hemos visto todo, y esto es bueno y malo. Este tema es quizá el mayor punto de inflexión que se puede tener.

Tales cosas como la implementación correcta de un Page Object Model, Cucucmber, conexión con base de datos y adiciones más avanzadas no son posibles para Maestro, no tal y como se plantea en el resto de los sistemas.

Por eso es fundamental priorizar la complejidad de la aplicación a trabajar antes de elegir la herramienta, que es muy potente y con muy buena proyección, pero también relativamente nueva.

Lenguaje humano

En Maestro se aprende rápido, no hacen falta conocimientos avanzados gracias al uso del lenguaje .yaml. También ofrece la posibilidad de ejecutar comandos con javascript, lo cual ofrece una capa extra de profundidad bastante interesante.

Este simple código ya nos permitiría abrir una aplicación en un dispositivo y simular la pulsación de un botón.

En las librerías anteriormente mencionadas esto sería enormemente más complejo.

Multitud de entornos

No solo nos ofrece la ayuda de la portabilidad del testing al no pertenecer al proyecto base, sino que la herramienta al detectar tanto dispositivos conectados como emuladores simulados por parte de Android Studio (Dispositivos Android) como XCode (Dispositivos IOS).

A cambio de esta comodidad, Maestro pierde en herramientas a mano por parte del tester, al no poder acceder a cosas que existen dentro del proyecto base.

Maestro en WATA Factory

Maestro es una herramienta la cual WATA Factory ha reconocido su utilidad y proyección a futuro. La facilidad que ofrece a la hora de desarrollar test es algo que no se ve en otras herramientas y, aún no estando en algunos proyectos debido a sus respectivas complejidades, siempre se tiene en el punto de mira a la hora de hablar del testing automático en futuras aplicaciones de Flutter.