1. Introducción
Última actualización: 7/4/2022
Cómo ejecutar pruebas para dispositivos móviles con sistemas de CI/CD
Ejecutar pruebas en dispositivos móviles puede ser difícil, ya que muchas apps se ejecutan en diferentes plataformas, dispositivos y versiones de API. Los desarrolladores de apps quieren probar tantas configuraciones como sea posible para detectar problemas antes que 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 los desarrolladores individuales pueden invertir. Cuando el proceso de desarrollo se escala, especialmente para los sistemas de integración continua/entrega continua (CI/CD), el proceso de prueba debe automatizarse y, al mismo tiempo, minimizar el costo y el esfuerzo de mantenimiento.
Para ayudarte a comprender el rendimiento de tus apps en los dispositivos de tus 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. gcloud CLI facilita 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.
Asistencia multiplataforma
Test Lab proporciona soluciones de prueba para apps para iOS y Android, y asistencia especializada para juegos para dispositivos móviles, como Unity. Las opciones de prueba abarcan frameworks de prueba populares, como Android Espresso, UI Automator y XCTest para iOS. Con nuestro rastreador automatizado, Robo, Test Lab incluso puede 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 dispositivos virtuales en Google Cloud. Solo debes enviar tus pruebas a Test Lab y esperar los resultados.
Rápida y confiable
Ejecutar muchos casos de prueba simultáneos puede llevar mucho tiempo y bloquear los procesos de CI/CD. Con Test Lab, puedes dividir las pruebas fácilmente y ejecutarlas en varios dispositivos en paralelo. También puedes detectar inconsistencias, un problema común de las pruebas para dispositivos móviles.
Qué aprenderás
- Cómo compilar artefactos de prueba
- Cómo ejecutar una prueba para dispositivos móviles con gcloud CLI
- Cómo configurar Jenkins CI
- Cómo ejecutar pruebas para dispositivos móviles con Jenkins CI
- Cómo configurar pruebas para escalar verticalmente con sistemas de CI
Este codelab se enfoca en la ejecución de pruebas. Los conceptos y los bloques de código no relevantes se pasan por alto y se proporcionan para que simplemente los copies y pegues.
Requisitos
Si prefieres compilar desde cero, necesitas Android Studio para ejecutar una prueba de Android o Xcode para ejecutar una prueba de iOS. O simplemente ven y te proporcionaremos los artefactos.
2. Ejecuta una prueba con gcloud CLI
Cómo compilar un APK de app para Android y un APK de prueba
Para ejecutar una prueba con Test Lab, primero compila un APK de app para Android y un APK de prueba, que contiene pruebas instrumentadas para ejecutar en dispositivos de hardware o emuladores. Si ya tienes una base de código que funciona, puedes compilar tus propios APKs o usar BasicSample para Espresso.
Para compilar APK con comandos de Gradle, debes instalar el SDK de Android. Si no tienes Android Studio instalado en tu equipo, instala Android Studio y el SDK de Android, y configura el entorno ANDROID_HOME
con el directorio de tu SDK de Android. Por ejemplo, en tu archivo ~/.bash_profile
, agrega la siguiente línea:
export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk # For MacOS
Luego, ejecuta los siguientes comandos para clonar el código y compilar los APKs:
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, puedes encontrar el APK de la app 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
También puedes usar las siguientes opciones para obtener los APK de prueba y de la app:
- Para compilar APKs en Android Studio, sigue las instrucciones que se indican en Cómo realizar pruebas en Android Studio.
- Descarga la app de Notepad de muestra. Usa el archivo binario
app-debug-unaligned.apk
y el archivo de pruebas de instrumentaciónapp-debug-test-unaligned.apk
, que se encuentran enNotePad/app/build/outputs/apk/
.
Si tienes un código fuente que funciona para una app para iOS, puedes escribir un XCTest y compilar un archivo ZIP a partir de la app y las pruebas.
Usa la CLI de gcloud para ejecutar una prueba con Test Lab
En esta sección, crearás un proyecto de Firebase y configurarás tu entorno local del SDK de Google Cloud. Para obtener más información, consulta Comienza a realizar pruebas con gcloud CLI .
Configura la CLI de gcloud
- Descarga el SDK de Google Cloud, que incluye la herramienta de CLI de gcloud.
- Verifica que la instalación esté actualizada:
gcloud components update
- Accede a gcloud CLI con tu Cuenta de Google:
gcloud auth login
- Configura tu proyecto de Firebase en gcloud CLI, en el que
PROJECT_ID
es el ID de tu proyecto de Firebase. Puedes encontrar el ID del proyecto en la URL de Firebase console, que sigue esta convención de nombres: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.
Cómo ejecutar una prueba con los APK compilados
En esta sección, ejecutarás una prueba de instrumentación en el dispositivo predeterminado de Test Lab, que es un Pixel 3 con el nivel de API 28. Si quieres usar otro dispositivo, consulta los dispositivos disponibles.
Usa la app y prueba los APKs que compilaste en Cómo compilar un APK de app para Android y probarlo. Ejecuta 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
Analiza los resultados de la prueba
Puedes analizar los resultados de la prueba con cualquiera de las siguientes opciones:
- Resumen de
gcloud
: Cuando finaliza la prueba, la CLI de gcloud imprime un resumen básico de los resultados de la prueba. gcloud
exit code: Una vez que se completa la prueba, el comando se cierra con un 0 si la prueba se aprobó. Si la prueba falla, el comando se cierra con un código de salida distinto de cero.- Firebase console: gcloud CLI imprime un vínculo a Firebase console. El vínculo sigue la convención de nombres
https://console.firebase.google.com/project/PROJECT_ID/testlab/...
. Para obtener más información, consulta Cómo interpretar los resultados de una sola ejecución de prueba. - Archivo en formato XML de JUnit: gcloud CLI 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 bucket de Cloud Storage que almacena los artefactos de prueba y los resultados. Para ubicar el archivo XML de JUnit que contiene los resultados de la prueba, abre el vínculo y navega a blueline-28-en-portrait/test_result_1.xml
.
3. Configuración con Jenkins CI
En esta sección, usarás Jenkins CI, un sistema de CI popular, para ejecutar pruebas con Test Lab. Si quieres usar un sistema de CI diferente, consulta Prácticas recomendadas avanzadas para ejecutar paquetes de pruebas grandes y la documentación para otros sistemas de CI, como Bitrise y Circle CI. Puedes usar Flank como alternativa a gcloud CLI.
Habilita la CLI de gcloud para Jenkins
Antes de que puedas usar Test Lab con Jenkins, debes habilitar las APIs necesarias y configurar una cuenta de servicio que Jenkins pueda usar para autenticar con la CLI de gcloud.
Agrega 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 verificaciones de spam ni solicitudes de captcha, que podrían bloquear tus compilaciones de CI.
Para crear una cuenta de servicio, sigue estos pasos:
- Abre la página Cuentas de servicio en Google Cloud Console.
- Haz clic en Crear cuenta de servicio, agrega un Nombre y una Descripción y, luego, haz clic en Crear y continuar.
- En el menú desplegable Selecciona un rol, elige Básico y, luego, Editor.
- Haz clic en Continuar y, luego, en Listo.
A continuación, crearás y descargarás una clave de autenticación que Jenkins podrá usar para autenticarse como la cuenta de servicio que creaste.
Para crear y descargar la clave de la cuenta de servicio, sigue estos pasos:
- En la página Cuentas de servicio de la consola de Google Cloud, haz clic en el correo electrónico asociado con la cuenta que creaste.
- Selecciona Claves y, luego, haz clic en Agregar clave y Crear clave nueva.
- Selecciona JSON y, luego, haz clic en Crear.
- Cuando se te pida que descargues el archivo, haz clic en Aceptar. Descarga el archivo en un lugar seguro de la computadora. Necesitarás este archivo más adelante cuando configures Jenkins.
Si deseas obtener más información para crear cuentas de servicio, consulta Crea una cuenta de servicio.
Habilita las APIs de Google Cloud obligatorias
La API de Cloud Testing te permite ejecutar pruebas en la infraestructura de Google. Habilitaste esta API cuando completaste la ejecución de una prueba con gcloud CLI. La API de Cloud Tool Results te permite acceder a los resultados de las pruebas de manera programática.
- Abre la Biblioteca de APIs de Google Developers Console.
- En la barra de búsqueda ubicada en la parte superior de Firebase console, ingresa el nombre de cada API requerida ( API de Cloud Testing y API de Cloud Tool Results). Aparecerá la página de descripción general de la API solicitada.
- Haz clic en Habilitar API en la página de descripción general de cada API.
Instala y configura Jenkins
Puedes instalar y configurar Jenkins CI en Linux, macOS, Windows y muchos otros entornos. Ciertos detalles de este codelab son específicos para la instalación y ejecución de Jenkins CI en Linux, incluido el uso de barras oblicuas (/) en las rutas de acceso a archivos.
Si quieres descargar e instalar Jenkins en una computadora que ejecute Linux o Windows, sigue las instrucciones para instalar Jenkins. Después de instalar Jenkins, sigue las mismas instrucciones de instalación de Jenkins para completar la configuración y acceder al panel de control de Jenkins con http://localhost:8080.
Verifica los complementos instalados
Jenkins admite diferentes sistemas de control de versiones. En este codelab, usarás Git para ejecutar la prueba anterior. Además, para obtener una mejor experiencia cuando ejecutes la CLI de gcloud, debes instalar el complemento del SDK de GCloud.
- En el panel de Jenkins, haz clic en Manage Jenkins y, luego, en Manage Plugins.
- Busca los complementos Git y SDK de Cloud y, luego, instálalos (si aún no están instalados).
Configura la ubicación de los SDK de Android y Google Cloud
Ahora le indicas 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, sigue estos pasos:
- En el panel de Jenkins, haz clic en Manage Jenkins y, luego, en Global Tool Configuration.
- En la sección Google Cloud SDK, haz clic en Agregar Google Cloud SDK.
- 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.
- Ingresa el directorio principal del SDK de Google Cloud, por ejemplo,
/opt/google-cloud-sdk
. - Haz clic en Guardar.
- Configura las propiedades de todo el sistema para los SDK de Android y Google Cloud abriendo Panel > Administrar Jenkins > Configurar sistema
- Selecciona la casilla de verificación Variables de entorno y haz clic en Agregar.
- En el campo Nombre, ingresa ANDROID_HOME. En el campo Valor, ingresa la ubicación de tu SDK de Android, por ejemplo,
/opt/Android/Sdk
. - Haz clic en la casilla de verificación Ubicaciones de herramientas y, luego, en Agregar. En el menú desplegable Nombre, selecciona el nombre de la instancia del SDK de Google Cloud que agregaste en Configuración global de herramientas.
- En el campo Home, ingresa la ubicación de tu SDK de Google Cloud, por ejemplo,
/opt/google-cloud-sdk
. - Haz clic en Guardar.
Agrega las credenciales de tu cuenta de servicio a Jenkins
Ahora, agrega las credenciales de tu cuenta de servicio de la CLI de gcloud a Jenkins para que pueda autenticar y ejecutar correctamente los comandos de la CLI de gcloud.
- En el panel de Jenkins, haz clic en Manage Jenkins y, luego, en Manage Credentials.
- En la sección Almacenes del alcance de Jenkins, haz clic en el vínculo de dominio (global) y, luego, en Agregar credenciales.
- En el menú desplegable Kind, selecciona Google Service Account from private key.
- En el campo Nombre del proyecto, ingresa el nombre del proyecto de Firebase.
- Selecciona Clave JSON, luego haz clic en Explorar y busca la ubicación en la que guardaste la clave de tu cuenta de servicio.
- Haz clic en Crear.
Ya puedes configurar tu compilación automatizada de Jenkins para Test Lab.
4. Ejecuta pruebas de Test Lab con Jenkins CI
Ahora que ya configuraste Jenkins, vamos a reunir todo y ejecutar la misma prueba con Jenkins.
Puedes configurar Jenkins para que ejecute compilaciones automatizadas y pruebas cada vez que se registren actualizaciones de tu app. También puedes configurar Jenkins para que ejecute compilaciones periódicamente. Para obtener más información sobre cómo configurar compilaciones en Jenkins, consulta Cómo configurar compilaciones automáticas.
Crea y configura tu proyecto de Jenkins
Crea un proyecto para ejecutar pruebas de integración continua de tu app con Test Lab.
Cómo crear un proyecto en Jenkins
- Navega a http://localhost:8080 para abrir el panel de Jenkins.
- En el panel de Jenkins, haz clic en New Item.
- Ingresa un nombre para tu proyecto en el campo Item name y haz clic en Freestyle project para crear un proyecto que use una única configuración de compilación.
- Haz clic en Aceptar. Para completar la configuración del proyecto, completa las secciones restantes en secuencia.
Configura la administración del código fuente
- En la pestaña Source Code Management, selecciona Git.
- Ingresa https://github.com/android/testing-samples.git en el campo URL del repositorio.
Configura el entorno de compilación
La sección Entorno de compilación te permite configurar las características de compilación. Sigue estos pasos para habilitar la autenticación de Google Cloud:
- En la pestaña Build Environment, selecciona la casilla de verificación GCloud SDK authentication y elige el nombre de instalación que elegiste cuando agregaste la información de instalación de Google Cloud.
- En el menú desplegable Credenciales de Google, selecciona las credenciales de la cuenta de servicio que configuraste.
Cómo agregar pasos de compilación en Gradle para volver a compilar paquetes APK
- Desplázate hacia abajo hasta la sección Compilación, haz clic en Agregar paso de compilación y, luego, selecciona Ejecutar shell.
- Agrega un paso de compilación para ejecutar los siguientes comandos en el directorio principal de tu aplicación:
cd ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Agrega un paso de compilación de la CLI de gcloud a Jenkins
Ahora puedes agregar un paso de compilación a Jenkins para ejecutar Test Lab con la línea de comandos de gcloud CLI.
Para agregar el paso de compilación de la CLI de gcloud, agrega un nuevo paso de compilación Ejecutar shell y, luego, 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ázate hasta el final de la página y guarda la configuración. Se te redireccionará a la página principal del proyecto nuevo.
Ejecuta pruebas con Jenkins
Ya tienes todo listo para compilar el proyecto de Jenkins y ejecutar una prueba como la prueba manual que ejecutaste con la CLI de gcloud.
Para ejecutar la prueba con Jenkins, sigue estos pasos:
- Para activar la compilación de forma manual, haz clic en Compilar ahora.
- Para verificar el progreso y los resultados, haz clic en la compilación nueva > Resultado de la consola.
Si no ves errores, felicitaciones. Acabas de configurar un proyecto y ejecutar una prueba en un dispositivo Pixel 2 con un clic. Si encuentras errores, consulta Solución de problemas.
5. Prácticas recomendadas avanzadas para ejecutar paquetes de prueba grandes
Si quieres ejecutar muchas pruebas simultáneas, sigue estas prácticas recomendadas para asegurarte de que las pruebas se ejecuten de forma rápida y confiable.
Cómo aumentar la cobertura en varias configuraciones de dispositivos
Puedes agregar fácilmente varios dispositivos al paso de compilación de gcloud CLI. Además, puedes comprobar 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 el nivel de API 30 en orientación vertical y la configuración regional en inglés
- Un Samsung Galaxy S20 físico con nivel de API 29 en orientación horizontal y la configuración regional en francés
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
Usa un archivo de configuración YAML de gcloud CLI
Si prefieres administrar tus argumentos en un solo lugar o con tu sistema de control de código fuente, puedes especificarlos en un archivo de argumentos en formato YAML. Para aprender a usar esta función, ejecuta gcloud topic arg-files
.
Pruebas de fragmentos para ejecutar en paralelo
Con la fragmentación de pruebas, se 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 con varios dispositivos, lo que le permite completar todo el conjunto de pruebas más rápido. Para obtener más información, consulta Habilita la fragmentación.
Para habilitar el fragmentación, usa el canal gcloud beta
y agrega la marca –num-uniform-shards o –test-targets-for-shard a la etapa de compilación de gcloud CLI. Por ejemplo, para fragmentar las pruebas en cinco ejecuciones y ejecutarlas en paralelo, ejecuta los siguientes comandos:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-uniform-shards 5
Habilita la detección de inconsistencias
A menudo, las pruebas en dispositivos móviles pueden ser inestables. A veces, las pruebas se aprueban y, otras veces, pueden fallar, incluso con la misma configuración. Para detectar si una prueba fallida era inestable, puedes usar la marca de la CLI de gcloud –num-flaky-test-attempts. Esta marca especifica la cantidad de veces que se debe reintentar una ejecución de prueba si uno o más de los casos de prueba fallan por cualquier motivo.
Por ejemplo, para volver a ejecutar casos de prueba fallidos tres veces más después de la ejecución inicial fallida, especifica 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! Ejecutaste correctamente tu primera prueba de Test Lab con un sistema de CI.
Compilaste APKs de prueba y de la app, y ejecutaste una prueba de instrumentación con Test Lab a través de la CLI de gcloud. También configuraste un proyecto de Jenkins para automatizar la misma prueba.
Ahora conoces los pasos clave para integrar Test Lab en tu sistema de CI/CD.
Próximos pasos
Consulta Cómo configurar la CI con Firebase Emulator Suite
Lecturas adicionales
- Comienza a realizar pruebas con sistemas de CI | Documentación de Firebase
- Comienza a realizar pruebas con gcloud CLI | Documentación de Firebase