12/05/2022

Pruebas de Performance en Integración Continua: definiciones, beneficios, y más

COMPARTIR EN:

  • Linkedin Logo
  • Twitter Logo
  • Facebook Logo
  • Mail Logo

Las Pruebas de Performance en Integración Continua están reconocidas como razonables y fundamentales para DevOps y para el proceso de IC/ID. Si utilizas este enfoque, te olvidarás de los días de la metodología de cascada, cuando tenías que ejecutar las pruebas de performance al final de tu ciclo de liberación.

Al introducir más cambios, se hace más difícil aislar cuál es el principal problema con la aplicación, y cualquier mejora que se introduzca se transforma en un nuevo ciclo de QA. Los equipos deben aprender a acelerar la liberación de nuevas versiones de software al mismo tiempo que siguen asegurando que no van a introducir problemas de rendimiento en el ciclo de producción para superar cualquier desafío.

¿Qué deberías saber sobre las Pruebas de Performance en Integración Continua?

“Pruebas tempranas, pruebas frecuentes” es una de las estrategias fundamentales de DevOps. Las pruebas funcionales deberían ocurrir junto con las pruebas unitarias y las pruebas de integración lo más rápido posible. Sin embargo, también es fundamental ejecutar pruebas no funcionales. Por lo tanto, debes ejecutar pruebas de rendimiento. Ya no tienes el lujo de retrasar las pruebas de rendimiento hasta que se creen todas las nuevas funcionalidades ya que los mercados se están saturando cada vez más. Los equipos están empezando a comprender el valor de las Pruebas de Performance en Integración Continua, por lo que ha crecido su popularidad. Las Pruebas de Performance en Integración Continua cuando se introduce código nuevo eliminan la necesidad de ejecutar pruebas de rendimiento manuales, las cuales llevan mucho tiempo y son costosas.

Este artículo definirá qué son las Pruebas de Performance en Integración Continua, cuáles son los beneficios, e introducirá las herramientas necesarias para implementarlas en tu equipo.

¿Qué son las Pruebas de Performance en Integración Continua?

Se refieren a realizar un seguimiento continuo de la performance de una aplicación cuando se aumenta la carga sobre dicha aplicación. Realizar el seguimiento de forma manual y realizar pruebas de performance en un ambiente de pruebas también es una opción para los equipos. Sin embargo, esta estrategia sólo es viable para sistemas medianos o pequeños.

Las pruebas de performance suelen utilizarse para liberaciones de gran tamaño. Sin embargo, sólo un pequeño porcentaje de los equipos las integran con su pipeline de IC/ID como parte del proceso de DevOps. Sin embargo, es muy aconsejable ejecutar pruebas de rendimiento continuo durante la etapa de desarrollo de una aplicación. Para hacerlo, se requieren una serie de herramientas para ejecutar las pruebas y escalarlas de forma automática.

Cuándo los desarrolladores escuchan la frase “pruebas de performance”, piensan en los siguientes escenarios durante las últimas etapas del desarrollo de una aplicación.

1. Listar los componentes fundamentales que se van a probar.
2. Luego de ello, escribir guiones para realizar pruebas de rendimiento en un par de semanas.
3. Ejecutar las pruebas y luego analizar varias páginas de resultados de prueba.

Los supuestos sobre las pruebas de performance que se mencionaron en los pasos anteriores eran aplicables antes cuando las compañías utilizaban la metodología de desarrollo de cascada para la mayoría de las aplicaciones.

Sin embargo, los tiempos ciertamente han cambiado. Hoy en día, la mayoría de la gente no utiliza la metodología de cascada. En cambio, ha aumentado la utilización del desarrollo de software ágil, y los requerimientos de pruebas también han cambiado. Además, ya que cada vez más equipos han adoptado técnicas DevOps para crear y distribuir sus aplicaciones, las pruebas se han vuelto un elemento fundamental del proceso de desarrollo.

Es importante obtener retroalimentación de forma temprana de las pruebas automatizadas para mejorar la calidad del código. Los equipos a menudo utilizan las pruebas automatizadas para asegurarse de que la aplicación cumple con los requerimientos funcionales. Sin embargo, también es crucial analizar criterios no funcionales o indicadores del sistema tales como la seguridad, la escalabilidad, y el rendimiento.

