Hace unos días empezamos a hablar sobre Maestro, la herramienta de pruebas E2E y UI que ha ido ganando popularidad en el ámbito de la automatización de pruebas para Android e iOS. Hablamos sobre su configuración y uso, un ejemplo test YAML, test suites y reporting. Hoy entramos en detalles sobre su configuración avanzada.

Archivo de configuración

Maestro permite definir características generales de los tests y su ejecución en un fichero global config.yaml en la raíz de la carpeta contenedora de los tests.

Por ejemplo, por defecto, al ejecutar los tests de una carpeta, no se ejecutarán los tests almacenados en subcarpetas de la misma. Para controlar esto podemos cambiar (o crear si no existe) el archivo de configuración anteriormente mencionado e indicar el comportamiento deseado utilizando patrones de inclusión:

# Incluir también tests dentro de subfolder
flows:
  - "*" # Comportamiento por defecto
  - "subFolder/*"
 
# Incluir tests recursivamente
flows:
  - "**"

Otra propiedad que podemos configurar es el orden en el que deseamos que se ejecuten los tests en el mismo archivo:

executionOrder:
    continueOnFailure: false # Por defecto es true
    flowsOrder:
        - flowA
        - flowB

En este caso, indicamos que los flows flowA y flowB deben ser ejecutados secuencialmente. En caso de existir más flows en la carpeta contenedora, se ejecutarán también en cualquier orden una vez hayan finalizado los secuenciales.

El archivo de configuración se suele ubicar en la carpeta raíz, por ejemplo .maestro/config.yaml. Aquí puedes encontrar más información sobre la configuración de Maestro.

Arquitectura

A la hora de estructurar nuestro proyecto, se recomienda tener una carpeta raíz .maestro/ la cual contendrá el archivo de configuración de Maestro config.yaml, los tests organizados en subcarpetas por funcionalidades/flujos y los snippets de JavaScript necesarios en otra carpeta aparte (dichos scripts se referencian mediante su PATH por lo que no importa su localización/anidamiento ni nombre).

arquitectura de la estructura de carpetas. Maestro / configFlows (flowConfigA, flowConfigB), scripts (jsScripts.js, config.yaml.flowA.yaml, flowB.yaml)

Como vimos en la sección anterior, Maestro ejecuta por defecto todos los tests contenidos en la carpeta principal sin tener en cuenta subcarpeta pero, aunque dicha configuración por defecto puede ser sobreescrita como se vio anteriormente, también se ofrecen otras opciones para la exclusión/inclusión de tests como pueden ser los tags.

El uso de tags nos permite asignar una o varias etiquetas dentro de cada flow en la parte de la configuración. Dichas etiquetas se pueden utilizar más tarde para excluir o incluir flows de forma explícita en las ejecuciones. Hay que destacar que si un flow tiene varios tags, se ejecutará si al menos uno de ellos coincide con el especificado.

A continuación se muestra un ejemplo de definición de tags dentro de un test:

# flowDarkMode.yaml
appId: com.example.app # Definición de la paquetería de la app
tags: # Definición de tags (de 1 a N)
  - pre
  - config
---
# Cuerpo del test

Para posteriormente ejecutar los tests asociados a un tag en concreto, tenemos dos opciones: mediante línea de comandos desde un terminal o de forma global en el propio fichero config.yaml:

# Desde terminal
maestro test --include-tags=config .maestro/
 
# En el fichero config.yaml
includeTags:
  - tagNameToInclude1
  - tagNameToIncludeN
excludeTags:
  - tagNameToExclude1
  - tagNameToExcludeN

Maestro Studio

Maestro incluye un asistente para crear los flows llamado Maestro Studio. Para lanzarlo simplemente invocaremos el siguiente comando:

maestro studio

Maestro entonces abrirá una pestaña del navegador mostrando el dispositivo conectado (virtual o físico) y podremos definir un flow de manera visual haciendo click en los elementos deseados.

Paralelización

Actualmente, Maestro permite la ejecución paralela de tests de dos formas distintas según las necesidades que tengamos.

Podemos ejecutar suites completas en paralelo al mismo tiempo en varios dispositivos mediante el siguiente comando:

maestro test --shard-all 3 .maestro

El único requisito para esto es estar ejecutando Maestro en su versión 1.39 o superior. En versiones anteriores no hay dos opciones, solo una mediante el comando --shards:

maestro test --shards 3 .maestro

Otra opción que ofrece es dividir la misma suite de tests en distintos dispositivos al mismo tiempo. Por ejemplo: si tenemos 12 tests en una suite y 3 dispositivos conectados, podemos hacer que cada uno de ellos ejecute 4 de los test, dividiendo la carga de trabajo entre los dispositivos. Esto es posible mediante el comando:

maestro test --shard-split 3 .maestro

El único requisito para poder hacer uso del comando --shard en cualquiera de sus dos vertientes (all/split) es tener conectados al menos 3 dispositivos. En caso contrario, Maestro contestará con un error.

Al hacer la comparativa de la suite de ejemplo (4 tests) corriendo en un solo terminal o dividiéndolo entre los dispositivos conectados, vemos una significativa diferencia en tiempos:

Integración con CI/CD

Para la integración de Maestro en un flujo de integración continua tendremos que seguir una serie de pasos.

En primer lugar tenemos que organizar todos nuestros flows bajo un mismo directorio en la raíz de nuestro repo (se recomienda el directorio .maestro/ ya que es el utilizado por defecto).

Maestro Cloud

Maestro Cloud es la herramienta recomendada por Maestro para ejecutar nuestros tests en dispositivos virtuales alojados en su nube. Esta opción es de pago.

Todos los flows directamente bajo la carpeta .maestro/ serán ejecutados directamente por Maestro Cloud.

çEl siguiente paso será crear una cuenta en Maestro Cloud para obtener nuestro API KEY. A continuación instalaremos el Maestro CLI en nuestro CI y añadiremos un paso en el workflow que ejecute Maestro Cloud:


// Instalación
curl -Ls "https://get.maestro.mobile.dev" | bash
 
// Ejecución
maestro cloud --apiKey <apiKey> <appFile> .maestro/

Para más información sobre la integración y sus opciones sigue este enlace.

Servidor local

Podemos hacer uso de Maestro de la misma forma que lo venimos haciendo en local. Para ello, tendremos que crear nuestro propio servidor de CI/CD y conectarlo a los dispositivos de prueba que vayamos a utilizar, ya sean virtuales o físicos.

Ventajas

Desventajas

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