Performance Tests con K6

Mauricio Eguinoa
mercantilandina-tech
5 min readNov 30, 2023

--

En Mercantil Andina, desde principios del 2022 estamos utilizando K6 para realizar pruebas de performance, carga, estabilidad, y stress.

Encontramos varias ventajas en el uso de esta herramienta, por lo cual queremos compartir con ustedes cómo viene siendo nuestra experiencia.

Le estamos sacando mucho provecho a K6 y nos está siendo muy útil para prevenir y atacar a tiempo temas relacionados con la performance.

¿Qué cosas evaluamos de nuestros sistemas y aplicaciones con pruebas de Performance?

  • Tiempos de respuesta: en milisegundos
  • Rendimiento: requests por segundo
  • Consumo de recursos de infra: Memoria, CPU, uso de Base de datos
  • Escalamiento de PODs
  • Estabilidad
  • etc

Pruebas de Carga, de Resistencia y de Stress 🚀

  • Prueba de Carga / Load test: evalúa un sistema o componente bajo niveles de carga predefinidos o estimados para validar si cumple los requerimientos de performance. Se evalúan los tiempos de respuesta y el consumo de recursos para volúmenes determinados o usuales de cantidad de usuarios, transacciones por minuto, etc. Estas pruebas aseguran la confiabilidad y disponibilidad de los sistemas.
  • Pruebas de Resistencia o Estabilidad / Endurance test: Se ejecutan bajo una carga controlada, similar a la requerida por el negocio durante un período controlado. Sirven para identificar degradaciones en el uso de los recursos que solo se pueden identificar pasado un tiempo de ejecución. Por ejemplo, los memory leaks son un ejemplo clásico. Los archivos de Logs que tienden a crecer en el tiempo y que pueden causar problemas de falta de espacio de almacenamiento. Idealmente debería durar más de 12hs
  • Pruebas de Stress: Se realiza para evaluar un sistema o componente mas allá de los límites de sus requisitos especificados. Generalmente, se logra mediante un incremento gradual de la carga. Lleva el sistema al límite o agotamiento de ciertos tipos de recursos, y verifica el comportamiento del mismo cuando esto sucede.

Ventajas de K6 👍

En mayo del 2022 hicimos una POC de K6, y en septiembre adquirimos el servicio de la plataforma Cloud.

Encontramos ventajas tales como:

  • Fácil de adoptar para QAs Automation como para DEVs.
  • Facilita la colaboración.
  • Scripts claros, concretos y fáciles de entender.
  • Buen rendimiento y uso de recursos.
  • Carga en forma distribuida con K6 Cloud.
  • Gráficos, informes y análisis comparativos.
  • K6 Browser Recorder para Chrome.

Ejecuciones Local y en Cloud 💻☁

El siguiente es un ejemplo de una ejecución Local

  • Creamos el siguiente JS Script simple para probar carga sobre la home de un sitio web:
import http from 'k6/http';
import { sleep } from 'k6';

export default function () {
http.get('https://www.sitioweb.com/');
sleep(1);
}
  • Luego ejecutamos esta línea de comando en CMD o PowerShell (Windows):

k6 run — vus 10 — duration 30s Ejercicio1_prueba_Sitio_Web.js

En este ejemplo hemos especificado la cantidad de virtual users y la duración de la prueba en la línea de comandos.

  • Ahora ponemos las options dentro del script en lugar de la línea de comandos
import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
vus: 2,
duration: '10s',
};

export default function () {
http.get('https://www.sitioweb.com/');
sleep(1);
}
  • Y simplemente ejecutamos: k6 run Ejercicio2_prueba_Sitio_Web_with_options.js
  • También podemos configurar dentro de options distintas etapas de ejecución donde podemos ir incrementando la carga:
import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
stages: [
{ duration: '10s', target: 2 },
{ duration: '30s', target: 10 },
{ duration: '10s', target: 0 },
],
};

export default function () {
http.get('https://www.sitioweb.com.ar/');
sleep(1);
}

• K6 puede ejecutarse de 2 formas :

  • Local: Desde tu máquina local o en un Server de Azure
  • Cloud: Desde los servers de K6 Cloud

• Para ejecutar K6 desde Cloud :

  • Registrarse en la plataforma https://k6.io/ (tienen un Plan Cloud Free para probar que tiene ciertas limitaciones pero es muy útil para hacer una POC)
  • Login en la Plataforma : https://app.k6.io/
  • En la línea de comando nos conectamos a cloud mediante un token que tenemos en K6 Cloud: k6 login cloud -t a58t4f5d77b6430f2540ab5f1e4857c5c31b57d7cbe1f679976902d67dxda8x
  • Luego ejecutamos el siguiente comando para que ejecute en Cloud:
  • k6 cloud prueba_Cloud_with_rumping_up_options.js

Tipos de Reportes 📝

K6 puede generar reportes de varias formas

  • En la línea de comandos.
  • En archivos CSV.
  • Reportes en Cloud con los Gráficos de K6
  • Enviando información a un tablero de Grafana

K6 Browser Recorder

Utilizando K6 Browser recorder podemos grabar una sesión completa de navegación en una web y al finalizar se sube un script autogenerado de k6 al cloud. Luego, podemos configurar que incluya los sleeps durante la prueba, acceder a urls de terceros, que incluya el llamado a descargas de assets como imágenes, fonts, scripts.

El Recorder captura cada request HTTP(s) cargado en el browser cada vez que hacemos un click. Esto incluye llamadas a servicios, js, imágenes, fonts, documentos, etc.

Solo necesitamos instalar la extensión de K6 browser recorder para nuestro browser para poder utilizarlo. (Por ejemplo en Chrome o en Firefox)

Nuestra experiencia en Mercantil Andina

En Mercantil Andina la utilización de esta herramienta nos ha sido muy útil. La hemos utilizado por ejemplo en los siguientes casos:

  • Implementación de nuevos Backends / APIs
  • Implementación de un WAF en sitios ya existentes de la compañía
  • Upgrade de versiones de Keycloak que utilizan todos nuestros sistemas
  • Migraciones de Motores de Base de Datos en nuestros sistemas
  • Migración de versión de Angular en algunos de nuestros sitios webs

En algunos casos, nos benefició la posibilidad de generar reportes comparativos de performance antes y después de un determinado cambio o upgrade en nuestros sistemas.

En otras ocasiones pudimos monitorear nuestros recursos de infra durante las pruebas mediante Grafana y realizar los ajustes necesarios de memoria, cpu, etc.

También pudimos evaluar cómo se gestionaba la memoria de la JVM durante pruebas de estabilidad de varias horas de ejecución.

Por último, realizando pruebas de stress pudimos encontrar el límite de algunos de nuestros sistemas ante determinada configuración.

Hasta la próxima publicación !!! 😉

--

--