Toda compañía depende de sus clientes fieles. Pueden ayudar a que una compañía tenga más clientela, pueden mejorar las ventas, y también pueden generar más ingresos. Por ende, el proceso de desarrollo del software debe incluir pruebas de rendimiento continuo.

¿Qué las diferencia de las pruebas de performance comunes?

Las pruebas de performance comunes se llevan a cabo como parte de una liberación o en algunos momentos en particular, y no como parte del CI. Sin embargo, es común incorporar las pruebas de rendimiento continuo en cada iteración.

Las pruebas de carga comunes se centran en qué tan bien funciona un software bajo presión. Cada nueva versión de una aplicación se prueba de forma continua para la carga que puede enfrentar para verificar si funcionará de forma adecuada durante las horas pico.

Toda la compilación puede fallar si una aplicación nueva no puede satisfacer los criterios de rendimiento que se han definido. Luego de ello, será necesario revisar y resolver cualquier problema de performance que haya causado el nuevo código. Las pruebas de rendimiento continuo pueden validar el código en pipelines de liberaciones continuas para asegurarse de que no habrá regresiones de rendimiento en la aplicación. Una vez más, el objetivo es poder encontrar errores de forma temprana y arreglarlos sin retrasos antes de que afecten a los usuarios o clientes.

Las pruebas de carga continuas son un concepto maravilloso para algunas compañías. Sin embargo, son muy difíciles de implementar ya que no hay muchas configuraciones de rendimiento en muchas versiones de API y no hay conocimiento sobre cómo puede variar el tráfico.

Beneficios de las Pruebas de Performance en Integración Continua

Las pruebas continuas tienen varias ventajas. El siguiente es un resumen de algunas de las ventajas de pruebas continuas:

Retroalimentación basadas en riesgos

Las pruebas continuas aseguran que las funciones de software estén listas para ser usadas antes de ser liberadas. Además, la retroalimentación tangible ayuda a que los managers y  los desarrolladores puedan encontrar y arreglar fallas importantes.

Las información basada en riesgos que surja de las soluciones automatizadas pueden crear un sistema de soporte más amplio para cubrir los riesgos de negocio que las pruebas humanas tradicionales (que llevan más tiempo). Los desarrolladores pueden tomar mejores decisiones de inmediato con la retroalimentación inmediata; los gerentes, por su lado, obtienen información muy importante si quieren evaluar la posibilidad de liberar una versión de forma rápida.

Decisiones más inteligentes sobre liberaciones

Las metodologías Ágiles, DevOps, y la Entrega Continua han reducido el tiempo que se necesita para planear, desarrollar, y liberar cambios de software. Por ende, las liberaciones pueden ocurrir todos los días o de forma menos frecuente como ser una vez cada dos semanas.

Cada vez más está siendo más importante utilizar pruebas automatizadas para estar a tiempo con ciclos de liberación rápidos, para seguir siendo competitivos y para ofrecerles a los clientes lo que quieren. Sin embargo, una liberación que no haya sido bien pensada puede causar más daño del que se cree si no se entiende bien el riesgo al negocio.

Si se utiliza una herramienta de pruebas continuas y una retroalimentación basada en riesgos, los desarrolladores pueden elegir cuándo y dónde liberar nuevas modificaciones. Además, cada vez más compañías están utilizando soluciones de automatización para balancear la complejidad del código y la necesidad de entregar una aplicación más rápido.

Pruebas más eficientes

Las pruebas continuas ayudan a los managers y desarrolladores a realizar pruebas adecuadas en el momento adecuado. Además, también les permite decidir si el pipeline de entrega necesita moverse para un lado o para el otro.

Las pruebas automatizadas minimizan los falsos positivos y los timeouts, que son comunes cuando se utilizan configuraciones de pruebas convencionales. Asimismo, si se realizan pruebas a lo largo del proceso de desarrollo de software, los desarrolladores pueden asegurarse de que estén creando un marco de trabajo que sea seguro y muy versátil al mismo tiempo.

