HEADER_lecciones_de_software

Buenas prácticas con Karate y Eclipse

por Víctor Manuel Soto Morales, el 3 de junio de 2022

IMAGEN LECCIONES FONDO-1

 

En la primera parte del artículo Karate, hablamos de qué es y por qué utilizarlo. Ahora lo haremos sobre el conjunto de buenas prácticas que existen respecto al uso de Karate.


Dado que es necesario tener presente las métricas establecidas por el cliente, presentamos las siguientes recomendaciones:

1: Encarpetado: Para establecer un orden en el proyecto, éste se puede tener dividido en carpetas por funcionalidad o lambda y en su contenido lo que se necesita para que esa funcionalidad se pueda ejecutar; por ejemplo:


resource > [funcionalidad_ejemplo] > data
resource > [funcionalidad_ejemplo] > features
resource > [funcionalidad_ejemplo] > jsonfiles
resource > [funcionalidad_ejemplo] > xmlfiles

Teniendo en cuenta lo anterior, ese nombre y ese encarpetado estaría contemplado para todo el esqueleto del proyecto. Todo se debe hacer sobre la carpeta src/test/resources.

Creación de directorios en Eclipse

Para crear un directorio en el editor de Eclipse IDE lo hacemos de la siguiente manera:

  • Clic derecho sobre el lugar en donde vamos a crear el directorio, clic en new > package

 

 

  • Luego aparece la ventana en donde nos pedirá el nombre del paquete (En ese caso visualizamos runners, haciendo referencia de que vamos a crear un paquete de los runners, es decir, nos quedaría a nivel de runners), en ese caso solo colocamos el nombre del paquete con la buena práctica mencionada anteriormente.

2: Nombre de las clases JAVA: Nombres claros y cortos reflejando la acción a realizar y una sintaxis de la siguiente manera: ServicioEjemplo o en el caso de tener una clase JAVA runner lo podemos hacer de la siguiente manera: ServicioEjemploRunner. (Haciendo énfasis de nombramiento en PascalCase)

Por cada funcionalidad se recomienda crear su correspondiente clase runner.

Creación de archivos en Eclipse

Para crear un archivo JAVA en el editor Eclipse IDE lo hacemos de la siguiente manera:

  • Clic derecho sobre el paquete donde deseamos crear nuestro archivo JAVA, luego New, y finalmente en JavaClass.

 

  • Luego digitamos el nombre de la clase JAVA, recordando las buenas prácticas anteriormente mencionadas.

Nota: solo usamos estas clases para definir los runners

3: Nombres de los Features: nombres claros y cortos reflejando la acción a realizar y una sintaxis de la siguiente manera: servicio_ejemplo.feature.

 

Creación de archivos Features

Para crear un archivo feature en el editor Eclipse IDE lo hacemos de la siguiente manera:

  • Primero debemos revisar que nuestro editor tenga instalado el plugins y lo hacemos de la siguiente manera:
  • Parte superior derecha, opción Help, luego eclipse marketplace.

 

  • Luego en el buscador colocamos cucumber, en donde nos mostrará el plugin de Cucumber for Java. En esa parte nos aparecerá un botón llamado instalar, luego de eso nos pedirá que reiniciemos el IDE:

  • Después de instalar el plugin, le damos clic derecho sobre el paquete donde deseamos crear nuestro archivo feature, luego New, luego File. (Debemos estar dentro del mismo nivel de features para crear este tipo de archivo)

 

  • Luego colocamos el nombre del archivo seguido de .feature

 

4: Variables: nombres cortos, claros y sintaxis de la siguiente manera:
ejemploVariable, debemos tener en cuenta que, dentro del proyecto se nos pueden presentar nombres largos de variables, pero sí debemos tener en cuenta el significado de creación de la variable. Estos nombres de las variables también deben ser camelCase.
Nota: Para crear una variable en karate, utilizamos la palabra reservada *def.

 

