Enmilocalfunciona

Thoughts, stories and ideas.

Automatización de pruebas con RobotFramework para Android

Publicado por Santiago López López el

QARobotFrameworkAndroidAppiumBDD

En el post Keyword Driven Testing con Selenium y RobotFramework se hizo una descripción de como RobotFramework nos permite realizar la definición de pruebas de una manera ágil y sin grandes conocimientos de programación. En esta entrega hablaremos de como se realizan pruebas con este framework para entornos Android.

alt

¿Qué es RobotFramework?

RobotFramework es un marco de automatización de código abierto. Se puede utilizar para la automatización de pruebas y de procesos robóticos (RPA).

Es independiente del sistema operativo y la aplicación que será validada. El marco principal se implementa con Python y también se ejecuta en Jython (JVM) e IronPython (.NET).

¿Por dónde empezamos?

Lo primero es montar el entorno para poder desarrollar y ejecutar las pruebas. Se van a ejecutar desde un equipo Windows 10 y desde un Mac Book Pro sobre un dispositivo móvil físico con Android 6.

Se requiere la instalación de los siguientes elementos para poder desarrollar y ejecutar las pruebas planificadas:

  • Instalamos Python para nuestro sistemas operativo desde la página oficial. Esta tarea se puede llevar a cabo con npm para Windows y con brew para Mac.
  • Para la instalación de RobotFramework usaremos el gestor de paquetes de Python pip.
  • Para la realización de los tests tenemos que tener instalado Appium. Es una herramienta de código abierto para automatizar aplicaciones nativas, web móviles e híbridas en plataformas iOS, Android y Windows:

Figura 1 - Arquitectura RobotFramework-Appium

  • El uso de navegadores requiere de la instalación de los Webdriver adecuados, chromedriver en el caso de Chrome y geckodriver en el caso de Firefox.

Figura 2 - Arquitectura RobotFramework

  • El IDE con que vamos a desarrollar las pruebas es PyCharm. Este entorno específico para Python dispone de una gran cantidad de librerías en el core, así como librerías externas que facilitarán el trabajo. Existen otros como eclipse, RED, etc. en los que se pueden desarrollar igualmente.

Para empezar se creará un nuevo proyecto. PyCharm permite generar un entorno virtual con sus librerías y configuración o crear el proyecto compartiendo la instalación de Python. En este post hemos seleccionado esta última opción. Podemos descargar el proyecto usado desde aquí

Figura 3 - Creación de un proyecto en PyCharm

  • Una vez que se ha instalado el IDE tendremos que incluir las librerías que usaremos: IntelliBot @SeleniumLibrary y AppiumLibrary.
  • Es aconsejable, tal y como se indica en el post mencionado al principio de este artículo, disponer de un repositorio de objetos sobre los que se harán las distintas pruebas. Podemos usar aplicaciones como xPath Finder, acceder a la app con Appium, etc  para encontrar el path, ID, etc. de los diferentes objetos sobre los que tendremos que interactuar.

Antes de abordar la codificación de cualquier prueba se aconseja tener la estrategia de la misma. Este post se realiza bajo el contexto de Keyword Driven Testing .

Los test que se han codificado y se pueden descargar siguen la siguiente estructura típica en RobotFramework:

Figura 4 - Estructura de una caso de una prueba en Robotframework

Automatización de una prueba sobre una WebApp

Para la realización de esta prueba conectamos el dispositivo Android al portátil Windows o Mac desde donde se lanzarán los tests.

El objetivo de la prueba es el de acceder a la página de atSistemas en el navegador Chrome de un dispositivo Android e incluir un valor en el buscador, tras lo que se debe de validar que se han obtenido una lista de resultados.

En el proyecto que se ha definido en PyCharm y que os podéis descargar tal y como se ha mencionado anteriormente, se crea un nuevo fichero rfandroidwebApp.robot. Dentro de dicho fichero se han incluido las siguientes partes de código:

Figura 5 - Definición de librerías para Webapp

En la figura 5 se han definido las librerías necesarias para la codificación que haremos de las pruebas, estas librerías se pueden instalar con el paquete npm en el caso de windows o brew en el caso de entornos Mac.

El siguiente paso es la definición de las variables:

Figura 6 - Definición de variables para Webapp

Tras la definición del conjunto de variables, se crean las keywords que posteriormente se usaran como parte de casos de prueba:

Figura 7 - Definición de keywords para Webapp

Una de las ventajas que tienen la definición de casos de prueba a través de Keywords es la reutilización de las mismas. Muchas de las que se usan, provienen de las librerías que hemos incluido en el archivo .robot.
RobotFramework nos permite la creación de nuevas librerías que podremos usar en las pruebas.