Se elimina la duplicidad y se ahorra una cantidad de tiempo considerable. Por ende, las pruebas continuas aseguran que las compañías de software tienen una arquitectura óptima para continuar expandiendo sus productos en un futuro, especialmente cuando los usuarios requieran nuevas funciones.

Experiencias de usuario más estables

Las pruebas continuas previenen que los errores del software lleguen a los clientes y alteren sus experiencias. Es por ello que los desarrolladores deben balancear darles a los usuarios las funciones que piden y mantener una experiencia de usuario tranquila para que disfruten el tiempo que pasan en la aplicación.

El software tiene el rol esencial de establecer un vínculo entre las empresas y los clientes. Una mala experiencia de usuario puede ser un desastre financiero.

Las pruebas intensivas aseguran que se consideren todos los elementos de las experiencias del usuario. Esto ayuda a mantener limpia la imagen de la empresa y de la marca luego de preparar al software para su liberación.

Equipos Integrados

Las pruebas continuas permiten que los equipos colaboren de forma efectiva y eficiente durante todo el ciclo de vida de desarrollo. Ya no existen aquellos días en que se le pasaba el código de desarrollo solamente a los testers de QA.

Los equipos están cada vez más conectados y conscientes de que cada etapa del pipeline ya que la calidad se analiza durante todo el ciclo de desarrollo de software, no sólo al final.

Hoy en día, las organizaciones de software se apoyan en las pruebas de software para garantizar que se crea código de alta calidad desde el momento en que los equipos de desarrollo empiezan a crear código.

Herramientas de pruebas continuas:

Las pruebas continuas son uno de los conceptos más nuevos para las entregas de software que ha traído la tercera ola de pruebas de automatización. Sin embargo, aprender cómo realizar pruebas continuas es muy desafiante, y seleccionar la mejor herramienta para hacerlo puede ser aún más abrumador.

Elegir la herramienta correcta es fundamental para las pruebas de software y para entregar el producto de forma exitosa. A continuación, presentamos las ocho mejores herramientas de pruebas continuas que hay en el mercado. Se pueden integrar herramientas tales como Selenium, Playwright, Cypress, Katalon, JMeter y K6 con estas herramientas de IC/ID. Hemos analizado los beneficios de cada herramienta y los potenciales problemas de acuerdo a criterios tales como las pruebas que soportan, las curvas de aprendizaje, el lenguaje de programación que utilizan, el soporte que tienen para pruebas continuas, el soporte para el ecosistema de IC/ID, y las funciones más innovadoras, entre otros.

Jenkins

La compilación central de código y la integración continua ocurren en Jenkins, un servidor de automatización de código abierto. Es un software de Java autónomo que ofrece paquetes para Windows, macOS, y otros sistemas operativos similares a Unix. Jenkins facilita la creación de proyectos de desarrollo de software, de entrega, y de automatización, y tiene cientos de plugins.

Con respecto a las principales funcionalidades de Jenkins, es fácil instalarlo en el Sistema Operativo y actualizarlo ya que tiene una interfaz de usuario impecable y muy fácil de usar. Además, tiene muchos plugins que vienen de la comunidad, por lo cual es mucho más extensible. Soporta la arquitectura maestro-esclavo y compilaciones distribuidas, ya que trabaja con etapas de pre-compilación que utilizan shells y ejecuciones de comandos. Crea cronogramas utilizando expresiones y tiene soporte para el envío de notificaciones sobre el estado del desarrollo.

CircleCI

CircleCI es una tecnología IC/ID que promueve el desarrollo y la publicación rápida. Además, se pueden automatizar los flujos de trabajo del usuario utilizando CircleCI, desde el desarrollo del código hasta las pruebas y la liberación.

Puedes integrar CircleCI con GitHub, GitHub Enterprise y Bitbucket para crear compilaciones cuando se agregan nuevas líneas de comando. CircleCI también ofrece hosting para la integración continua en la nube o puede utilizar la infraestructura local que está protegida por un firewall.

