One way to Robot
Veamos, esto será interesante tanto para mí como para ustedes (espero), ya que nunca he escrito algo como esto, así que será todo un reto. En este espacio que se me ha brindado, quisiera platicar acerca de una de las tecnologías que más me han gustado (hasta el momento) en el área de Testing y la automatización, Robot Framework.

Como lo indica en su nombre, Robot Framework es una plataforma utilizada para la automatización de pruebas de aceptación… ¿Por qué Robot? Imagino que por la parte de automatización. Esta plataforma hace uso de Python como su lenguaje base (aunque también soporta otros) y también las librerías de Selenium para interactuar con las páginas web (Selenium puede ser utilizado en diversos lenguajes de programación).
¿Por qué usar Robot Framework? Como respuesta personal diría, porque está basado en Python y Selenium, con los cuales ya estoy familiarizado. Pero también porque al ser implementado adecuadamente permite que usuarios no tan técnicos sepan lo que está pasando en cada uno de los Test Cases que ejecutamos; esto último es muy útil para dar visibilidad de nuestras pruebas a los stakeholders.
¿Por qué Python? Cuando estaba estudiando, una de nuestros profesores nos pidió que demostráramos con un ejemplo funcional, cómo una brecha de seguridad afectaba una compañía desde una perspectiva de negocios. Yo no soy un buen programador, estoy lejos de serlo y mi primer pensamiento fue: “estoy frito”. Mi idea de proyecto era crear una botnet pero para eso ocupaba comunicación a través sockets… revisé en varios lenguajes de programación, pero al ver el one-liner de Python para la creación y manejo de sockets fue el santo grial para mi y de ahí me seguí. Lo usé por algún tiempo tiempo para hacer la botnet y para ser honesto, después de unos meses de terminada la botnet me alejé de Python nuevamente.
No fue hasta en una ocasión que me pidieron descargar alrededor 1300 archivos zip, verificar el contenido de cada uno de ellos y el SHA-1 que nuevamente me vi en problemas. No era una tarea que tenía que realizar en ese momento, de hecho era algo que tendría que hacer hasta un mes después pero aun así puse manos a la obra. Mis compañeros de trabajo tenían mas experiencia en esto de la automatización y les pedí opciones; uno de ellos me recomendó que le echara un ojo a Selenium y lo hice.
Fue gracias a Python y Selenium que logré automatizar las descargas y verificación de los 1300 archivos; manualmente me hubiera tomado días, con el script, solamente 25 minutos.
Una de las frases que solían decir y me daba mucha gracia era: “¿Qué se siente que tu trabajo ha sido reemplazado por un script?”. Mi respuesta era: ¡Por mí, genial! Ahora podía dedicar mi tiempo a otras cosas.
Entonces ¿cuál es el propósito de esta publicación? Bueno, hablando de mi caso, yo tengo dificultad para aprender sólo viendo la documentación (por excepción de la de Selenium, que es muy buena, pero de esto hablamos mas adelante), para poder entender algo debo de ver un ejemplo “real”, de algo “útil” pero sencillo al mismo tiempo. Mientras estuve viendo tutoriales y documentación de Robot Framework en Internet, me di cuenta que no eran lo suficientemente concisos; cuando aprendí a usar Selenium fue con algo sumamente sencillo pero que me ayudó mucho, lo que hice fue hacer un simple Login a mi correo electrónico.
Así que eso es lo que haremos en este tutorial, espero que hacer Login a su correo, o a diversos correos electrónicos, les ayude de la misma forma que me ayudó a mi.
¿Cuáles son los pre-requisitos?
1.- Instalen Python 2.7. Tiene que ser éste ya que Robot Framework tiene problemas de compatibilidad con Python 3.x.
2.- Al estar en la línea de comandos del sistema operativo que usen, ya sea Windows, OS X, Linux, etc., si escriben “python” debe enviarlos al prompt de Python.
3.- Deben descargar el archivo pip.py de aqui: https://bootstrap.pypa.io/get-pip.py
4.- Instalen PyCharms Community Edition (que básicamente es la versión gratis). Al ejecutarlo les va a pedir que especifiquen dónde tienen instalado Python.
5.- Mozilla Firefox debe de estar instalado.
Ahora instalemos Selenium y Robot Framework
1.- Desde la línea de comandos ejecuten: python <Path_to_script>/get-pip.py install Selenium
2.- Luego ejecuten: python <Path_to_script>/get-pip.py install robotframework-selenium2library
3.- Configurar PyCharms para que nuestros archivos “robot” se vean “bonitos”*. PyCharms > Preferencias > Plugins > Browse Repositories > Intellibot. Debemos instalar Intellibot.
¿Para qué es el ultimo paso? Cada quien selecciona el IDE de desarrollo que le parece adecuado, a mí me ha funcionado PyCharms. Ahora, Robot Framework a pesar de que trabaja sobre Python, requiere que nuestras pruebas automatizadas tengan un formato especial (el cual no tiene nada que ver con Python), hay diferentes formatos disponibles: archivos HTML, texto plano, incluso una utilería llamada RAID (tal vez hable de esto en otro momento… cuando aprenda a utilizarla). Yo tengo preferencia por el formato de texto plano con PyCharms (pongo énfasis en el “con”), ya que Intellibot valida nuestra sintaxis al crear los archivos “robot” y lo pone con colores bonitos y entendible (¡Colores! ¡Colores! ¡Colores! *o*).
Manos a la obra:
Excelente, ya tenemos lo mas importante, nuestro ambiente de trabajo. Así que abramos PyCharms y creemos un nuevo proyecto y llámenle como gusten:

