Integre Test Lab en su sistema CI/CD

1. Introducción

Última actualización: 2022-04-07

Cómo ejecutar pruebas móviles con sistemas CI/CD

Ejecutar pruebas móviles puede ser difícil: muchas aplicaciones se ejecutan en diferentes plataformas, dispositivos y versiones de API. Los desarrolladores de aplicaciones quieren probar tantas configuraciones como sea posible para detectar problemas antes de que lo hagan sus usuarios. Sin embargo, las restricciones de costos y recursos limitan la cantidad de dispositivos de prueba y la cantidad de mantenimiento manual en el que pueden invertir los desarrolladores individuales. Cuando el proceso de desarrollo aumenta, especialmente para los sistemas de integración continua/desarrollo continuo (CI/CD), el proceso de prueba necesita ser automatizado mientras se minimiza el costo y el esfuerzo de mantenimiento.

Para ayudarlo a comprender el rendimiento de sus aplicaciones en los dispositivos de sus usuarios, Firebase Test Lab aloja una variedad de dispositivos móviles físicos y virtuales en nuestros centros de datos. También proporcionamos la CLI de Google Cloud, una herramienta de línea de comandos independiente de la plataforma que orquesta la ejecución de pruebas en los dispositivos de nuestros centros de datos. La CLI de gcloud simplifica la integración de la solución de prueba basada en la nube de Test Lab en los flujos de trabajo de CI/CD existentes.

Soporte multiplataforma

Test Lab proporciona soluciones de prueba para aplicaciones de Android e iOS y soporte especializado para juegos móviles como Unity. Las opciones de prueba cubren marcos de prueba populares como Android Espresso, UI Automator e iOS XCTest. Usando nuestro rastreador automatizado, Robo , Test Lab puede incluso ejecutar pruebas sin ningún código de prueba.

Sin requisitos de hardware

Test Lab aloja dispositivos físicos en los centros de datos de Google y aloja dispositivos virtuales en Google Cloud. Todo lo que necesita hacer es enviar sus pruebas a Test Lab y esperar los resultados.

Rápido y confiable

La ejecución de muchos casos de prueba simultáneos puede llevar mucho tiempo y bloquear los procesos de CI/CD. Con Test Lab, puede fragmentar fácilmente las pruebas y ejecutarlas en varios dispositivos en paralelo. También puede detectar la descamación, un punto débil común de las pruebas móviles.

lo que aprenderás

  • Cómo construir artefactos de prueba
  • Cómo ejecutar una prueba móvil con la CLI de gcloud
  • Cómo configurar Jenkins CI
  • Cómo ejecutar pruebas móviles usando Jenkins CI
  • Cómo configurar pruebas para escalar con sistemas CI

Este codelab se enfoca en ejecutar pruebas. Los conceptos y bloques de código no relevantes se pasan por alto y se proporcionan para que simplemente copie y pegue.

Lo que necesitarás

Si prefiere crear cosas desde cero, necesita Android Studio para ejecutar una prueba de Android o XCode para ejecutar una prueba de iOS. O simplemente tráigase y le proporcionaremos los artefactos.

2. Ejecute una prueba con gcloud CLI

Cree un APK de aplicación de Android y pruebe APK

Para ejecutar una prueba con Test Lab, comience creando un APK de aplicación de Android y un APK de prueba, que contiene pruebas instrumentadas para ejecutar en dispositivos de hardware o emuladores. Si ya tiene un código base en funcionamiento, puede crear sus propios APK o puede usar BasicSample para Espresso .

Para compilar APK con los comandos de Gradle, debe instalar el SDK de Android. Si su Android Studio no está instalado en su máquina, instale Android Studio y Android SDK , y configure el entorno ANDROID_HOME con su directorio Android SDK. Por ejemplo, en su archivo ~/.bash_profile , agregue la siguiente línea:

export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk  # For MacOS

Luego, ejecute los siguientes comandos para clonar el código y compilar APK:

git clone https://github.com/android/testing-samples.git
cd testing-samples/ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Después de ejecutar los comandos de clonación y compilación, puede encontrar el APK de la aplicación y el APK de prueba en las siguientes ubicaciones:

