Cómo cargar prueba tu aplicación Node.js usando K6

OK, ha desarrollado su aplicación Node.js, ejecutó pruebas unitarias, ejecutó pruebas de integración, ¿qué debe hacer ahora? ¡Deberías ejecutar una prueba de carga! ¿derecho? Para ver si su aplicación puede manejar la carga esperada. Entonces, ¿cómo puedes ejecutar una prueba de carga? ¿Qué herramienta hay disponible? En este artículo, voy a hablar sobre una de esas herramientas que puede usar para cargar la prueba de su aplicación.

El nombre de la aplicación es k6. K6 es un proyecto de código abierto destinado a proporcionar la capacidad de probar el rendimiento de su infraestructura de back-end. Está escrito usando Go y JavaScript. K6 es una herramienta moderna de prueba de carga basada en la experiencia de LoadImpact. No es la primera herramienta que aparece en los resultados de búsqueda de Google. Pero la simplicidad y la capacidad de exportar datos a InfluxDB para que Grafana los visualice lo convierte en una herramienta poderosa para probar la carga de su aplicación.

K6 utiliza el concepto de usuarios virtuales (VU). Puede tener una cantidad múltiple de usuarios virtuales que ejecutan el script de prueba en paralelo. Se pueden escribir scripts de prueba para su aplicación utilizando la sintaxis moderna de ES6.

Instalación

En mac puedes correr,

brew tap loadimpact / k6
instalar cerveza k6

Si está en otra plataforma, descargue el binario desde aquí.

Ejecutando una prueba de carga

Para ejecutar una prueba de carga con k6, debe crear un script que describa su prueba. El siguiente es un ejemplo simple de un script,

importar http desde "k6 / http";
import {check, sleep} desde "k6";
exportar opciones de alquiler = {
  vus: 10,
  duración: "10s"
};
función predeterminada de exportación () {
  let res = http.get ("url");
  comprobar (res, {
    "éxito": (r) => r.status == 200
  });
};

En las opciones, vus define el número de usuarios virtuales que necesita y la duración es el tiempo que necesita para ejecutar su prueba. Puede encontrar una lista detallada de las opciones disponibles aquí.

Para ejecutar la prueba, ejecute,

k6 ejecutar script.js

Los resultados son los siguientes,

/ \ | ‾‾ | / ‾‾ / / ‾ /
     / \ / \ | | _ / / / /
    / \ / \ | El | / ‾‾ \
   / \ | | ‾ \ \ | (_) |
  / __________ \ | __ | \ __ \ \ ___ / ¡Bienvenido a k6 v0.17.1!
ejecución: local
     salida: -
     script: /opt/k6-v0.17.2-linux64/script.js (js)
duración: 10s, iteraciones: 0
        vus: 10, max: 10
interfaz de usuario web: http://127.0.0.1:6565/
[corriendo] 1s / 10s
[corriendo] 1.9s / 10s
[corriendo] 3s / 10s
[corriendo] 3.9s / 10s
[corriendo] 5s / 10s
[corriendo] 5.9s / 10s
[corriendo] 6.9s / 10s
[corriendo] 8s / 10s
[corriendo] 9s / 10s
[corriendo] 9.9s / 10s
[hecho] 10s / 10s
✓ éxito
cheques ................: 100.00%
    data_received .........: 8.3 kB (828 B / s)
    data_sent .............: 1.0 kB (100 B / s)
    http_req_blocked ......: avg = 15.34ms max = 460.51ms med = 2.26µs min = 1.17µs p (90) = 4.87µs p (95) = 6.37µs
    http_req_connecting ...: avg = 13.65ms max = 409.75ms med = 0s min = 0s p (90) = 0s p (95) = 0s
    http_req_duration .....: avg = 316.86ms max = 410.34ms med = 307.13ms min = 263.38ms p (90) = 399.14ms p (95) = 406.81ms
    http_req_receiving ....: avg = 209.5µs max = 9.89ms med = 117.57µs min = 62.95µs p (90) = 228.21µs p (95) = 289.2µs
    http_req_sending ......: avg = 21.04µs max = 195.85µs med = 16.37µs min = 7.74µs p (90) = 35.21µs p (95) = 43.46µs
    http_req_waiting ......: avg = 316.62ms max = 410.16ms med = 306.97ms min = 263.25ms p (90) = 398.95ms p (95) = 406.69ms
    http_reqs .............: 300 (30 / s)
    vus ...................: 10
    vus_max ...............: 10

Los significados de estas métricas se pueden encontrar aquí.

Visualizando resultados con Grafana

Ahora que sabemos cómo obtener las métricas ejecutando pruebas, visualicémoslas en Grafana. Para visualizar datos en Grafana, necesitamos exportarlos a un formato que Grafana entienda. K6 admite la exportación de datos a InfluxDB que Grafana puede entender.

Los siguientes comandos instalarán Grafana e InfluxDB,

Ubuntu 16.04
sudo apt-get install grafana
sudo apt-get install influxdb
Mac
brew install grafana
brew install influxdb

Por defecto, el servidor InfluxDB se ejecuta en el puerto 8086 y el servidor Grafana se ejecuta en el puerto 3000.

Ahora ejecutemos la prueba de carga y exportemos datos a InfluxDB,

k6 run --out influxdb = http: // localhost: 8086 / resultsdb script.js

Aquí resultsdb es su base de datos que se creará en InfluxDB.

Ahora dirígete a http: // localhost: 3000. Luego cree una fuente de datos.

Configurar fuente de datos

Establezca los valores como arriba. Seleccione acceder como proxy si desea acceder a InfluxDB desde el lado del servidor (por ejemplo, si su InfluxDB se ejecuta en localhost en el servidor Grafana)

Ahora cree un nuevo panel de control (menú principal -> paneles de control -> nuevo) y cree un gráfico.

Grafico

Vaya al modo de edición en el gráfico y seleccione la fuente de datos creada en Métricas. Puede seleccionar una métrica de la siguiente manera. Cuando selecciona una métrica, los datos se cargarán en su gráfico.

Editar métricas

Para facilitarnos la vida, los usuarios ya han creado paneles completos de Grafana. Para importarlos vaya a,

Menú principal -> Paneles de control -> Importar

Ahora necesita escribir la identificación del tablero. Para importar este panel, escriba 2587.

Tablero preconfigurado de Grafana

Ok amigos, feliz prueba de carga !!!