5: Tipos de datos

  • Json Files: Dentro de estos archivos, debemos tener en cuenta los nombres ya definidos dentro del proyecto o podemos definirlos de manera que apunte al body nombrado, dentro de ellos podemos tener los siguientes json:
  • Sintaxis para json utilizados para evaluar el cuerpo completo de respuesta (Response) del servicio de la siguiente manera: servicio_ejemplo_rs.json.
  • Sintaxis para json utilizados para evaluar el cuerpo completo (Request) del servicio de la siguiente manera: servicio_ejemplo_rq.json.
  • Xml Files: Dentro de estos archivos, debemos tener en cuenta los nombres ya definidos dentro del proyecto o de manera que apunte al body nombrado, dentro de ellos podemos tener los siguientes xml:
  • Sintaxis para xml utilizados para evaluar el cuerpo completo de respuesta(Response) del servicio de la siguiente manera; servicio_ejemplo_rs.xml.
  • Sintaxis para xml utilizados para evaluar el cuerpo completo(Request) del servicio de la siguiente manera; servicio_ejemplo_rq.xml.
  • data Files: Dentro de estos archivos se encuentra todos esos datos dinámicos que requerimos para la ejecución de las funcionalidades, estos archivos pueden tener datos en formato de csv, txt, json o xml, ya que a la hora de querer consumir el servicio solo permite esos tipos de archivos.

    Nota: Todos estos archivos se deben crear dentro de la carpeta de la funcionalidad en específico y cada uno con su subcarpeta:

6:Karate-config: Este archivo se agrega en todo el resource del proyecto, en este archivo se agrega todo lo que son variables contenedoras, funciones genéricas, environments.

También se suele agregar configuraciones genéricas que se le agregarán a todos los servicios:

  • karate.configure("ssl", true): Permiten certificados SSL en cada ejecución de servicio.

  • karate.configure('logPrettyResponse', true): Guardar los logs del response de cada servicio.

  • karate.configure('logPrettyRequest', true): Guarda los logs del request de cada servicio.

  • karate.configure('connectTimeout', 6000): Espera que cada servicio dure almenos 6seg si supera ese tiempo se genera timeout en el servicio ejecutado.

  • karate.configure('readTimeout', 20000): Después de una ejecución espera 20seg para que el servicio devuelva datos si no lo hace genera timeout.
karate.configure("ssl", true)
karate.configure('logPrettyResponse', true)
karate.configure('logPrettyRequest', true)
karate.configure('connectTimeout', 6000)
karate.configure('readTimeout', 20000)

 

7: Cucumber:

Anteriormente, se habló para crear un archivo feature dentro de la carpeta de la funcionalidad, también se agrega otro archivo tipo feature llamado lambda.feature.

 

Dentro de este archivo se agrega todo lo que es genérico de la funcionalidad como: Variables, invocaciones de archivos, funciones, backgrounds y consumo del servicio con funciones de karate.

Luego de tener todo lo anterior nos devolvemos al archivo del servicio y poner el consumo de la funcionalidad.

El archivo java del runner pone las correspondientes configuraciones para la ejecución directamente apuntando al archivo lambda.feature de la funcionalidad.

package runners;
   
   import com.intuit.karate.KarateOptions;
   import com.intuit.karate.junit4.Karate;
   import org.junit.runner.RunWith;
   
   @RunWith(Karate.class)
   @KarateOptions(
           features = "src/test/resources/funcionalida_ejemplo/lambda.feature",
           tags = {}
   )
   
   public class ContentRunner {
   }
   

 

Después de realizar los anteriores pasos podemos empezar a automatizar los servicios y funcionalidades de nuestro arquetipo recién creado.

Nuevo llamado a la acción

Temas:Desarrollo de Software

Lecciones Pragma

Lecciones en Academia Pragma

Aquí encontrarás tutoriales técnicos para que apliques en temas de desarrollo de software, cloud, calidad en software y aplicaciones móviles. 

También puedes visitar nuestro Blog con contenido actual sobre Transformación Digital, Marketing, Conocimiento de Usuario y más. 

Blog

Suscríbete a la academia

Descarga la Guía para trabajar con ambientes IBM Websphere Portal