En la keyword Open Android Chrome (Figura 8) se abrirá un navegador Chrome en el dispositivo Android y se cargará la URL que se le ha indicado.
A continuación se incluye un valor de búsqueda y tras la realización de la misma se valida que existen elementos en la lista tal y como se esperaba. En caso contrarío la prueba sería no válida. Por último se hace una captura para disponer de evidencias y a continuación se cierra el navegador:

Figura 8 - Definición de keywords para Webapp

Dentro del archivo, incluimos la última parte, que es la definición de los casos de prueba:

Figura 9 - Definición de casos de prueba

Los casos de prueba estarán formados por una lista de keywords que se ejecutan de una forma secuencial.

En la Figura 9 se crea una caso de prueba para que abra el navegador en un dispositivo android, vaya a la url indicada y acepte la política de cookies tras lo cual se hará una búsqueda y su validación.

Esta forma de crear los casos de prueba nos permite ser bastante versátiles.

Dentro de la definición del caso de prueba se han incluido dos elementos, uno que nos permite ir documentando los casos para luego disponer de la información y un elemento [TAG] que nos permite clasificar el caso de prueba. Este tag es útil para diferenciar casos de prueba funcionales, de regresión, etc.

Tras haber realizado todo el proceso de codificación podemos lanzar las pruebas desde pyCharm, en este caso desde la linea de comandos de la consola: robot --include responsive .. Con esta forma de ejecución se lanzan todos aquellos casos de uso que contienen un tag con la palabra "responsive":

Figura 10 - Resultado de los test en consola

Como se puede ver en la Figura 10 el caso de prueba se ha ejecutado correctamente y se han generado las evidencias correspondientes dentro del directorio indicado:

Figura 11 - Evidencias generadas

Automatización de una prueba con BDD sobre una WepApp

El objetivo de esta prueba es el mismo que el del anterior apartado, pero usando BDD (Behavior Driven Development) para crear el caso de prueba. En próximos artículos se profundizará en este aspecto de la estrategia de desarrollo.

Tal y como se mencionó anteriormente lo primero es incluir las Setting y variables en el fichero, en este caso son las mismas que las definidas en las Figuras 5 y 6.
El siguiente paso, en este caso es la de definir el caso de prueba usando sintaxis Gherkin para posteriormente crear las Keywords necesarias:

Figura 12 - Caso de prueba con sintaxis Gherkin

En este caso de prueba se ha incluido el tag "bdd" para su posterior ejecución.
Las Keywords que se derivan de este caso de prueba son las siguientes:

Figura 13 - Keywords

En cada una de las Keywords definidas en la Figura 13 se han usado Keywords disponibles en las librerías que se han importado.

Para ejecutar esta prueba desde la linea de comandos :
robot --include bdd .

Automatización de una prueba sobre una App Nativa Android

Esta prueba se ha incluido dentro del fichero rfnativeandroid.robot. En este apartado se describe como codificar una prueba sobre una app Nativa de Android.
El app sobre el que vamos a realizar las pruebas se encuentra dentro del código que se puede descargar en la carpeta apk.

La prueba consistirá en llevar a cabo un proceso de Login.
En primer lugar definimos las Librerías y las variables que se muestran en la Figura 14 dentro del fichero de pruebas:

Figura 14 - Librerías y variables para app nativa android

Una vez que se han definido las variables y librerías necesarias pasamos a la definición de las Keywords (Figura 15):

Figura 15 - Keywords para app nativa android

En la primera de las Keywords creadas, Launch Android Application, definimos las capabilities necesarias para la instalación y el acceso a la app desde el cliente appium.

En la siguiente palabra clave, Execute Text, se define una secuencia de instrucciones en la que se indica que se han de completar tanto el usuario como la password para posteriormente hacer login y generar evidencias.

En último lugar se ha definido el caso de prueba:

Figura 16 - Keywords para app nativa android

En este caso de prueba se puede ver que hemos puesto en [TAG] la palabra "native" por lo que la ejecución de esta prueba se podrá hacer desde la consola de PyCharm con  robot --include native .

Figura 17 - Log consola

Figura 18 - Evidencias generadas

A parte de las evidencias que se han generado, podremos acceder a los informes de ejecución de pruebas.

Agradezco la colaboración de Cristina López-Goicochea en la realización de este artículo.

Conclusiones

A la hora de abordar un proceso de automatización de pruebas e2e, RobotFramework nos permite implementarlas de una manera sencilla sin grandes conocimientos de programación, además de permitir el uso de estrategias de desarrollo como BDD. Esta versatilidad y capacidad de ampliar sus funcionalidades con una gran cantidad de librerías externas, permite su uso de una forma transversal dentro de las organizaciones.

Si te ha gustado, ¡síguenos en Twitter para estar al día de nuevos posts!