Comment charger votre application Node.js avec K6

OK, vous avez développé votre application Node.js, exécuté des tests unitaires, exécuté des tests d'intégration, que devez-vous faire maintenant? Vous devriez exécuter un test de charge! droite? Afin de voir si votre application peut gérer la charge attendue. Alors, comment pouvez-vous exécuter un test de charge? Quels outils sont disponibles? Dans cet article, je vais parler d'un outil que vous pouvez utiliser pour tester en charge votre application.

Le nom de l'application est k6. K6 est un projet open source destiné à permettre de tester les performances de votre infrastructure backend. Son écrit en utilisant Go et JavaScript. K6 est un outil de test de charge moderne construit sur l'expérience de LoadImpact. Ce n'est pas le premier outil qui apparaît dans les résultats de recherche Google. Mais sa simplicité et sa capacité à exporter les données vers InfluxDB pour les visualiser par Grafana en font un outil puissant pour tester votre application en charge.

K6 utilise le concept d'utilisateurs virtuels (VU). Vous pouvez avoir plusieurs utilisateurs virtuels qui exécutent le script de test en parallèle. Des scripts de test peuvent être écrits pour votre application à l'aide de la syntaxe moderne ES6.

Installation

Sur mac, vous pouvez courir,

robinet d'infusion loadimpact / k6
brasser installer k6

Si vous êtes sur une autre plate-forme, téléchargez le binaire à partir d'ici.

Effectuer un test de charge

Pour exécuter un test de charge avec k6, vous devez créer un script décrivant votre test. Voici un exemple simple de script,

importer http de "k6 / http";
importer {check, sleep} de "k6";
options de location d'exportation = {
  vus: 10,
  durée: "10s"
};
fonction d'exportation par défaut () {
  let res = http.get ("url");
  vérifier (res, {
    "success": (r) => r.status == 200
  });
};

Dans les options, vus définit le nombre d'utilisateurs virtuels dont vous avez besoin et la durée est la durée nécessaire à l'exécution de votre test. Une liste détaillée des options disponibles peut être trouvée ici.

Pour exécuter le test exécuter,

k6 lance script.js

Les résultats sont les suivants

/ \ | ‾‾ | / ‾‾ / / ‾ /
     / \ / \ | | _ / / / /
    / \ / \ | | / \
   / \ | | ‾ \ \ | (_) |
  / __________ \ | __ | \ __ \ \ ___ / Bienvenue dans k6 v0.17.1!
exécution: locale
     sortie: -
     script: /opt/k6-v0.17.2-linux64/script.js (js)
durée: 10s, itérations: 0
        vus: 10, max: 10
interface utilisateur Web: http://127.0.0.1:6565/
[en cours d'exécution] 1s / 10s
[en cours d'exécution] 1.9s / 10s
[en cours d'exécution] 3s / 10s
[en cours d'exécution] 3.9s / 10s
[en cours d'exécution] 5s / 10s
[en cours d'exécution] 5.9s / 10s
[en cours d'exécution] 6.9s / 10s
[en cours d'exécution] 8s / 10s
[en cours d'exécution] 9s / 10s
[en cours d'exécution] 9.9s / 10s
[fait] 10s / 10s
✓ succès
chèques ................: 100.00%
    data_received .........: 8.3 kB (828 B / s)
    data_sent .............: 1.0 kB (100 B / s)
    http_req_blocked ......: avg = 15,34 ms max = 460,51 ms en moyenne = 2,26µs min = 1,17µs p (90) = 4,87µs p (95) = 6,37µs
    http_req_connecting ...: avg = 13,65 ms max = 409,75 ms moyenne = 0 s min = 0 s p (90) = 0s p (95) = 0s
    http_req_duration .....: moy = 316,86 ms = 410,34 ms = 307,13 ms = 263,38 ms p (90) = 399,14 ms p (95) = 406,81 ms
    http_req_receiving ....: avg = 209,5µs max = 9,89 ms = 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 méd = 16,37µs min = 7,74µs p (90) = 35,21µs p (95) = 43,46µs
    http_req_waiting ......: moy = 316,62 ms = 410,16 ms = 306,97 ms = 263,25 ms p (90) = 398,95 ms p (95) = 406,69 ms
    http_reqs .............: 300 (30 / s)
    vus ...................: 10
    vus_max ...............: 10

La signification de ces mesures peut être trouvée ici.

Visualiser les résultats avec Grafana

Maintenant que nous connaissons les métriques en exécutant des tests, visualisons-les dans Grafana. Afin de visualiser les données dans Grafana, nous devons les exporter dans un format compris par Grafana. K6 prend en charge l'exportation de données vers InfluxDB, qui peuvent être comprises par Grafana.

Les commandes suivantes installeront Grafana et InfluxDB,

Ubuntu 16.04
sudo apt-get install grafana
sudo apt-get install influxdb
Mac
brasser installer grafana
brasser installer influxdb

Par défaut, le serveur InfluxDB s'exécute sur le port 8086 et le serveur Grafana sur le port 3000.

Lançons maintenant le test de charge et exportons les données vers InfluxDB,

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

Ici resultsdb est votre base de données à créer dans InfluxDB.

Maintenant, dirigez-vous sur http: // localhost: 3000. Créez ensuite une source de données.

Configuration de la source de données

Définissez les valeurs comme ci-dessus. Sélectionnez l'accès en tant que proxy si vous souhaitez accéder à InfluxDB du côté serveur (par exemple, si votre InfluxDB est exécuté sur le serveur localhost du serveur Grafana).

Créez maintenant un nouveau tableau de bord (menu principal -> Tableaux de bord -> Nouveau) et créez un graphique.

Graphique

Accédez au mode édition dans le graphique et sélectionnez la source de données créée dans Métriques. Vous pouvez sélectionner une métrique comme suit. Lorsque vous sélectionnez une métrique, les données sont chargées dans votre graphique.

Editer les métriques

Pour rendre notre vie plus facile, les utilisateurs ont déjà créé des tableaux de bord Grafana complets. Pour les importer, allez à,

Menu principal -> Tableaux de bord -> Importer

Maintenant, vous devez taper l'id du tableau de bord. Pour importer ce tableau de bord, tapez 2587.

Tableau de bord Grafana préconfiguré

Ok les gars, test de charge heureux !!!