A mi me gusta tener la barra de herramientas del proyecto en el costado izquierdo, ahí puedo ver los archivos que conforman el proyecto organizados en forma de raíz (View > Tool windows > Project). Dentro de la carpeta de nuestro proyecto, demos click secundario y creemos un archivo de texto plano, al cual nombraremos login.robot:

Una vez que tengamos el archivo en blanco, ingresaremos el “esqueleto” de nuestra prueba. Si no tienen Intellibot configurado no les aparecerán los colores.

Robot Framework es muy especial con la sintaxis y sus palabras especiales, asegúrense de que estén escritos de la misma forma que en la imagen de arriba. PyCharms les dará la opción de autocompletar.
Settings: En este apartados configuramos todas las librerías de las que hará uso nuestro Test Case, inclusive se especifican las precondiciones y postcondiciones.
Variables: Su nombre es bastante explícito ¿no? Aquí especificamos las variables que son utilizadas por Robot.
Test Cases: Aquí es donde definiremos todos los Test Cases y en cada uno de ellos definimos paso a paso qué es lo que queremos que nuestra prueba de Robot haga.
Keywords: Es un apartado en el que creamos funciones que utilizaremos de forma recurrente o bien, la idea es que los Test Cases tengan la menor cantidad de código o palabras rimbombantes y todo lo “complejo” del Test Case se ponga aquí, es decir, que los Test Cases sólo tengan instrucciones de alto nivel. Debo aclarar que eso ultimo es una opción solamente, no es obligatorio.
Comencemos con “Settings”

Suite Setup: Aqui especificamos todo lo que queremos que haga el script para preparar nuestro ambiente de prueba. “Abre firefox”, aclaro que Robot no es tan inteligente para saber lo que queremos únicamente porque lo expresamos de esa forma, esto en realidad sirve para que quien lea el documento sepa con mayor facilidad cual es un pre-requisito sin meterse en detalles técnicos.
Suite Teardown: Similar a Suite Setup, pero se especifica que es lo que se debe de hacer una vez que terminan las pruebas.
Library Selenium2Library: Se importan las librerías de Selenium en Robot para interactuar con las paginas web.
Ahora continuemos con “Variables”

webBrowser: Aquí especificamos con que navegador trabajaremos. “ff” es interpretado como Firefox por Robot.
hotmailPage: Una variable en la que definimos la página web en la que vamos a trabajar. Es requerido el “http”.
email y password: Dos variables que almacenan cadenas de texto.
textBoxUsername, textBoxPassword y buttonLogin: todas tienen como prefijo “name=”, esto indica a Robot que dentro de la estructura HTML de la página, en su debido momento, buscará un elemento con el nombre “login”, “passwd” y “SI”. ¿De dónde salió eso? Lo explico a continuación.
Localizando elementos web
Es necesario que le indiquemos a Robot Framework cuales son los elementos con los que va a trabajar, dónde va a dar click, dónde debemos escribir texto o cualquier otra acción de ese tipo.
En el Test Case de login que estamos haciendo, requerimos ingresar el nombre de usuario, ingresar la contraseña y luego dar click en el botón de Iniciar Sesión. Esto significa que debemos localizar esos elementos.
Para localizar elementos tenemos varias opciones, por clase, por nombre, por id, por su xpath (estructura dentro del archivo html), etc. En este caso usaremos el nombre porque la página lo permite. Es aquí donde hago hincapié en que le den una checada al apartado de localización de elementos con Selenium y/o Robot Framework para comprender con mas detalle, esto lo pueden ver en los siguientes enlaces:
Robot Framework: http://rtomac.github.io/robotframework-selenium2library/doc/Selenium2Library.html
Selenium: https://selenium-python.readthedocs.org/locating-elements.html

