Acelerando las pruebas instrumentadas — Parte 2: Flank

Optimizando el tiempo de tu pipeline en Android

Yamil Medina
Droid LATAM
4 min readJan 10, 2021

--

Observación: Esta sección es solo válida si utilizas Firebase Test Lab para la ejecución de tus pruebas instrumentadas de Espresso

Según wikipedia:

… Flank speed, en español “Velocidad de flanco”, es un término náutico para referirse a la velocidad máxima verdadera de un barco …

Flank, en nuestro caso, es una herramienta desarrollada por Walmart Labs y que inclusive ha ganado espacio dentro de la comunidad oficial de Firebase y es obvio, ya que para su desarrollo WalmartLabs tuvo el soporte y apoyo de la misma gente de Google.

¿Qué hace Flank?

Flank utiliza un sistema de sharding, que en la práctica, consiste en dividir una ejecución de pruebas en distintos (número) emuladores. Para hacer esto posible, es necesario implementar un TestRunner a la medida, nosotros solo nos vamos a enfocar en su utilización, si tienes el coraje y motivación de bajar unos niveles existe información oficial 👉 acá.

Primero una ejecución normal con Firebase Testlab

Como vemos, primero necesitamos el terminal de GCP (gcloud) configurado, no entraré en detalles de cómo hacer este paso, pues con la documentación oficial debiese estar funcionando en un par de minutos 👉 acá.

Si te fijas, necesitaremos el apk de pruebas y el de la app a probar, 2 ejecuciones de build que deben estar hechas antes de ejecutar las pruebas.

Lo anterior tendrá como resultado la ejecución de nuestras pruebas en la “nube” de Firebase/Google, utilizando sus emuladores o inclusive (si tenemos buen presupuesto 💸) dispositivos reales/físicos.

Ejecución con Flank

Con Flank podemos hacer exactamente lo anterior, pero vamos a sacarle provecho a las opciones de sharding que mencionamos y que está alineado con el objetivo del artículo, mejorar los tiempos de ejecución de nuestro pipeline.

Imagen de WalmartLabs medium.

Utilizando Flank y su sharding inteligente.

Primero para ejecutar pruebas con Flank, tenemos que instalar dentro de nuestro codebase el jar de flank, el cual podemos bajar del repositorio oficial. Una vez hecho esto, podremos utilizar flank de la siguiente manera

Se hace mención a un flank.yml esta es la receta que estamos utilizando actualmente para conseguir un performance similar a filtrar por packages.

Si analizamos, tenemos una sección gcloud que es equivalente a la configuración solo con Firebase TestLab y luego tenemos una sección para Flank.

Las configuraciones que tenemos:

  • max-test-shards: La cantidad máxima de grupos (shards) en la cual los tests se dividirán
  • shard-time: Lo recomendado es 120, pero al dejar el valor en -1, delegamos a flank el cálculo mas eficiente para separar los casos de prueba en distintos emuladores, este cálculo es eficiente/inteligente o “smart” en las mismas palabras de sus creadores porque los datos guardados en gs://YOUR_GCP_BUCKET/test_app_android.xml contiene los tiempos de ejecución de cada prueba para que el algoritmo de Flank realice la distribución mas eficiente
  • smart-flank-gcs-path: La ruta del archivo en donde se registran los tiempos de ejecución de las pruebas
  • smart-flank-disable-upload: Permite subir el archivo con los registros de tiempos de ejecución de pruebas, necesario la primera vez, luego podemos deshabilitar cuando alcanzamos cierta estabilidad e ir actualizando cada cierto tiempo

Sobre Smart Flank, el esquema de cobro de Firebase es por 1 minuto de emulador utilizado (redondeado hacia el minuto superior), eso quiere decir que:

Flank organiza los casos de pruebas por emulador para maximizar hacia el minuto 1 o al minuto 2 y no sub utilizar ese recurso !bastante inteligente!

Una ejecución utilizando Flank

Finalizo, con algunos aprendizajes.

  • Los resultados obtenidos con Flank son equivalentes para nuestro caso, reducción del 50% en las pruebas instrumentadas
  • Siempre que sea posible, podemos separar las ejecuciones en paralelo, sobretodo a medida que nuestra pirámide de pruebas crece, ya sea en pruebas unitarias o de instrumentación
  • No necesitamos grandes herramientas para realizar optimizaciones a nuestros procesos, quizás solo seguir la antigua premisa de divide y vencerás para generar un impacto positivo
  • A veces calcular estos datos con una mirada amplia, por ejemplo semanas en vez de días, podemos concientizar mejor el verdadero impacto generado por un pipeline eficiente y como agilizan el desarrollo

Mas información:

Serie

Esta es una serie de 2 partes:

Parte 1 — AM Instrument

Parte 2 — Flank (Esta historia)

--

--

Yamil Medina
Droid LATAM

Software Engineer / Android Developer / JVM ❤ / Cycling enthusiast