Comenzando a automatizar con Lippia

Iniciado por Malala, Mayo 14, 2020, 03:35:38 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Mayo 14, 2020, 03:35:38 PM Ultima modificación: Mayo 14, 2020, 03:50:35 PM por Malala
En este post voy a explicar como realizar una introducción a lo que es el framework de lippia, por medio de una práctica sencilla de automatización. Antes de comenzar, tenemos que saber lo esencial: "¿Qué es Lippia?"

Lippia es un framework complejo, que contiene la integración de muchas herramientas para poder realizar diferentes procesos, desde automatización web, mobile hasta automatización de APIS.

La arquitectura de este framework comienza con los repositorios de docker que contienen las imágenes de jenkins, lippia core y test scenarios. Los mismos permiten ejecutar el webdriver de selenium para poder automatizar una app en los diferentes browsers (Chrome, Firefox, etc), o en appium y android si es una app móvil.


Primeros pasos
Para iniciar con la explicación de su ejecución voy a abrir un proyecto de Lippia en mi IDE (en este caso trabajaré con IntelliJ). Donde se observará un proyecto Maven con sus diferentes directorios, aunque nosotros solo nos centraremos en la carpeta "src".



Si observamos bien,existen dos divisiones: Main y Test. Donde la primera se expande hasta que llegamos a examples/pages y examples/steps. Y la segunda (test), en test/java y test/resources.

En test solo trabajaremos con la carpeta "features", donde crearemos las clases con los diferentes escenarios y explicaciones detalladas de lo que se realizará en cada test (conocidas como user story).

Y en la carpeta main/examples, tendremos dos tareas diferentes. En la carpeta "steps", crearemos la comunicación entre el feature y las diferentes funciones de java, que se encontrarán establecidas en la carpeta "pages".

Features
En Lippia se utiliza el lenguaje "Gherkins". Con la función de que cualquier usuario que
ingrese al proyecto, entienda con facilidad de que se trata la automatización a realizar (Se recomienda siempre expresarse en tercera persona).

Se comienza estableciendo una corta descripción del feature en general, por ejemplo "Como un usuario potencial, necesito realizar una búsqueda en Google para encontrar una página".

Debajo de esto se escribe un tag con el nombre del test (@No tienes permitido ver enlaces. Registrate o Entra a tu cuenta, @Smoke, etc). Esto se debe a que nosotros podamos elegir qué escenario ejecutar en cada automatización. Cada escenario tendrá asignado un resumen de la función que se va a cumplir, relacionado al feature.  Por ejemplo "El usuario busca por 'automatización'".

Y luego se deben escribir los pasos que se deben realizar para llegar al resultado esperado, asignando a cada etiqueta de Gherkin (Given, When, And, Then).

A continuación se ve un ejemplo de un feature (seguimos trabajando con el mismo ejemplo de la búsqueda de Google)


Las instrucciones se encontrarán resaltadas de un color, y eso significa que todavía no están declaradas en los steps.

Steps

Como había mencionado arriba. En la clase steps se realizará la comunicación entre el gherkin establecido en el feature y las funciones de java, que se encontrarán en los page objects.

¿Cómo realizar dicha vinculación?
Comenzaremos escribiendo el tag, seguido de la instrucción gherkin correspondiente. Por ejemplo @Given("The client is in google page"), y así con el resto de los pasos. Es importante destacar que debe escribirse la instrucción IDÉNTICA a como la tenemos en el feature, ya que sino no se encontrará vinculación entre las dos clases.

Podremos comprobar la vinculación correcta, si vamos al feature y posamos el mouse sobre cualquiera de las instrucciones de gherkins y hacemos ctrl + click. De inmediato nos conducirá a la instrucción encontrada en la clase de steps.
 
Una vez escrito cada tag con su instrucción correspondiente, podremos seguir al siguiente paso que es la llamada de cada clase (page object), con su función.


Page Objects

En este caso tendremos 3 clases diferentes: PageBaseGoogle, GoogleHomePage y GoogleSearchResultPage.


Clase 1. PageBaseGoogle


En esta clase establecemos en el constructor la url de la app donde estaremos trabajando y la herencia del webdriver.

Clase 2. GoogleHomePage

En esta clase comenzamos identificando los elementos de la app con la que haremos interacción a medida que vayamos automatizando. Y las definimos como constantes "private final String (nombre constante). A las mismas, le podemos asignar el nombre correspondiente, id, nombre de la clase, xpath, entre otros.


Esos datos se obtienen desde el inspector de elemento de la app (f12 o click derecho > inspeccionar elemento).




Una vez hecho eso, comenzamos creando las funciones con los diferentes tipos de acciones. Por ejemplo si queremos seleccionar el input search de google, nos basta con hacer lo siguiente:




Dónde completeField es una característica que ya viene con lippia. "By.xpath", es por como ubicaremos al elemento y "INPUT_SEARCH_XPATH", es por el nombre que le dimos a la constante.

Una vez realizadas todas las funciones deseadas, volvemos a la clase de steps y llamamos a la cada clase con su respectiva función.


Utilizamos "Injector._page" para llamar a la clase y entre paréntesis el nombre de la misma. Por último hacemos referencia a la función correspondiente.

Clase 3. GoogleSearchResultPage
En esta clase realizaremos la validación para comprobar que todas las funciones establecidas anteriormente, hicieron bien su trabajo, y hemos llegado al resultado esperado.


En este caso, solo realizamos una función donde nos tienen que devolver una cadena de caracteres, que viene siendo el nombre de dicha sección. Por ejemplo, sería el buscador de google con todas las webs encontradas.

Por último, debemos volver a la clase steps y realizar un assert en nuestra función "startVerification". Donde se establece que el estado de la aplicación es lo mismo que nosotros esperábamos.

Y en este caso se realiza primero el assert.assertTrue y luego llamamos a la clase con su respectiva función.