app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Alternativamente, puede usar las siguientes opciones para obtener las pruebas y los APK de la aplicación:

  • Para compilar APK en Android Studio, siga las instrucciones en Probar en Android Studio .
  • Descargue la aplicación de muestra Bloc de notas . Use el archivo binario app-debug-unaligned.apk y el archivo de pruebas de instrumentación app-debug-test-unaligned.apk , que se encuentran en NotePad/app/build/outputs/apk/ .

Si tiene un código fuente funcional para una aplicación de iOS, puede escribir un XCTest y crear un archivo zip a partir de la aplicación y las pruebas.

Usa la CLI de gcloud para ejecutar una prueba con Test Lab

En esta sección, crea un proyecto de Firebase y configura su entorno de SDK de Google Cloud local. Para obtener más información, consulte Comenzar a probar con la CLI de gcloud .

Configurar la CLI de gcloud

  1. Descargue el SDK de Google Cloud , que incluye la herramienta gcloud CLI.
  2. Verifique que su instalación esté actualizada:
gcloud components update
  1. Inicie sesión en la CLI de gcloud con su cuenta de Google:
gcloud auth login
  1. Configure su proyecto de Firebase en gcloud CLI, donde PROJECT_ID es su ID de proyecto de Firebase. Puede encontrar el ID del proyecto en la URL de Firebase Console, que sigue esta convención de nomenclatura: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

Si no tiene un proyecto de Firebase, cree uno en Firebase Console .

Ejecute una prueba con los APK compilados

En esta sección, ejecuta una prueba de instrumentación en el dispositivo predeterminado de Test Lab, que es un Pixel 3 con API nivel 28. Si desea usar un dispositivo diferente, verifique los dispositivos disponibles .

Con la aplicación y los APK de prueba que creó en Cree un APK de aplicación de Android y pruebe el APK, ejecute una prueba de instrumentación de Android con el siguiente comando:

gcloud firebase test android run \
  --type instrumentation \
  --app app/build/outputs/apk/debug/app-debug.apk \
  --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Analizar los resultados de la prueba.

Puede analizar los resultados de la prueba usando cualquiera de las siguientes opciones:

  • Resumen gcloud : cuando finaliza la prueba, la CLI de gcloud imprime un resumen básico de los resultados de la prueba.
  • Código de salida gcloud : una vez que se completa la prueba, el comando sale con 0 si se pasó la prueba. Si la prueba falla, el comando sale con un código de salida distinto de cero.
  • Firebase Console : la CLI de gcloud imprime un enlace a Firebase Console. El enlace sigue la convención de nomenclatura https://console.firebase.google.com/project/PROJECT_ID/testlab/... Para obtener más información, consulte Interpretar los resultados de una sola ejecución de prueba .
  • Archivo XML JUnit : la CLI de gcloud imprime lo siguiente:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]

test-lab-xxxxx/xxxxx es el depósito de Cloud Storage que almacena artefactos y resultados de prueba. Para ubicar el archivo XML JUnit que contiene los resultados de la prueba, abra el enlace y navegue hasta blueline-28-en-portrait/test_result_1.xml .

3. Configurar con Jenkins CI

En esta sección, utilizará Jenkins CI, un popular sistema de CI, para ejecutar pruebas con Test Lab. Si desea utilizar un sistema de CI diferente, consulte Prácticas recomendadas avanzadas para ejecutar conjuntos de pruebas de gran tamaño y la documentación para otros sistemas de CI como Bitrise y Circle CI . Puedes usar Flank como una alternativa a la CLI de gcloud.

Habilite la CLI de gcloud para Jenkins

Antes de poder usar Test Lab con Jenkins, debe habilitar las API requeridas y configurar una cuenta de servicio que Jenkins pueda usar para autenticarse con gcloud CLI.

Agregar una cuenta de servicio de Google Cloud para Jenkins

Las cuentas de servicio son cuentas limitadas destinadas a integraciones de servicios. Estas cuentas ofrecen un control detallado para servicios específicos y no están sujetas a comprobaciones de correo no deseado o avisos de captcha, que de lo contrario podrían bloquear sus compilaciones de CI.

