Contenido


Introducción

El objetivo de esta normativa es facilitar a los proveedores una serie de pautas para la correcta implementación de las pruebas funcionales automatizadas.

En ella van a aparecer tanto frameworks a utilizar como estrategias a la hora de la organización del código. En lo relacionado con las herramientas necesarias para llevar a cabo la automatización de las pruebas, el documento se basa en la triada Gherkins-Cucumber-Selenium. Sólo las dos primeras (Gherkins y Cucumber) son de obligado uso. El equipo de arquitectura junto con la OCa evaluará cualquier propuesta alternativa a Selenium que se pretenda utilizar.


Estructura del proyecto

DIRECTRIZ 1:  Nombre y ubicación del código

La pruebas automatizadas se agruparán en un módulo de la aplicación llamado <nombre-proyecto>-testproject.

DIRECTRIZ 2: Carpetas principales

Directorio es.ja.csalud.sas.$sistemaInformacion$.cucumber. Contendrá los siguientes paquetes:

 Incluirá tantos directorios como subsistemas tenga el proyecto a automatizar con los archivos .feature que corresponderán a los diferentes casos de pruebas.

Contendrá las clases lanzadoras de las pruebas para Cucumber

Este directorio stepdefinition también podrá estar dividido por subsistemas. Tendremos tantas clases como casos de pruebas. Estas clases tendrán instanciada un objeto de la clase caso de prueba con la coletilla step (por ejemplo CP001_001step) y tantos métodos (paso1) como pasos tenga dicho caso de prueba. También, deben tener como mínimo la llamada a los métodos imprimirPaso e imprimirResultadoEsperado de la librería utilidades (consultar el apartado correspondiente) para verificar que se está realizando el paso y cómo ha finalizado.

El directorio step contiene las operaciones a bajo nivel. Habrá una clase por cada funcionalidad que tiene la aplicación.

Las clases que contendrán el DOM de los elementos  de la aplicación a automatizar, o el patrón Page Object Model.

En el caso de no utilizar la librería "Utilidades" ofrecida por la OCA, es necesario la creación de un paquete "common" en el que se inicialicen los distintos navegadores para los que está certificada la aplicación.  Además, deberá contener los métodos que sean reutilizables para todos los elementos, como las esperas (implícitas o explicitas), la generación de capturas de pantalla o la interacción con el log.

Directorio es.ja.csalud.sas.$sistemaInformacion$.integración. Para el caso en el que se vayan a implementar pruebas de integración, este paquete contendrá los XML necesarios para realizar pruebas a los web services y que son implementados en la herramienta SoapUI.

Buenas prácticas

DIRECTRIZ 3: Uso de Page Object Model

La ejecución automatizada de un conjunto de pruebas funcionales requiere de un modelo de clases que de soporte a su implementación y que sirva de marco para cualquier proyecto desarrollado por y para la STIC. Para ello, el patrón a seguir es “Page Object” que consiste en crear un objeto por cada conjunto de elementos significativos de la interfaz con la que se interactúa. Aunque el nombre sugiera (y generalmente suceda) que cada objeto debe representar una página de la navegación del sistema de información, si dentro de la página existen componentes visuales reutilizables en otras partes, es necesario construir un Page Object de ese elemento para poder reutilizarlo. De esta forma, si se realiza un cambio en la interfaz de usuario, el cambio solo se realiza una única vez, y éste se vea reflejado en todos los test del sistema.

El patrón indicado se sustenta bajo el siguiente modelo:


Por tanto, se encuentran las clases Page Objects donde se ha de implementar los elementos de la interfaz de usuario que permiten interactuar con el sistema de información. Y por otro lado las clases de test con las pruebas a realizar, donde se desarrolla la lógica del test utilizando los elementos descritos en las clases Page Object. Por último, es necesario y fundamental tener presente los distintos navegadores donde se pueden ejecutar los casos de prueba.

DIRECTRIZ 4: Implementación de la clase Page Object