Las característica más destacables de CircleCI es su poder de integración con GitHub Enterprise, Bitbucket y GitHub. Utiliza una máquina virtual o container que ejecuta la compilación y simplemente elimina errores. CircleCI también soporta la paralelización automática. Soporta las pruebas rápidas y permite que se liberen ramas específicas, lo cual lo vuelve muy adaptable para cualquier ambiente. También permite utilizar comandos personalizados y los merges automáticos para la subida de paquetes, lo cual la vuelve una herramienta muy buena para las pruebas personalizadas.

TeamCity

El manejo de compilaciones y el servidor de integración continua de JetBrains se llama TeamCity. La herramienta de integración continua TeamCity ayuda a desarrollar y liberar proyectos de distintos tipos. TeamCity interactúa con Visual Studio y otros IDE para funcionar en un contexto Java. El programa soporta .NET, y se pueden liberar aplicaciones de código abierto en los sistemas Windows y Linux.

Algunas funcionalidades de TeamCity son una nueva IU y una conexión directa con GitLab. Además, soporta pull requests de GitLab y Bitbucket. Por último, la liberación contiene peticiones de AWS Spot Fleet, detección de pruebas Go, y autenticación basada en tokens.

TeamCity tiene varias opciones para reutilizar los parámetros y configuraciones del proyecto padre en los subproyectos. La herramienta crea compilaciones en varios contextos simultáneamente. También te permite ejecutar compilaciones anteriores, ver el historial de los reportes de pruebas, fijar, etiquetar y agregar las compilaciones a los favoritos. TeamCity es muy fácil de usar para interactuar con el servidor, alterarlo, y expandirlo. La herramienta se asegura de que el servidor de CI siempre está operacional y es confiable. La principal característica de TeamCity es que ofrece las siguientes funciones flexibles: administración de usuarios, asignación de roles, agrupación de usuarios, varios métodos de autenticación, y un historial de todas las actividades del usuario para una mayor transparencia en relación con todas las operaciones del servidor.

Testsigma

Testsigma es un nuevo jugador en el mercado de las pruebas automatizadas. La solución de software de la nube soporta la automatización de pruebas web, móviles, y de API. Además, utiliza un lenguaje en Inglés sencillo para escribir pruebas, lo cual hace que les sea más fácil a los testers adquirir habilidades de automatización.

Para las organizaciones que tienen pocos recursos o requerimientos de prueba complejos, Testsigma también ofrece una infraestructura de pruebas con los dispositivos, sistemas operativos, y navegadores que mejor funcionan. Testsigma utiliza IA para esto a medida que el negocio se va moviendo en esa dirección. La aplicación utiliza IA para encontrar las posibles amenazas y errores que surgen de las correcciones y alteraciones continuas que se van introduciendo para que puedas tomar decisiones rápidas.

Para potenciar las funcionalidades de Testsigma, se puede agregar Java o Selenium y utilizar las funcionalidades personalizadas.Algunas tecnologías popular de IC/ID son Jira y Slack, entre otras. Test Sigma soporta ambas y se conecta con ellas.

Bamboo

Se puede crear un pipeline de entrega continua con Bamboo, un servidor de integración continua que automatiza la administración de las liberaciones de aplicaciones de software. Se pueden asignar versiones, categorizar las liberaciones, compilar, y hacer pruebas funcionales, además de liberar y activar nuevas versiones en sistemas en producción. Bamboo cubre todos estos escenarios.

Unas de las características más destacables de Bamboo es que sus compilaciones se disparan cuando se ven cambios en el repositorio. Las notificaciones se envían desde Bitbucket de acuerdo a un cronograma predeterminado cuando la compilación se ha completado, o combinando algunos de esos escenarios. Los repositorios de SVN, Git y Mercurial se pueden aplicar inmediatamente al esquema IC desde la rama principal hacia otras ramas que se encuentren. Ofrece permisos antes de crear el ambiente que permiten que los desarrolladores y los testers creen ambientes individuales cuando lo necesiten, y así mantienen el ambiente de producción seguro. Permite hasta 100 compiladores remotos y muchas más pruebas, las corre de forma simultánea, y recibe respuestas en tiempo y forma.

GitLab