Para crear una cuenta de servicio, siga estos pasos:

  1. Abra la página Cuentas de servicio en Google Cloud Console.
  2. Haga clic en Crear cuenta de servicio , agregue un Nombre y una Descripción y luego haga clic en Crear y continuar .
  3. En el menú desplegable Seleccionar una función , seleccione Básico y, a continuación, seleccione Editor .
  4. Haga clic en Continuar , luego haga clic en Listo .

Luego, crea y descarga una clave de autenticación que Jenkins puede usar para autenticarse como la cuenta de servicio que creó.

Para crear y descargar la clave de la cuenta de servicio, siga estos pasos:

  1. Desde la página Cuentas de servicio en Google Cloud Console, haga clic en el correo electrónico asociado con la cuenta que creó.
  2. Seleccione Claves , luego haga clic en Agregar clave y Crear nueva clave .
  3. Seleccione JSON , luego haga clic en Crear .
  4. Cuando se le solicite que descargue el archivo, haga clic en Aceptar. Descargue el archivo a un lugar seguro en su computadora. Necesitará este archivo más adelante cuando configure Jenkins.

Para obtener más información sobre cómo crear cuentas de servicio, consulte Crear una cuenta de servicio .

Habilite las API de Google Cloud requeridas

La API de Cloud Testing le permite ejecutar pruebas en la infraestructura de Google. Habilitó esta API cuando completó Ejecutar una prueba con la CLI de gcloud. La API de resultados de la herramienta en la nube le permite acceder mediante programación a los resultados de sus pruebas.

  1. Abra la biblioteca de API de Google Developers Console .
  2. En la barra de búsqueda en la parte superior de Firebase Console, ingrese el nombre de cada API requerida ( API de pruebas en la nube y API de resultados de la herramienta en la nube ). Aparece la página de descripción general de la API solicitada.
  3. Haga clic en Habilitar API en la página de descripción general de cada API.

Instalar y configurar Jenkins

Puede instalar y configurar Jenkins CI en Linux, macOS, Windows y muchos otros entornos. Ciertos detalles de este laboratorio de código son específicos para instalar y ejecutar Jenkins CI en Linux, incluido el uso de barras inclinadas (/) en las rutas de los archivos.

Para descargar e instalar Jenkins en una computadora con Linux o Windows, siga las instrucciones para instalar Jenkins . Después de instalar Jenkins, siga las mismas instrucciones de instalación de Jenkins para completar la configuración y acceder al tablero de Jenkins usando http://localhost:8080 .

Verificar complementos instalados

Jenkins admite diferentes sistemas de control de versiones. En este codelab, usas Git para ejecutar la prueba anterior. Y para obtener una mejor experiencia al ejecutar gcloud CLI, debe instalar el complemento GCloud SDK.

  1. En el tablero de Jenkins, haga clic en Administrar Jenkins y luego haga clic en Administrar complementos .
  2. Busque los complementos Git y GCloud SDK e instálelos (si aún no están instalados).

Configure la ubicación de sus SDK de Android y Google Cloud

Ahora indica a Jenkins dónde encontrar Google Cloud SDK y Android SDK.

Para configurar los SDK de Google Cloud y Android para Jenkins, siga estos pasos:

  1. En el tablero de Jenkins, haga clic en Administrar Jenkins y luego haga clic en Configuración global de la herramienta .
  2. en la sección SDK de Google Cloud , haga clic en Agregar SDK de Google Cloud .
  3. En el campo Nombre , ingrese un nombre para la instancia del SDK de Google Cloud que sea fácil de recordar, por ejemplo, GCloud-SDK.
  4. Ingrese su directorio principal de SDK de Google Cloud, por ejemplo, /opt/google-cloud-sdk .
  5. Haga clic en Guardar .
  6. Configure las propiedades de todo el sistema para los SDK de Android y Google Cloud abriendo Panel > Administrar Jenkins > Configurar sistema .
  7. Seleccione la casilla de verificación Variables de entorno y haga clic en Agregar .
  8. En el campo Nombre , ingresa ANDROID_HOME . En el campo Valor , ingrese la ubicación de su SDK de Android, por ejemplo, /opt/Android/Sdk .
  9. Haga clic en la casilla de verificación Ubicaciones de herramientas y haga clic en Agregar . En el menú desplegable Nombre , seleccione el nombre de la instancia del SDK de Google Cloud que agregó en la Configuración de la herramienta global.
  10. En el campo Inicio , ingrese la ubicación de su SDK de Google Cloud, por ejemplo, /opt/google-cloud-sdk .
  11. Haga clic en Guardar .