Para la codificación de cada clase page object se utilizarán los métodos proporcionados por Selenium para interactuar con los diferentes elementos de la página web, como por ejemplo:

Ejemplo:

<div id="page">

<div id="full-height-container">

<div id="header-precursor">

...

DIRECTRIZ 5: Uso de framework y librerías

Para la codificación de las pruebas automatizadas se recomienda el uso del siguiente conjunto de herramientas:

Redacción de pruebas

DIRECTRIZ 6: Uso de Gherkin

Cada caso de prueba deberá contener definido el escenario de la prueba a realizar en lenguaje GHERKIN pudiendo elegir entre los tipos “Scenario” o “Scenario outline” (caso de prueba parametrizado mediante una tabla).

Dentro de las features solo debe incluir información relativa al negocio, y nunca aspectos técnicos de configuración; estos irían dentro de profiles o directamente en los pipelines del Jenkins.

A continuación se indica un ejemplo de para la descripción de un caso de prueba utilizando Gherkin:

Scenario: descripción del escenario a ejecutar

     Given  Cumplo una precondición

     [And]

     When [Ejecuto una acción]

     Then [Observo este resultado]

     But [No debería poder observar este otro resultado]


Scenario outline: descripción del escenario parametrizable a ejecutar

Given  Cumplo una precondición con <input_1>

[And] y cumplo con <input_2>

When Ejecuto una acción sobre <button>

Then Observo este resultado <output>

But No debería poder observar este otro resultado


Examples:

input_1   | input_2   | button     | output  |

| valor1      | valor2     | etiqueta   | salida   |

DIRECTRIZ 7: Etiquetado

La REST API de X-ray permite la importación de archivos .feature de Cucumber a JIRA. Esto es una manera de crear los tests, de forma masiva y automática, asociándolos a la historia de usuario y a las pre condiciones necesarias para la ejecución de la prueba.

Las asociaciones se realizan mediante etiquetas:

Toda la información relacionada con este tema puede consultarse pulsando en el siguiente enlace: https://confluence.xpand-it.com/display/public/XRAY/Importing+Cucumber+Tests+-+REST 

Codificación de pruebas

DIRECTRIZ 8: Codificación de tests unitarios

Para la ejecución de las pruebas dentro del flujo de integración continua, es necesario crear las clases de tipo TestNG. Para la codificación de cada clase TestNG se utilizarán mínimo las siguientes anotaciones:

Por otro lado, podrían ser de utilidad las siguientes:

Aquellos tests en los que no sean necesario incluir su ejecución por el momento se pueden excluir de la ejecución global indicándolo en el XML Suite de la siguiente forma:

DIRECTRIZ 9: Uso de cucumber

Para la codificación de cada background y de los pasos de cada scenario se utilizarán las siguientes keywords:

Adicionalmente se puede incluir la keyword @After para definir los pasos a ejecutar después de la prueba.

Para la ejecución de las pruebas dentro del flujo de integración continua, es necesario crear una clase lanzadora con la siguiente información como mínimo:

DIRECTRIZ 10: Etiquetado

A continuación se describen un conjunto de tags a usar para la ejecución o no de escenarios durante las pruebas. Los tags son anotaciones que sirven para agrupar y organizar escenarios e incluso features, estos se escriben con el símbolo @ seguido de un texto significativo. Ejemplos:

Para cada caso de prueba, en función de la criticidad acordada, se etiquetarán los scenarios con los siguientes tags:

Para el resto de prioridades no será necesario asignar ningún tag por defecto.

Aquellos escenarios en los que el equipo de desarrollo esté trabajando en su codificación son etiquetados con el tag @wip. Dicho tag será eliminado en el momento en que se tenga completado la codificación del escenario y con ejecución positiva del mismo.

Todos aquellos casos de pruebas a ejecutar sobre un navegador web son  codificados usando la herramienta Selenium web driver. Además, los scenarios que componen el caso de prueba están etiquetados con el tag @gui.