Last Updated: 2021-28-07

¿Qué es Espresso?

Espresso es una herramienta de Android para realizar pruebas de interfaz gráfica a partir de un proyecto de Android desarrollado en Java o en Kotlin. Espresso se presenta como un API que se puede integrar en el proyecto de Android y brinda la opción de controlar e interactuar con elementos gráficos de la interfaz por medio de pruebas que corren haciendo uso de la popular librería JUnit.

A pesar de ser un API y de estar integrada con el proyecto a nivel de código, se puede considerar una herramienta para hacer pruebas de caja negra, dado que no es necesario comprender la totalidad de la aplicación para probar su comportamiento por medio de la interfaz. Lo único necesario es conocer los identificadores o textos distintivos de los elementos gráficos. No obstante, Android Studio ofrece la posibilidad de capturar y generar pruebas de Espresso a partir de una serie de interacciones que el desarrollador haga con su dispositivo, la cual será el foco de este tutorial.

¿Qué construirá?

Al final de este tutorial usted tendrá:

¿Qué aprenderá?

Al desarrollar este tutorial aprenderá:

¿Qué necesita?

Para el caso de este tutorial, usted ejecutará pruebas sobre una aplicación de ejemplo llamada Habitica. Esta aplicación permite hacer un seguimiento a tareas diarias y hábitos haciendo uso de gamificación. Es un proyecto de código abierto desarrollado por HabitRPG el cual cuenta con más de un millón de descargas desde Google Play Store.

Obtener el código fuente de Habitica

Dado que Espresso necesita del código fuente del proyecto para funcionar, se optará por instalar la aplicación a partir del código abierto de Habitica. El código del proyecto se encuentra alojado en un repositorio de GitHub, al cual puede acceder desde el siguiente enlace: https://github.com/HabitRPG/habitica-android/tree/release. Ingrese al enlace anterior para ver el código del proyecto en la rama estable de releases. Como con todos los proyectos de GitHub, usted puede descargar los archivos del repositorio a su máquina local por varios medios.

Si lo desea, puede optar por descargar el código fuente directamente en forma de archivo .zip desde la página web del repositorio en GitHub, haciendo clic en el botón "Download Zip" del desplegable Code, el cual se ve en la siguiente imagen:

Sección del sitio web del repositorio donde se muestran las diferentes opciones para descargar el código del proyecto> Clone, Open with Github Desktop, Download ZIP

Imagen 1. Vista desplegable del botón Code

No obstante, si cuenta con GitHub Desktop, puede hacer clic en el botón Open with GitHub Desktop. Si cuenta con Git instalado localmente en su máquina, puede clonar el repositorio a un directorio local vacío por medio del comando git clone https://github.com/HabitRPG/habitica-android.git, o por medio de la interfaz gráfica de git. Finalmente, también puede optar por descargar el proyecto directamente con Android Studio haciendo uso de la opción Get from Version Control del menú inicial de Android Studio, la cual se muestra en la siguiente imagen:

Al abrir Android Studio sin un proyecto se muestra un menú con varios botones para abrir o importar un proyecto, perfilar un APK o abrir configuraciones del IDE

Imagen 2. Menú de inicio de Android Studio

Configurar Habitica para el build

Tan pronto importe el proyecto en Android Studio (ya sea de forma directa con la opción Get from version control, o explorando manualmente sus archivos con la opción Open an existing Android Studio project), podrá ver que en segundo plano se ejecuta el proceso de sincronización de archivos de Gradle, el cual muy probablemente falle en este punto. Antes de poder ejecutar Habitica desde el proyecto, usted debe ejecutar unos pasos que permitirán configurar su versión del proyecto. Estas instrucciones son indicadas en el archivo Readme.md del repositorio, el cual puede leer en el siguiente enlace: https://github.com/HabitRPG/habitica-android/tree/release#build-instructions.

En resumen, lo que debe hacer es modificar el nombre del archivo habitica.properties.example a habitica.properties y el archivo habitica.resources.example a habitica.resources. Luego de esto, debe crear un proyecto en Firebase que utilizará para alojar los servicios de Google para su versión de Habitica y vincularlo a su aplicación, agregando el archivo google-services.json al directorio Habitica del proyecto. Este paso lo puede hacer siguiendo las instrucciones del siguiente enlace: https://firebase.google.com/docs/android/setup?hl=es-419. Finalmente, vuelva a ejecutar la sincronización de Gradle.

Terminar correctamente el proceso de sincronización de Gradle significa que las dependencias del proyecto fueron construidas adecuadamente y que está listo para ser ejecutado en el modo debug.