Agregue las credenciales de su cuenta de servicio a Jenkins

Ahora agrega las credenciales de su cuenta de servicio de la CLI de gcloud a Jenkins para que Jenkins pueda autenticarse y ejecutar correctamente los comandos de la CLI de gcloud.

  1. En el tablero de Jenkins, haga clic en Administrar Jenkins y luego haga clic en Administrar credenciales .
  2. En la sección Tiendas en el ámbito de Jenkins , haga clic en el vínculo del dominio (global) y, a continuación, haga clic en Agregar credenciales .
  3. En el menú desplegable Tipo , seleccione Cuenta de servicio de Google desde clave privada .
  4. En el campo Nombre del proyecto , ingresa el nombre de tu proyecto de Firebase.
  5. Seleccione la clave JSON , luego haga clic en Examinar y busque la ubicación donde guardó la clave de su cuenta de servicio.
  6. Haz clic en Crear .

Ahora está listo para configurar su compilación automatizada de Jenkins para Test Lab.

4. Ejecute pruebas de laboratorio de pruebas con Jenkins CI

Ahora que configuró Jenkins, juntemos todo y ejecutemos la misma prueba con Jenkins.

Puede configurar Jenkins para ejecutar compilaciones automatizadas y ejecutar pruebas cada vez que se registren actualizaciones en su aplicación. También puede configurar Jenkins para ejecutar compilaciones periódicamente. Para obtener más información sobre la configuración de compilaciones en Jenkins, consulte Configuración de compilaciones automáticas .

Crea y configura tu proyecto Jenkins

Cree un proyecto para ejecutar pruebas de integración continua de su aplicación con Test Lab.

Crear un proyecto de Jenkins

  1. Abra el tablero de Jenkins navegando a http://localhost:8080 .
  2. En el tablero de Jenkins, haga clic en Nuevo elemento .
  3. Ingrese un nombre para su proyecto en el campo Nombre del elemento y haga clic en Proyecto de estilo libre para crear un proyecto que use una configuración de compilación única.
  4. Haga clic en Aceptar . Para completar las configuraciones del proyecto, complete las secciones restantes en secuencia.

Configurar la gestión del código fuente

  1. En la pestaña Administración de código fuente , seleccione Git .
  2. Ingrese https://github.com/android/testing-samples.git en el campo URL del repositorio .

Configurar el entorno de compilación

La sección Entorno de compilación le permite configurar las características de compilación. Habilite la autenticación de Google Cloud siguiendo estos pasos:

  1. En la pestaña Build Environment , seleccione la casilla de autenticación GCloud SDK y seleccione el nombre de instalación que eligió cuando agregó su información de instalación de Google Cloud.
  2. En el menú desplegable Credenciales de Google , seleccione las credenciales de la cuenta de servicio que configuró.

Agregue pasos de compilación de Gradle para reconstruir paquetes APK

  1. Desplácese hacia abajo hasta la sección Compilación , haga clic en Agregar paso de compilación y luego seleccione Ejecutar shell .
  2. Agregue un paso de compilación para ejecutar los siguientes comandos en el directorio principal de su aplicación:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Agregar un paso de compilación de la CLI de gcloud a Jenkins

Ahora está listo para agregar un paso de compilación a Jenkins para ejecutar Test Lab mediante la línea de comandos de la CLI de gcloud.

Para agregar el paso de compilación de la CLI de gcloud, agregue un nuevo paso de compilación Ejecutar shell e ingrese el siguiente comando:

