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

Realizar pruebas móviles puede resultar 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 limitaciones de costos y recursos limitan la cantidad de dispositivos de prueba y la cantidad de mantenimiento manual en el que los desarrolladores individuales pueden invertir. Cuando el proceso de desarrollo aumenta, especialmente para sistemas de integración continua/desarrollo continuo (CI/CD), el proceso de prueba necesita automatizarse minimizando el coste y el esfuerzo de mantenimiento.

Para ayudarlo a comprender cómo funcionan 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 Google Cloud CLI, una herramienta de línea de comandos independiente de la plataforma que organiza 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 pruebas basada en la nube de Test Lab en los flujos de trabajo de CI/CD existentes.

Soporte multiplataforma

Test Lab ofrece 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 y iOS XCTest. Utilizando 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, lo que bloquea los procesos de CI/CD. Con Test Lab, puede fragmentar fácilmente pruebas y ejecutarlas en varios dispositivos en paralelo. También puede detectar descamación, un punto débil común en las pruebas móviles.

lo que aprenderás

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

Este codelab se centra en la ejecución de pruebas. Los conceptos y bloques de código no relevantes se pasan por alto y se proporcionan para que usted simplemente los 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 usted mismo y le proporcionaremos los artefactos.

2. Ejecute una prueba con la CLI de gcloud

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

Para ejecutar una prueba con Test Lab, comience por crear 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 funcional, puede crear sus propios APK o puede usar BasicSample for Espresso .

Para crear APK usando 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 de 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 crear 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 utilizar las siguientes opciones para obtener los APK de prueba y aplicación:

  • Para compilar APK en Android Studio, sigue las instrucciones en Prueba en Android Studio .
  • Descargue la aplicación de Bloc de notas de muestra. Utilice 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, creará un proyecto de Firebase y configurará su entorno local de SDK de Google Cloud. Para obtener más información, consulta Comenzar a realizar pruebas con la CLI de gcloud .

Configurar la CLI de gcloud

  1. Descarga el SDK de Google Cloud , que incluye la herramienta CLI de gcloud.
  2. Verifica que tu instalación esté actualizada:
gcloud components update
  1. Inicia sesión en la CLI de gcloud con tu cuenta de Google:
gcloud auth login
  1. Configura tu proyecto de Firebase en la CLI de gcloud, donde PROJECT_ID es el ID de tu 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 tienes un proyecto de Firebase, crea uno en Firebase Console .

Ejecute una prueba utilizando los APK integrados

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

Usando la aplicación y probando los APK que creó en Crear un APK de aplicación para Android y probando el APK, ejecute una prueba de instrumentación de Android usando 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 utilizando 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 completada la prueba, el comando sale con 0 si la prueba pasó. Si la prueba falla, el comando sale con un código de salida distinto de cero.
  • Firebase Console : gcloud CLI 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 única ejecución de prueba .
  • Archivo JUnit XML : 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 los artefactos y los resultados de las pruebas. 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 sistema de CI popular, para ejecutar pruebas con Test Lab. Si desea utilizar un sistema de CI diferente, consulte Mejores prácticas avanzadas para ejecutar grandes conjuntos de pruebas y la documentación para otros sistemas de CI como Bitrise y Circle CI . Puedes usar Flank como alternativa a la CLI de gcloud.

Habilite la CLI de gcloud para Jenkins

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

Agregue 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 spam ni mensajes de captcha, que de otro modo 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 luego seleccione Editor .
  4. Haga clic en Continuar y luego haga clic en Listo .

A continuación, 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 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 y luego haga clic en Crear .
  4. Cuando se le solicite descargar 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 te permite ejecutar pruebas en la infraestructura de Google. Habilitaste esta API cuando completaste 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 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 Cloud Testing y API de resultados de herramientas de Cloud ). 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 codelab son específicos de la instalación y ejecución de Jenkins CI en Linux, incluido el uso de barras diagonales (/) en las rutas de los archivos.

Para descargar e instalar Jenkins en una computadora que ejecuta 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 panel de Jenkins mediante 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 la CLI de gcloud, debe instalar el complemento GCloud SDK.

  1. En el panel de Jenkins, haga clic en Administrar Jenkins y luego haga clic en Administrar complementos .
  2. Busque los complementos de 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 le indicará a Jenkins dónde encontrar el SDK de Google Cloud y el SDK de Android.

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

  1. En el panel de Jenkins, haga clic en Administrar Jenkins y luego haga clic en Configuración global de herramientas .
  2. En la sección SDK de Google Cloud , haz clic en Agregar SDK de Google Cloud .
  3. En el campo Nombre , ingresa un nombre para la instancia del SDK de Google Cloud que sea fácil de recordar, por ejemplo, GCloud-SDK.
  4. Ingrese su directorio de inicio del SDK de Google Cloud, por ejemplo, /opt/google-cloud-sdk .
  5. 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 , ingrese 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 global de herramientas.
  10. En el campo Inicio , ingrese la ubicación de su SDK de Google Cloud, por ejemplo, /opt/google-cloud-sdk .
  11. Clic en Guardar .

Agregue las credenciales de su cuenta de servicio a Jenkins

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

  1. En el panel de Jenkins, haga clic en Administrar Jenkins y luego haga clic en Administrar credenciales .
  2. En la sección Tiendas con ámbito de Jenkins , haga clic en el enlace del dominio (global) y luego 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 Explorar y busque la ubicación donde guardó la clave de su cuenta de servicio.
  6. Haga 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 ha configurado Jenkins, juntemos todo y ejecutemos la misma prueba con Jenkins.

Puede configurar Jenkins para ejecutar compilaciones automatizadas y ejecutar pruebas cada vez que se registran actualizaciones de su aplicación. También puede configurar Jenkins para ejecutar compilaciones periódicamente. Para obtener más información sobre cómo configurar 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 Jenkins

  1. Abra el panel de Jenkins navegando hasta http://localhost:8080 .
  2. En el panel 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 Freestyle para crear un proyecto que utilice 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 construcció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 Crear entorno , seleccione la casilla de verificación de autenticación del SDK de GCloud 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 Generar , 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

Agregue un paso de compilación de CLI de gcloud a Jenkins

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

Para agregar el paso de compilación de la CLI de gcloud, agrega un nuevo paso de compilación de Ejecutar shell e ingresa 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 el final 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 la CLI de gcloud.

Para ejecutar la prueba con Jenkins, siga estos pasos:

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

Si no ves errores, ¡enhorabuena! Simplemente configuró un proyecto y ejecutó 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 grandes conjuntos de pruebas

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

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

  • Un Google Pixel 2 virtual con API nivel 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 aprender a usar esta función, ejecuta gcloud topic arg-files .

Pruebas de fragmentos que se ejecutarán 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 la marca –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 resultar inestables. A veces las pruebas pasan y otras veces pueden fallar, incluso con la misma configuración. Puedes detectar si una prueba fallida fue inestable usando el indicador CLI de gcloud –num-flaky-test-attempts . Este indicador especifica la cantidad 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 de pruebas con un sistema CI!

Creaste aplicaciones y APK de prueba, y ejecutaste una prueba de instrumentación con Test Lab mediante la CLI de gcloud. También configuró 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 usando Firebase Emulator Suite

Otras lecturas

Documentos de referencia