Apartado de “Test Cases”

Como pueden observar, tenemos un Test Case de nombre “Login a Hotmail”, el cual tiene una breve descripción definida en “[Documentation]” y dicta 4 pasos para loguearnos en nuestro correo:
1.- Abrir la página del correo.
2.- Ingresar nuestro correo en el texto box de correo electrónico.
3.- Ingresar nuestra contraseña en el text box de contraseña.
4.- Dar click al botón de iniciar sesión.
Muy sencillo ¿no? Lo que podría hacerles ruido son las variables que aparecen a la derecha de cada paso del Test Case, pero eso lo explicaremos en el siguiente apartado.
Apartado de “Keywords”

Primero quiero explicar que es “[Arguments]”. Es común que en lenguajes de programación las funciones o métodos requieran datos de entrada para poder trabajar, procesarlos y darnos datos de salida. “[Arguments]” es exactamente eso, nos está diciendo que para ejecutar este Keywork ocupamos que se nos brinde uno o más parámetros de entrada. Chequen el apartado Test Cases.
Segundo, como se podrán dar cuenta, tenemos nuestras funciones con los nombres que nosotros mismos les pusimos. Por ejemplo: “Abre firefox”, “Cierra todo”, “Abrir página”, etc. Dentro de esas funciones que declaramos, podemos ver cosas como “input text”, “click element”, “close browser”, etc. Estos últimos son métodos que le pertenecen a Robot Framework y realizan ciertas funciones específicas con los parámetros que le brindamos. Analicemos a detalle cada una de éstas.
open browser:
Como su nombre lo indica, nos sirve para abrir el navegador que le indiquemos. Selenium soporta Chrome, Firefox, Safari, Opera e IE (giuuuu). Dos parámetros son requeridos aquí, la página a abrir [google.com] y el navegador a utilizar [variable webBrowser].
close browser:
También como su nombre lo indica, éste lo usaremos para cerrar el navegador.
go to:
Este método sirve para indicarle al navegador que ya está abierto, hacia que página debería llevarnos. Su parámetro requerido es la página a la que deseamos ir [variable webBrowser].
input text:
Todo es muy intuitivo, éste sirve para ingresar texto en un lugar en específico de la página y es por esto mismo que debemos indicarle donde queremos ingresarlo. Los parámetros requeridos son el elemento donde se insertará el texto [variable donde] y el texto que deseamos insertar [variable que].
click element:
Indicamos cual es el elemento en el que queremos emular que el usuario dio un click. El parámetro que nos pide como mínimo, es especificar el elemento al que le daremos click [variable donde].
Volvamos al Test Case

“Abrir pagina” llama a “go to” y le dice que abra la página almacenada en la variable ${hotmailPage}
“Ingresa correo electrónico” llama a “input text” y le dice que use el correo almacenado en la variable ${myEmail} y lo inserte en el elemento identificado por la variable ${textBoxUsername}.
“Ingresa contraseña” hace lo mismo que lo anterior pero usando las variables ${myPassword} y ${textBoxPassword}
Finalmente, “Click en botón de login” llama a “click element” para que de click en el elemento especificado por la variable ${buttonLogin}.
Para ejecutar el script de Robot usen su linea de comandos para navegar al directorio donde se encuentra su script e ingresen:
pybot <scriptname>
Después de eso el script hará las tareas ejecutadas en el Test Case, mostrará la ejecución en la linea de comandos y creará una serie de reportes en diversos formatos en el mismo directorio donde se encuentra el script. Entre ellos viene uno en formato HTML, que es el que permite visualizar de manera mas sencilla los resultados. Ejemplo:

Sin duda hay mucho en lo que se puede profundizar con Robot Framework, pero espero este Tutorial les haya sido útil como un QuickStart; es mi intención continuar aprendiendo más sobre el tema y cuando lo haga, les compartiré más detalles que me parezcan relevantes y útiles.
Saludos.
Carlos Ramírez, QA Engineer @Nearsoft