gcloud config set project PROJECT_ID
gcloud firebase test android run \
--app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk
--test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Después de finalizar la configuración del proyecto, desplácese hacia abajo hasta la parte inferior de la página y guarde la configuración. Se le redirigirá a la página de inicio del nuevo proyecto.

Ejecutar pruebas con Jenkins

Ahora está listo para compilar el proyecto Jenkins y ejecutar una prueba como la prueba manual que ejecutó con gcloud CLI.

Para ejecutar la prueba con Jenkins, siga estos pasos:

  1. Para activar la compilación manualmente, haga clic en Crear ahora .
  2. Verifique el progreso y los resultados haciendo clic en la nueva compilación > Resultados de la consola .

Si no ve errores, ¡enhorabuena! Simplemente configura un proyecto y ejecuta una prueba en un dispositivo Pixel 2 con un solo clic. Si encuentra errores, consulte Solución de problemas .

5. Mejores prácticas avanzadas para ejecutar conjuntos de pruebas grandes

Cuando desee ejecutar muchas pruebas simultáneas, siga estas mejores prácticas para asegurarse de que sus pruebas se ejecuten de manera rápida y confiable.

Aumente la cobertura en múltiples configuraciones de dispositivos

Puede agregar fácilmente varios dispositivos al paso de compilación de la CLI de gcloud. Y puede verificar y elegir dispositivos, versiones, configuraciones regionales y orientaciones disponibles. Por ejemplo, el siguiente comando ejecuta pruebas en dos dispositivos:

  • Un Google Pixel 2 virtual con nivel de API 30 en orientación vertical y configuración regional en inglés
  • Un Samsung Galaxy S20 físico con API nivel 29 en orientación horizontal y configuración regional francesa
gcloud firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --device model=Pixel2,version=30,locale=en,orientation=portrait  \
  --device model=x1q,version=29,locale=fr,orientation=landscape

Usar un archivo de configuración YAML de la CLI de gcloud

Si prefiere administrar sus argumentos en un solo lugar o con su sistema de control de código fuente, puede especificar estos argumentos en un archivo de argumentos con formato YAML. Para obtener información sobre cómo usar esta función, ejecuta gcloud topic arg-files .

Pruebas de fragmentos para ejecutar en paralelo

La fragmentación de pruebas divide un conjunto de pruebas en subgrupos (fragmentos) que se ejecutan por separado de forma aislada. Test Lab ejecuta automáticamente cada fragmento en paralelo utilizando varios dispositivos, lo que permite a Test Lab completar todo el conjunto de pruebas más rápidamente. Para obtener más información, consulte Habilitar fragmentación .

Para habilitar la fragmentación, use el canal gcloud beta y agregue el indicador –num-uniform-shards o –test-targets-for-shard al paso de compilación de la CLI de gcloud. Por ejemplo, para dividir sus pruebas en cinco ejecuciones y ejecutarlas en paralelo, ejecute los siguientes comandos:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-uniform-shards 5

Habilitar la detección de descamación

Las pruebas móviles a menudo pueden ser escamosas. A veces las pruebas pasan y otras pueden fallar, incluso con la misma configuración. Puede detectar si una prueba fallida fue inestable mediante el uso de la marca de la CLI de gcloud –num-flaky-test-attempts . Este indicador especifica el número de veces que se debe volver a intentar la ejecución de una prueba si uno o más de los casos de prueba fallan por algún motivo.

Por ejemplo, para volver a ejecutar casos de prueba fallidos tres veces más después de la ejecución fallida inicial, especifique lo siguiente:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-flaky-test-attempts 3

6. Felicitaciones

¡Felicitaciones, realizó con éxito su primera prueba de laboratorio con un sistema CI!

Compiló APK de aplicaciones y pruebas, y ejecutó una prueba de instrumentación con Test Lab mediante la CLI de gcloud. También configura un proyecto de Jenkins para automatizar la misma prueba.

Ahora conoce los pasos clave para integrar Test Lab en su sistema CI/CD.

¿Que sigue?

Consulte Cómo configurar CI con Firebase Emulator Suite

Otras lecturas

Documentos de referencia