GitLab es una colección de instrumentos que controlan varias de las etapas del ciclo de vida del desarrollo de un software. El componente principal es un administrador de repositorios Git en la web que contiene seguimiento de incidentes, estadísticas, y una Wiki.

Con cada cambio o push a GitLab, se tiene la opción de crear nuevas compilaciones, lanzar pruebas, y liberar código. Se pueden crear tareas en otro servidor, en una máquina virtual, o utilizando contenedores de Docker.

La principal funcionalidad de GitLab es entregarle aplicaciones seguras y entregar licencias al escanear el contenedor, realizar pruebas estáticas de seguridad de aplicaciones (SAST por su sigla en inglés), pruebas dinámicas de seguridad de aplicaciones (DAST por su sigla en inglés), y escaneos de dependencias. Tiene una serie de herramientas de ramas que se utilizan para ver, producir, y administrar códigos y datos del proyecto. Tiene un único sistema de control de versiones distribuido que se utiliza para diseñar, desarrollar, y administrar código y datos del proyecto, que permite que se hagan iteraciones rápidas y para darle valor al negocio. Brinda escalabilidad y una única fuente de verdad para que se pueda trabajar con proyectos y código. GitLab ayuda a los equipos de la entrega a adoptar la IC y a automatizar y acelerar la entrega de aplicaciones y liberaciones por medio de la automatización de compilaciones, integraciones, y verificación del código fuente.

Buddy

Buddy es una herramienta de IC/ID que utiliza código de GitHub, Bitbucket y GitLab para crear, probar y liberar páginas web y aplicaciones. Utiliza DevOps, seguimientos y notificaciones al mismo tiempo que contenedores de Docker que vienen instalados con los lenguajes y los marcos de trabajo que puedes llegar a utilizar para compilar.

Esta herramienta de IC/ID crea, altera y utiliza las pruebas para crear ambientes que tengan mejores integraciones con Git y le den soporte a la comunidad. Tiene muchos distintos tipos de servicios que se pueden integrar, tales como Elastic, MariaDB, Memcached, Mongo, PostgreSQL, RabbitMQ, Redis, Selenium Chrome, y Firefox. También se asegura de que el espacio de trabajo, el proyecto, el pipeline, y el alcance de las acciones sean fijos, programables, sencillos, y encriptados. Buddy ofrece soporte para la detección de cambios inteligente, un caché de vanguardia, paralelismo, y otras optimizaciones en general. También maneja flujos de trabajo por medio de plantillas para clonar, exportar, e importar pipelines.

Travis CI

Travis CI es un servicio de IC que se utiliza para crear y probar proyectos. Travis CI encuentra cualquier nueva contribución y la publica a un repositorio de GitHub. Además, Travis CI compilará el proyecto y correrá las pruebas luego de cada commit de código nuevo.

Travis CI es un proveedor de servicios. Tiene muchas funciones y características muy importantes. Es fácil de instalar en el sistema operativo y de actualizar porque tiene una interfaz de usuario muy simple. También permite ver las compilaciones para proyectos de GitHub y liberaciones a varios servicios de la nube en tiempo real. Tiene un servicio de base de datos integrado y ofrece máquinas virtuales impecables para cada compilación con iOS, Linux y macOS. Ofrece soporte para distintos lenguajes de programación tales como R, C, Python, Ruby, Java, C, C#, C++, Perl, PHP, y JavaScript (con Node.js). Tiene liberaciones para varios servicios de la nube y hace liberaciones cuando la compilación es exitosa.

Reflexiones Finales

Las Pruebas de Performance en Integración Continua son la mejor opción si te quieres anticipar a problemas de performance y sobrepasar a tus competidores. El punto principal es que un seguimiento de performance a lo largo del proceso de desarrollo de nuevas funcionalidades o productos antes que sean liberados a producción puede ahorrarte tiempo durante los ciclos de mantenimiento posteriores cuando encuentres errores. Por ende, las compañías siempre deberían mejorar los procedimientos que utilizan los equipos de desarrollo. Asimismo, y gracias a las Pruebas de Performance en Integración Continua, no habrá interferencias con las experiencias de tus consumidores. Esto involucra considerar cuánta carga tendrá cada funcionalidad cuando se vaya a utilizar.