En el post de hoy hablaremos sobre Maestro, una herramienta para pruebas E2E y de UI relativamente nueva que ha ganado popularidad en los últimos años, especialmente en el ámbito de la automatización de pruebas para Android e iOS, además de Flutter o ReactNative.

Este tipo de tests son muy importantes ya que replican el funcionamiento real de la app, simulando el proceso de pruebas manual que tendría que ejecutar un perfil QA para asegurar su integridad y funcionalidad. Mediante Maestro podemos automatizar una serie de escenarios y comprobar que el flujo obtenido al realizar las acciones indicadas desemboca en el resultado esperado.

La diferencia principal entre Maestro y otros frameworks de pruebas más popularizados como Appium radica en su ligereza, ausencia de configuración, velocidad de prueba y en su sintaxis declarativa a través de archivos yaml, además de la ya mencionada capacidad multiplataforma y la posibilidad de integrarse en un ciclo de CI/CD de manera sencilla.

logo de Maestro

Configuración y uso

Para poder utilizar Maestro, en primer lugar instalaremos el framework mediante el siguiente comando en Windows (WSL), Linux o Mac y lo actualizaremos volviendo a ejecutar el mismo comando. Por último, y tal y como se indica en las instrucciones que aparecerán en el terminal, tenemos que exportar el path de la carpeta instalada:

Instalación y actualización

curl -Ls "https://get.maestro.mobile.dev" | bash
curl -Ls "https://get.maestro.mobile.dev" | bash
 
export PATH="$PATH":"$HOME/.maestro/bin"

Una vez instalado, podemos probar su correcta instalación ejecutando el comando maestro en un nuevo terminal. Maestro requiere que la variable JAVA_HOME esté definida en las variables del sistema, por lo que es posible que pida su configuración en caso de no detectarla.

A continuación, para conectar Maestro con el dispositivo, solo hemos de ejecutar el comando maestro test en el terminal y, en el caso de Android, detectará y utilizará cualquier emulador local o dispositivo conectado por USB que detecte. Para comprobar que el dispositivo conectado está activo, podemos ejecutar el comando adb devices.

En el caso de iOS, hemos de ejecutar un paso previo: la instalación de la herramienta Facebook IDB, ya que, por el momento, el framework no soporta el uso de dispositivos iOS reales.

Instalación Facebook IDB

brew tap facebook/fb
brew install facebook/fb/idb-companion

Por último, Maestro ofrece una app de pruebas y varios flows de ejemplo que se pueden descargar en la carpeta /samples del directorio actual ejecutando el siguiente comando:

Descarga ejemplos

maestro download-samples

Para ejecutar los flows definidos en un archivo yaml ejecutaremos los siguientes comandos (dependiendo de si estamos probando la aplicación iOS o Android):

Ejecución de tests con Maestro

// iOScd ./samples
unzip sample.zip
xcrun simctl install Booted Wikipedia.app
maestro test ios-flow.yaml/ / Android

cd ./samples
adb install sample.apk
maestro test android-flow.yaml

Ejemplo test YAML

En primer lugar debemos saber que YAML es un lenguaje versátil y legible por humanos para serializar datos, que se utiliza a menudo para escribir archivos de configuración. Proporciona un formato estandarizado para representar datos estructurados de forma que sea fácil de entender para los humanos y de interpretar para las máquinas.

A continuación se muestran ejemplos tanto para Android como para iOS de un flow de Maestro definido en Yaml:

Flow Android

# flow_contacts_android.yaml
 
appId: com.android.contacts

- launchApp
- tapOn: "Create new contact"
- tapOn: "First Name"
- inputText: "John"
- tapOn: "Last Name"
- inputText: "Snow"
- tapOn: "Save"
- assertVisible: "Contact save

Flow iOS

# flow_contacts_ios.yaml

appId: com.apple.MobileAddressBook

- launchApp
- tapOn: "John Appleseed"
- tapOn: "Edit"
- tapOn: "Add phone"
- inputText: "123123"
- tapOn: "Done"
- assertVisible: "Contact modified"

Test suites y reports

Maestro puede ejecutar un conjunto (suite) de tests y generar un informe al finalizar. Para ello, usaremos el comando maestro test folderWithTests/ sobre la carpeta contenedora de los tests a ejecutar.

Además, podemos hacer que el reporte generado tenga extensión XML o HTML indicándoselo en la propia instrucción. Adicionalmente, podemos cambiar el nombre del informe generado para localizarlo más fácilmente con el parámetro --output fileName:

# Ejecución suite Maestro
maestro test folderWithTests/

# Generación de reports en XML o HTML:
maestro test --format JUNIT folderWithTests/
maestro test --format HTML folderWithTests/

# Generación de archivo informe.html:
maestro test --format HTML --output informe.html folderWithTests/

El report será generado en la raíz del proyecto.

pantallazo del reporting creado

Conclusiones

Como hemos visto, Maestro es una herramienta muy ligera y versátil que nos permite estar creando nuestros tests menos de 10 minutos después de su instalación, además de utilizar un lenguaje muy legible y ofrecer apoyo adicional para la creación de tests a través de su Studio.

Si quieres conocer más sobre esta herramienta, hablaremos de aspectos más avanzados en el siguiente artículo. Muchas gracias por tu tiempo y esperamos que haya sido de tu interés!

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete