HEADER_lecciones_de_software

Cómo definir una estrategia de automatización de pruebas para DevOps

por Luis Eduardo Villa, el 1 de junio de 2020

Cómo definir una estrategia de automatización de pruebas para DevOps

La cultura de DevOps está diseñada para habilitar un entorno donde construir, probar y desplegar aplicaciones en ciclos de tiempo cada vez más cortos; para lograr esto se necesitan procesos y herramientas de integración continua, las cuales nos permiten automatizar cada una de estas etapas y alcanzar la rápida retroalimentación que nos exige las metodologías ágiles como Scrum.

https://www.pragma.com.co/academia/lecciones/como-definir-una-estrategia-de-automatizacion-de-pruebas-para-devops

A la hora de pensar en una estrategia para implementar las pruebas, primero debemos analizar un pipeline típico (‘tubería’ que define el flujo de trabajo dentro de DevOps). El proceso inicia cuando los desarrolladores suben el código al sistema de control de versiones, luego la fase de Build (compilación) se encarga de unir el código y crear una aplicación ejecutable de manera automatizada. En este punto es donde comienza el ciclo de prueba del producto candidato a desplegar a producción.

Si queremos que el proceso de integración continua sea “continuo”, las pruebas automatizadas toman un rol muy importante ya que éstas nos aseguran el rápido feedback y nos ayudan a cumplir con las entregas cada vez más frecuentes de productos de alta calidad. Para implementarlas, la metodología Agile o Continuos testing nos propone la siguiente pirámide de pruebas.

Pirámide de Pruebas 

Pirámide de Pruebas automatizadas para DevOps

Pruebas de UI (interfaz de usuario)

Generan más confianza porque vemos el sistema funcionando completamente integrado, pero pueden ser lentas y presentar inconsistencias; además son difíciles y costosas de mantener, por eso se recomienda que las pruebas de UI solo tengan los flujos críticos y que cubran el Core del negocio.

Para escribir los tests es una buena práctica utilizar BDD (Behavior driven development) en el cual utilizamos lenguaje Gherkin caracterizado por tener una sintaxis que se asemeja al comportamiento de usuario y fácil de entender para los roles de negocio.

Pruebas de APIs y de integración

Aquí nuestras pruebas pueden lograr un mayor valor y cobertura ya que podemos realizar flujos end to end por medio de nuestras APIs de manera mucho más rápida, por lo que podemos abarcar más escenarios de pruebas y realizar más validaciones de reglas de negocio de nuestras aplicaciones.

Pruebas unitarias

Se encargan de testear los componentes de manera individual y validan su correcto funcionamiento de manera aislada. Para desarrollar este tipo de pruebas un buen método es utilizar TDD (test-driven development). La idea principal del TDD es escribir los test antes que el código.

Etapas de pruebas en el pipeline de integración continua

Una vez sabemos cómo implementar nuestra estrategia de pruebas, podemos regresar a nuestro proceso de integración continua y decidir qué pruebas debemos integrar en nuestro pipeline. Para lograr la mayor cobertura de pruebas se recomienda un pipeline con la siguiente distribución:

Etapas de pruebas en el pipeline de integración continua

1. Pruebas unitarias: Son la primera etapa de pruebas, validan que cada componente funcione como se espera de forma individual. Algunas herramientas para hacer este tipo de pruebas pueden ser SonarCloud, SonarQube.

2. Despliegue al ambiente QA: Cuando la aplicación pasa esta primera etapa de pruebas, debemos desplegarla en un ambiente controlado y con características iguales o muy similares a los ambientes productivos, en este entorno es donde ejecutaremos las suites de pruebas automatizadas.

3. Pruebas de APIs y de integración: Para las pruebas de APIs podemos integrar a nuestro pipeline herramientas como Postman, SoapUI, Rest Assured.

4. Pruebas de performance: con éstas podemos medir la velocidad y gasto de recursos de la aplicación, también se pueden integrar las pruebas de carga, con las que podemos saber la cantidad de usuarios que soporta el sistema. Jmeter y Machinegun para pruebas de carga y Lighthouse o PageSpeed Insghits para las de performance, son algunas herramientas que podemos integrar en el proceso.

5. Pruebas de UI: Para construir este tipo de pruebas podemos utilizar framework de automatización como Selenium, Serenity, Cucumber BDD, Appium, etc.

6. Se automatiza el proceso para hacer pública nuestra aplicación por medio de CD (Continuous Deployment). Se sugiere que las pruebas no acaban aquí, también se pueden desarrollar pruebas en ambientes productivos para obtener feedback del comportamiento real y conseguir información de los clientes para realizar mejoras del producto.

Nota: Podemos ejecutar las pruebas UI, de servicios y de performance en paralelo para optimizar tiempos de ejecución.

La automatización de pruebas es un factor clave para lograr el éxito en DevOps, estas nos generan confianza del producto que entregamos a nuestros clientes, además nos otorga un entorno en el que los desarrolladores y tester trabajan de manera continua y colaborativa, para así entregar software con la mejor calidad cada vez más rápido.

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