Actualmente, existe una gran preocupación por la estabilidad y escalabilidad de los ambientes productivos de los productos de software. A raíz de eso, hoy en día se pueden encontrar una gran variedad de herramientas que ayudan a realizar las evaluaciones necesarias para garantizar óptimos resultados. En este artículo queremos abordar K6, su objetivo y sus grandes ventajas, además, de evaluar las principales diferencias con JMeter, uno de los competidores más fuertes en el mercado.
¿Qué es K6?
Es una herramienta de pruebas de carga de código abierto lanzada por LoadImpact en 2017 que no cuenta con una interfaz gráfica; por el contrario su ejecución se realiza a través de la línea de comandos. Es altamente personalizable y la construcción de los scripts de pruebas se desarrolla en JavaScript. Además, la herramienta está optimizada para utilizar el mínimo de recursos de la máquina y así ahorrar costos de infraestructura innecesarios.
Casos de uso
Pruebas de carga
K6 con sus características está optimizado para la ejecución de pruebas de carga y así comprobar el comportamiento de los sistemas con una carga especial.
Pruebas del navegador
xk6-browser nos permite realizar pruebas web de extremo a extremo con el cual se pueden capturar métricas del rendimiento de la interfaz.
Pruebas de Caos
xk6-disruptor es una extensión de la herramienta con la cual se quiere simular condiciones turbulentas, con lo cual se desea evaluar el comportamiento del sistema cuando se presentan interrupciones.
Monitoreo de rendimiento.
Con la automatización de las pruebas se pueden ejecutar tests frecuentemente para validar el rendimiento y disponibilidad en un ambiente productivo.
K6 vs Jmeter
Ambas son herramientas que cuentan con un gran respaldo y una alta relevancia en pruebas de performance y destacan por ejecutar su función principal sin inconvenientes. Pero es cierto que existen aspectos importantes por los cuales elegimos una o la otra.
Debemos tener en cuenta que K6 tiene una comunidad relativamente nueva que aunque muy bien documentada no la podemos comparar con la de JMeter que cuenta con años de trayectoria. Pero si buscamos mayor rapidez en el momento de ejecución podemos elegir K6 que por no tener interfaz gráfica puede dar mayores beneficios en el consumo de recursos, teniendo en cuenta que se debe conocer sobre la forma de configurar las pruebas ya que estas se realizan haciendo uso de JavaScript que brinda una notoria diferencia con JMeter la cual cuenta con su interfaz gráfica que nos ayuda con dicha configuración. Algunas diferencias relevantes son:
En resumen, se puede decir que JMeter es una herramienta ideal cuando se necesita realizar pruebas de rendimiento complejas y extensas que implican una gran cantidad de métodos y escenarios. Por otro lado, k6 es una herramienta más ligera y fácil de usar para pruebas de objetivos específicos, pruebas de carga automáticas, comprobaciones y umbrales. Además, k6 es una herramienta más flexible y puede generar sesiones de grabación utilizando archivos HAR, lo que facilita el desarrollo de la API.
Para ampliar las diferencias técnicas puedes consultar el siguiente enlace
Peticiones HTTP
K6 permite definir pruebas para todas las peticiones HTTP cómo:
batch.
del
get
options
patch
post
put
request
Mayor ampliación sobre las peticiones HTTP y cómo se usan en K6 la puedes encontrar en el siguiente enlace
Escenarios
En K6, los escenarios se pueden declarar utilizando la sintaxis de JavaScript. Cada escenario por sí solo puede incluir una configuración diferente, en cuanto a número de usuarios virtuales y duración de la prueba, e igualmente, puede incluir una serie de solicitudes HTTP específicas para cada escenario.
Ejecutores
Hay varios ejecutores en K6 que se pueden utilizar según las necesidades de la prueba, algunos de ellos son:
Constant VUs Este escenario mantiene un número constante de usuarios virtuales durante toda la duración de la prueba.
Ramping VUs
Este escenario aumenta gradualmente el número de usuarios virtuales en un período de tiempo determinado para simular una carga gradual en la aplicación.
Iterations
Este escenario realiza una cantidad específica de iteraciones de una tarea específica.
Duration
Este escenario ejecuta la prueba de carga durante un período de tiempo específico.
Ejemplo
Threshold
Funcionalidad que nos permite definir el comportamiento del rendimiento de nuestras pruebas.
Existen diferentes tipos de métricas entre las cuales podemos encontrar:
Counter: Con esta métrica podemos medir por cantidades, contando la cantidad de errores o respuestas exitosas.
Gaude: Podemos comparar valores de tamaños de la respuesta según lo esperado
Rate: Podemos medir el porcentaje de respuestas exitosas obtenidas durante la prueba
Trend: Con este Threshold podemos medir tiempos promedio, mínimos, máximos, y por percentiles de la duración de las respuestas de las solicitudes que se hicieron durante la prueba.
En el siguiente ejemplo podemos encontrar cada uno de los anteriores tipos de métricas implementadas.
Checks
En K6, hay varios tipos de checks que se pueden utilizar para asegurarse de que una solicitud o un conjunto de solicitudes se están comportando como se espera. Aquí hay algunos tipos de checks comunes en K6 junto con algunos ejemplos de cómo utilizarlos:
status: Verifica que la respuesta tenga un código de estado HTTP específico.
json: Verifica que la respuesta tenga una estructura JSON específica.
text: Verifica que la respuesta contenga un texto específico.
rate: Verifica que un porcentaje mínimo de solicitudes tenga éxito.
Estos son solo algunos ejemplos de los tipos de checks que se pueden utilizar en K6. También hay otros tipos de checks disponibles en K6, como http, size, header, body, ssl, fail, not, or, and, entre otros.
Métricas
K6 recopila una amplia variedad de métricas para ayudar a evaluar el rendimiento de su aplicación y la eficacia de sus pruebas. Estas métricas pueden ser útiles para monitorear el rendimiento de su aplicación en tiempo real y para identificar problemas en su infraestructura o en su código.
Algunas de las métricas más comunes que se recopilan en K6 incluyen:
http_req_duration: el tiempo total de respuesta de la solicitud HTTP, que incluye el tiempo de resolución DNS, el tiempo de conexión, el tiempo de espera y el tiempo de descarga.
http_reqs: el número total de solicitudes HTTP realizadas.
http_req_failed: el número total de solicitudes HTTP que fallaron (por ejemplo, debido a un código de estado HTTP 4xx o 5xx).
http_req_connecting: el número de solicitudes HTTP que se están conectando al servidor.
http_req_tls_handshaking: el número de solicitudes HTTP que están realizando el proceso de handshake TLS.
http_req_sending: el número de solicitudes HTTP que están enviando datos al servidor.
http_req_waiting: el número de solicitudes HTTP que están esperando una respuesta del servidor.
http_req_receiving: el número de solicitudes HTTP que están recibiendo datos del servidor.
http_req_blocked: el número de solicitudes HTTP que se bloquean debido a problemas de concurrencia.
Además de estas métricas, K6 también puede recopilar métricas de sistema como el uso de CPU y memoria, así como métricas personalizadas que se pueden definir en el código de prueba.
Por otra parte, si estamos dentro de Cloud K6 podremos ver las métricas de la siguiente manera.
Finalmente, el título de este artículo no es adrede. La responsabilidad de velar por la calidad de las aplicaciones es tanto de desarrolladores como de QAs. Nuestra intención, fue exponer una herramienta que ofrece facilidad en la configuración de escenarios y versatilidad para el desarrollo de pruebas de rendimiento desde etapas tempranas de construcción del producto. ¡Así que a probar!
Repositorio con ejemplo
En el siguiente enlace encontrarás un repositorio de ejemplo para ampliar tu base de conocimiento sobre K6.
¡Gracias por leer!
תגובות