Ejecutar Habitica en su dispositivo

Ahora, el siguiente paso es ejecutar la aplicación para hacer una instalación en modo debug en su dispositivo físico o virtual.

Si cuenta con un dispositivo físico con el sistema operativo Android, debe asegurarse de que este tenga activas las opciones de desarrollador y que esté habilitado para la depuración con Android Debug Bridge (ADB). Para lograr esto, siga las instrucciones en el siguiente enlace: https://developer.android.com/studio/debug/dev-options. Una vez su dispositivo esté configurado, solo debe conectarlo a su computador por medio de un cable USB. Android Studio automáticamente detectará los dispositivos conectados, pero usted también podrá verificar que ADB reconozca a su dispositivo por medio de la consola ejecutando el comando adb devices; esto reiniciará el servidor de ADB en su computadora y determinará si se puede establecer una conexión.

Por el contrario, si no cuenta con un dispositivo físico, tendrá que crear un dispositivo virtual. Este procedimiento puede requerir pasos extra según el sistema operativo, los cuales puede averiguar en el siguiente enlace: https://developer.android.com/studio/run/emulator. Por defecto, Android Studio va a mostrar al emulador como primera opción para ejecutar la aplicación, siempre y cuando exista uno.

Una vez haya establecido la conexión con el dispositivo objetivo, podrá ver el nombre del mismo en la parte superior, junto a los botones de acciones rápidas. Ahora, ejecute la aplicación presionando el botón Run, con un ícono de flecha verde para compilar y ejecutar la aplicación.

En el panel "Build" de la parte inferior podrá ver un listado de acciones que comprenden esta ejecución. Gran parte de estas acciones tienen que ver con la construcción del proyecto y sus dependencias en Gradle, y se corren en segundo plano, así que puede seguir explorando el contenido de la aplicación en el Integrated Development Environment (IDE).

Luego de un tiempo, la aplicación se ejecutará en su dispositivo y podrá ver la pantalla con el siguiente resultado:

Captura de pantalla del dispositivo Android con una vista sencilla que contiene el logo de Habitica, un botón para registrarse y un botón para iniciar sesión

Imagen 3. Pantalla inicial con opciones de inicio de sesión de Habitica

Tenga en cuenta que este proceso puede ser largo y tomar varios minutos mientras Android Studio gestiona y descarga las dependencias requeridas y establece los requisitos del proyecto.

Probar manualmente la aplicación

Antes de ejecutar la prueba es necesario que se familiarice con la aplicación de Habitica. Como se mencionó anteriormente, esta aplicación permite manejar hábitos e incluye gamificación para motivar al cumplimiento de las mismas. Es importante que reconozca las vistas principales de la aplicación para entender las funcionalidades a probar.

