En esta ocasión quiero presentarles a este gran Framework de automatización llamado Autoc0de, creado por Joel Vitelli, miembro activo de la comunidad de Underc0de.
Autoc0de se diferencia del resto de los frameworks por sus siguientes características:
– Muy de implementar
– Facilidad para aprender a usarlo
– Se actualiza constantemente
– Gran respaldo de la comunidad
– Cada vez más empresas estan empezando a implementarlo
– Facil de integrar a GitHub y Jenkins
– Hecho en Java
– No requiere conocimientos extensos de programación
– Desde el primer día se puede comenzar a automatizar
– Sirve para automatizar Web, APIs y Mobile
Autoc0de es Framework que utiliza BDD (Cucumber), puede integrarse a Jenkins y Github, funciona con Selenium para automatizar web, Appium para aplicaciones mobile, y también sirve para automatizar API REST. Por otro lado, emite reportes en PDF y en HTML que son muy intuitivos
En esta guía vamos a ver como montarlo desde cero y como correr el ejemplo que trae.
Requerimientos:
– Java
– Maven
– IntelliJ o cualquier otro IDE que les guste
– Cucumber (Plugin del IDE)
Instalación de Java
Lo primero que haremos será instalar Java de su página oficial: https://www.java.com/es/download/ie_manual.jsp
Una vez descargado, lo instalamos.
Configuración de Maven
Para descargar Maven, debemos hacerlo de su página oficial: https://maven.apache.org/download.cgi y descargar el archivo binario
Una vez descargado, lo debemos descomprimir
Ahora vamos a las variables de entorno y debemos agregar la ruta de Maven y de Java
A continuación dejo los pasos a seguir:
Hacemos lo mismo con Java
Para corroborar si quedó todo bien, abriremos una consola y colocaremos lo siguiente:
java -version y mvn -v
Si nos reconoce ambos comandos, es porque lo hemos hecho bien, de lo contrario, dirá que no reconoce el comando y esto es porque esta mal colocada la ruta en la variable de entorno.
Instalación de IntelliJ
En mi caso voy a utilizar IntelliJ como IDE, porque es el que más me gusta, pero pueden usar cualquier otro que prefieran.
Para descargarlo, vamos a su sitio oficial: https://www.jetbrains.com/es-es/idea/download/ y descargamos la versión Community
Lo instalamos como a cualquier otro software, lo único que tenemos que tener en cuenta, es que debemos marcar el siguiente checkbox en este paso:
Esto es para evitar tener que colocarlo después en las variables de entorno.
Levantar el proyecto de Autoc0de
Para descargar autoc0de, deberemos ir a su repo en GitHub: https://github.com/underc0delabs/Autoc0de-WEB
Una vez descargado, lo descomprimimos y lo abrimos con IntelliJ. Para ello, clickeamos en OPEN
Y buscamos la carpeta descomprimida. (Importante: Abrir el directorio que tiene el ícono negro en la parte de abajo)
A continuación, nos saldrá una alerta, indicandonos si confiamos en el proyecto (lo que no es algo de cero y estamos abriendo un proyecto ya creado)
Seguido a esto, comenzará a cargar el framework. La primera vez demorará un rato en cargar todo. Nos daremos cuenta, porque dejará de cargar cosas en la esquina inferior derecha.
También, esta primera vez nos pedirá instalar Cucumber, para poder interpretar el Gherkin de los test cases. Simplemente damos click en Configure Plugins, y le damos a instalar.
Una vez que finalice de cargar todo, podremos ver toda la estructura del framework.
Por último, debemos seleccionar la versión de JDK que usaremos. Para ello, debemos ir a File >> Project Structure y seleccionamos el JDK que tengamos instalado.
Con esto ya tendremos nuestro ambiente listo para empezar con la automatización!
Arquitectura de Autoc0de
Su arquitectura es la siguiente:
Parece un poco complejo de entender, pero al principio de esta guía, mencioné que es un framework muy sencillo, y esto se debe a que solo tiene 3 capas de suma importancia y que son con las que estaremos interactuando permanentemente:
– Feature (En donde se escriben los test cases)
– Steps (Traducción de lenguaje coloquial a Java)
– PageObject (Mapeos de elementos y métodos)
El resto de las capas, es como para configurar otros parámetros más avanzados, que por ahora no es necesario tocar.
Capa 1: Features
El Feature es en donde tendremos el escenario escrito en lenguaje coloquial (Cucumber). En otras palabras, podemos decir que cada feature, tendrá todos los test cases que se le pueden ejecutar a una funcionalidad.
Cucumber es una herramienta utilizada para implementar metodologías como BDD (Behaviour Driven Development) las cuales permiten ejecutar descripciones funcionales escritas en texto plano como pruebas de software automatizadas.
Estas descripciones funcionales, se escriben en un lenguaje específico y legible llamado “Gherkin”, el cual sirve como documentación al desarrollo y para las pruebas automatizadas.
Cucumber tiene palabras reservadas como GIVEN, WHEN, THEN, AND, entre otros que no son tan usuales, como por ejemplo BUT
En el siguiente ejemplo, vamos a ver como loguear a un usuario en el foro de Underc0de. Haremos una prueba con un usuario real y otro con uno que no existe, para que vean como se ven en el reporte
Quizas no se entienda nada a simple vista, pero voy a explicar linea por linea para que se entienda mejor.
Linea 1: «Feature» Acá tenemos el nombre del feature, es decir, que es lo que se va a probar. En este caso, el login del foro de Underc0de
Linea 3: «@Tags» Con autoc0de podemos crearles tags a los distintos test cases, y luego solo correr a todos los test cases que tengan un tag en específico. Por ejemplo, podemos escribir 100 test cases automatizados, pero solo 10 tienen el tag de «@Smoke», si a la hora de correr los test cases solo coloco el tag de «@Smoke», se correrán unicamente esos 10 casos de prueba.
Linea 4: «Scenario ó Scenario Outline» Si el escenario es uno simple, solo colocamos scenario, pero si es un scenario que se ejecutará más de una vez utilizando una tabla de examples, entonces se coloca scenario outline. (En la linea 11 explicaré la diferencia un poco mejor)
Lineas del 5 al 10: «Pasos» Como dije anteriormente, cucumber tiene palabras reservadas:
Given: Dado
When: Cuando
AND: Y
Then: Entonces
Acá es cuando especificamos el paso a paso de lo que debe hacer la automatización.
El Given indica desde donde parte el usuario a navegar, el When y And son los pasos que va realizando y el Then es la verificación.
Linea 11 al 14: «Examples» La tabla de examples se utiliza cuando queremos ejecutar un mismo test cases, pero con distintos sets de datos. En este caso, este test case se ejecutará 2 veces. Primero se logueará al foro utilizando la cuenta autoc0de con la pass Underc0de y la segunda vez usará el usuario autoc0deFail con la password underc0defail
Hay algo que me han preguntado con mucha frecuencia, y es si a estos steps hay que escribirlos si o si en inglés. La respuesta es NO. Se pueden escribir en cualquier idioma.
Para entender todo esto mejor, vamos a ver el siguiente ejemplo de como pasar un test case normal (manual) a Gherkin
1 2 3 4 5 6 7 | Feature: Loguearse con un mail y contraseña válidos @Login Scenario: Loguearse en el sistema con credenciales válidas Given el usuario esta en el login del sistema When el usuario ingresa un mail y contraseña válidos And el usuario clickea en el botón Entrar Then El sistema redirecciona al dashboard principal |
Con esto ya tendríamos armado nuestro feature.
Capa 2: Steps
La segunda capa del framework son los STEPS o pasos. El archivo de steps contiene cada línea de nuestro feature convertida a lenguaje de programación y acá es en donde le decimos que acciones debe ejecutar nuestro script.
Para entenderlo un poco mejor, vamos a examinar algunos steps
En este código resalté dos porciones del código para explicarlas mejor.
La linea 24 y 39 empiezan con un @AND que son los AND del feature. Siempre que tengamos un @Given, @When, @And o @Then, es porque estamos llamando al paso de la capa 1 (del feature)
En las líneas 25 y 26, y en las 40 y 41, tenemos código en Java, que son clases, en donde le decimos que deben hacer en ese paso.
En la 25 y 26 hacen un click a un botón, mientras que en la 40 y 41, completan con usuario y contraseña unos input para loguearse.
Cada una de estas clases, apunta a un método de la capa 3 del framework (Page Object)
Capa 3: Page Object
El Page Object esta compuesto por 2 partes, el mapeo y los métodos.
Mapeo = Declarar en variables como se llama cada elemento de una web/aplicación
Métodos = Es en donde indicamos que acción debe hacerle a cada elemento mapeado (si es un click, completar con texto, etc)
Mapeo de elementos
Cada elemento de una web o aplicación puede ser mapeado por distintos tipos de selectores. Entre ellos:
– Class
– ID
– Name
– Xpath
– Algún otro ID personalizado.
En la siguiente imagen, vamos a ver el mapeo que viene como ejemplo en Autoc0de.
En este caso, esta usando XPATH para el mapeo.
Para poder mapear un elemento, debemos ir a la web que estamos automatizando y dar click derecho sobre algún elemento y luego en inspeccionar. En este caso, vamos a inspeccionar el botón «Buscar con Google»
Una vez hecho esto, se nos abrirá el inspector del browser y podremos analizar ese elemento en particular.
En este caso, vemos que el botón tiene una clase llamada gNO89b y un name llamado btnK. Podríamos mapear a ese botón con cualquiera de esos 2 elementos.
Por otro lado, si damos click derecho en esa línea resaltada, podremos copiar el XPath.
En este caso el XPath es el siguiente:
/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[1]
El XPath es la ruta que indica en donde se encuentra este elemento en el DOM de la página. Lo malo de usar este selector, es que si agregran un DIV o si mueven de lugar el botón, esta ruta del XPath cambiará y tendremos que modificar nuestro código para reemplazarlo por el nuevo.
Por lo general los IDs suelen ser únicos, por lo que suele ser el elemento ideal para mapear.
En caso de mapear por una Clase, esta puede repetirse. Las clases son las que suelen usarse para darle un estilo a un elemento, por lo que si hay 2 botones iguales, puede que tengan la misma clase. Y si queremos clickear un botón que aparezca en la parte de abajo del sitio, deberemos recorrer todos los botones hasta llegar al que queremos, de lo contrario, clickeará el primer elemento que encuentre con esa clase.
Una vez obtenido el selector, lo declaramos en una variable de esta forma:
private final String LOGIN_BUTTON_XPATH = «//*[@id=\»top\»]/section[1]/div/div/div/div/h2″;
En el nombre de la variable pueden poner cualquier cosa, pero Autoc0de sugiere usar la siguiente estructura:
NombreDelElemento_TipoDeElemento_Selector
En este caso, estamos mapeando podemos decir que estamos mapeando un botón que se llama «Login» y lo estamos haciendo através de XPath
En caso de mapear por ID sería:
private final String LOGIN_BUTTON_ID = «btnK«;
Métodos
En esta parte de la capa 3, le indicamos que debe hacerle a cada elemento que mapeamos anteriormente. Es decir, si mapeamos un botón, se supone que le vamos a hacer un click. En la siguiente porción de código del ejemplo de Autoc0de, podemos ver como hacer el click a un botón mapeado.
Ejecutando el ejemplo de Autoc0de
Para poder ejecutar el ejemplo de Autoc0de, debemos abrir la terminal del intelliJ y escribir: mvn clean test
Seguido a esto, se abrirá el browser que tengamos configurado (Chrome por defecto) y hará todos los pasos del test. Al finalizar, dentro de la carpeta Target >> Reports, podremos ver el reporte
Reporte en HTML:
Y también podemos ver el paso que fallo, con su respectivo screenshot:
En este caso no me creó el reporte en PDF por mi versión de Java. Para que lo genere, debemos tener una versión superior a la 8. Pero se ve algo así:
Esto es todo por ahora!
Espero que les guste y sirva este excelente framework de Automation!
ANTRAX