Abra la aplicación que instaló en el modo de depuración. Podrá ver un splash screen y luego de que termine, podrá ver una pantalla con instrucciones de bienvenida. Si las omite, podrá ver una pantalla con un botón para iniciar sesión y otro para registrarse. Cree una cuenta por el medio que prefiera y siga las instrucciones que se le van indicando dentro de la aplicación para llegar a la pantalla principal donde se expone el listado de hábitos y se le presentan varias opciones relacionadas a su personaje, sus tareas diarias, los pendientes (To Do's) y las recompensas. En cada una de estas vistas, podrá crear un elemento respectivo (hábito, diaria, pendiente, recompensa). Haga clic en el botón con el signo de suma para agregar cada uno de estos elementos y reconozca los elementos del formulario. Cuando cree cada uno de estos elementos debe poder ver el resultado generado en el listado correspondiente.

Puede continuar explorando la aplicación a su ritmo para conocer más detalles. Sin embargo, en este tutorial bastará con que conozca el proceso de inicio de sesión y la creación de una tarea básica.

Definir los elementos de interacción que debe incluir en Espresso

Ahora que conoce las particularidades de la aplicación a probar, reconozca los pasos que debe seguir para crear su primera prueba en Espresso, donde inicia sesión con la cuenta que acaba de crear y crea un nuevo hábito con valores de prueba.

En este caso, usted iniciará sesión con la cuenta que ya creó, por lo cual debe recordar sus credenciales; luego de que tenga una sesión activa en la aplicación podrá hacer uso de sus funcionalidades. Para esta prueba, las funcionalidades que probará son únicamente las de inicio de sesión y validación de elementos de interfaz gráfica.

Puntualmente, los elementos gráficos con los que debe interactuar la prueba son explicados en la siguiente tabla:

Elemento correspondiente

Elemento gráfico

Botón de opción "Login"

Campo de texto del nombre de usuario

Campo de texto de la contraseña

Botón de confirmación "Login"

Pantalla de inicio con los hábitos

Android Studio ofrece también una alternativa bastante cómoda para crear pruebas de interfaz gráfica con Espresso a partir de una grabación en lugar de código fuente. Esto facilita la creación de escenarios de prueba y permite que otros miembros del grupo de trabajo que no estén tan familiarizados con la programación desarrollen las pruebas que deseen sobre el producto.

Para poder capturar una prueba de Espresso se necesita iniciar la captura desde Android Studio y realizar las interacciones deseadas en la pantalla del dispositivo conectado por ADB. En el menú superior de Android Studio busque la pestaña "Run", y seleccione la opción "Record Espresso Test". Podrá ver que en el IDE se comienza el proceso de Gradle Build para lanzar una versión de depuración de la aplicación en el dispositivo conectado, y que luego de completarse y mostrar la interfaz gráfica en el dispositivo, aparecerá un diálogo en Android Studio que irá mostrando las acciones grabadas desde la interfaz, el cual inicialmente se ve de la siguiente forma:

Al grabar una prueba de Espresso se muestra un panel con un cuadro que muestra las acciones que se han capturado si las hay, y tres botones: Ok, Cancel y Help

Imagen 4. Panel de acciones grabadas para la prueba de Espresso

A medida que va interactuando con la interfaz, este panel se va llenando con los eventos como se muestra en la siguiente imagen:

Ejemplo del panel que muestra acciones como: \

Imagen 5. Panel con acciones grabadas

En este panel también puede añadir aserciones para validar el contenido de la interfaz gráfica. Estas aserciones pueden llegar a causar que la prueba falle en caso de que no se cumplan. Haga clic en el botón "Add Assertion" para agregar una validación y se mostrará un menú como el de la siguiente imagen:

Para agregar una asercion sobre el contenido de la pantalla se muestra un panel con las acciones grabadas al lado izquierdo, un campo para editar la asercion y un panel con la imagen de la captura de pantalla en el lado derecho

Imagen 6. Panel para agregar aserciones sobre la pantalla

Verá que Android Studio toma una captura de pantalla de la Activity actual de su dispositivo y reconoce los diferentes elementos de la interfaz definidos desde el archivo de recursos XML. Haga clic en un elemento gráfico distintivo de la pantalla en la que se encuentra para validar la existencia de su contenido en la interfaz. Verá que una vez seleccione el elemento, los dropdowns eligen los identificadores adecuados para referir al elemento gráfico según su id de recurso o su contenido de texto.

Finalmente, presione el botón OK del menú para completar la creación de la prueba. Esto abrirá un diálogo para elegir el lenguaje como el de la siguiente imagen:

Al guardar las interacciones capturadas para la prueba se muestra un panel de confirmación con un campo para el nombre de la clase que contendrá la prueba y un campo para elegir el lenguaje (entre Java y Kotlin)

Imagen 7. Panel de creación de la prueba

En este diálogo ingrese el nombre de la clase que contendrá el código de su prueba y seleccione el lenguaje de programación Java. Podrá ver que se crea un nuevo directorio en Habitica/src/androidTest/java/com.habitrpg.android.habitica.ui.activities, en caso de no existir previamente, y dentro del mismo se crea el archivo con el nombre ingresado en el campo de texto Test class name.

Ahora ejecute la nueva prueba de la misma forma que en el paso anterior, es decir, haciendo clic derecho sobre el archivo en el panel lateral de exploración de archivos y seleccionando la opción Run del menú. Preste atención a la pantalla de su dispositivo Android y note que las acciones que usted introdujo de forma manual en la aplicación serán reproducidas de la misma forma exacta.

¡Felicidades!

Al finalizar este tutorial, pudo familiarizarse con la herramienta de grabación de pruebas de interfaz gráfica de Espresso y la replicación de dicho entorno del desarrollo de aplicaciones en Android haciendo uso de las herramientas de Android Studio y el lenguaje de programación Kotlin.

Ahora podrá crear sus propios proyectos de Android, compilar y ejecutar aplicaciones y ahondar en las particularidades del desarrollo con Kotlin para crear aplicaciones modernas y cada vez más complejas.

Créditos

Versión 1.1 - Julio 28, 2021

Juan Sebastián Espitia Acero

Autor

Norma Rocio Héndez Puerto

Revisora

Mario Linares Vásquez

Revisor