Il s'agit d'une collection d'utilitaires basée sur les recommandations des résidents de Hacker News et GitHub. La liste comprend: Locust, Vegeta, Slow_cooker, k6 et Siege. Ils sont utilisés par les ingénieurs de DICE, EA et Buoyant, ainsi que par les développeurs de Kubernetes et Load Impact. Parlons de ces outils.
Photos - Victor Freitas - UnsplashOutil pour les sites de tests de stress. Tous les scripts sont écrits en Python. Une interface Web spéciale construite sur
Flask permet de surveiller les résultats en temps réel. Les auteurs de Locust sont des ingénieurs suisses, parmi lesquels des employés des sociétés DICE et EA impliquées dans le développement et la publication de jeux informatiques.
L'outil est basé sur un concept intéressant: le criquet pèlerin ("locust") émule le comportement d'un essaim d'insectes (utilisateurs virtuels), "attaquant" le site lors du test. Les demandes sont formées à l'aide d'une bibliothèque réseau pour organiser le calcul parallèle -
gevent . Voici un exemple de test simple, qui est donné sur le site officiel du projet:
from locust import HttpLocust, TaskSet, task class WebsiteTasks(TaskSet): def on_start(self): self.client.post("/login", { "username": "test_user", "password": "" }) @task def index(self): self.client.get("/") @task def about(self): self.client.get("/about/") class WebsiteUser(HttpLocust): task_set = WebsiteTasks min_wait = 5000 max_wait = 15000
Locust utilise la bibliothèque de requêtes. Ce module complémentaire pour les outils Python standard simplifie le travail avec HTTP et SSL et rend le code plus visuel. Soit dit en passant, la
documentation des demandes peut être utilisée comme une feuille de triche pour les tests de débogage sur Locust.
Cet outil de test de stress existe depuis plus de sept ans. Pendant ce temps, une vaste communauté s'est formée autour de lui - sur GitHub
plus de 10 000 étoiles . Locust a été utilisé pour évaluer les performances du réseau Battlelog pour la série de jeux Battlefield. Armin Ronacher, auteur du framework Flask, a
parlé positivement de l'outil.
Parmi les inconvénients du Criquet pèlerin
, il y a des performances assez faibles et des erreurs périodiques dans l'estimation du temps de réponse des sites. L'outil ne sait pas non plus comment créer des graphiques, mais le problème est résolu en téléchargeant les résultats sous forme de fichiers
CSV et en rendant les graphiques dans l'éditeur de table.
Si vous voulez mieux connaître Locust, vous devez faire attention à la
documentation de l' outil. Vous pouvez également recommander une
performance d' Alexei Romanov de Wargaming au Meetup Python. Il explique comment écrire des scripts qui émulent le comportement des utilisateurs.
Go utilitaire de ligne de commande pour tester les services HTTP écrits en Go. Il peut être connecté en tant que bibliothèque pour créer vos propres outils de test de charge. Vegeta a été développé par l'un des auteurs de la plateforme open
source Sourcegraph , un moteur de révision et de navigation du code source utilisé par Lyft, Uber et Yelp.
Vegeta évalue les capacités des ressources du réseau, "bombardant" leurs demandes avec une fréquence définie. Par exemple, pour vérifier localhost, entrez simplement la commande suivante:
echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report
Par défaut, Vegeta fonctionne avec le flux de lecture de commandes standard (stdin), de sorte que la ressource pour les tests est transmise par écho. Le paramètre de durée indique la durée du test. Le rapport sera généré dans le fichier results.bin. Vegeta génère des rapports au format texte, mais peut
dessiner des graphiques . Vous pouvez les générer avec la commande suivante:
vegeta plot -title=Results results.bin > results-plot.html
Une grande communauté s'est formée autour de Vegeta -
12 mille étoiles sur GitHub . L'outil a même été
utilisé par les développeurs de Kubernetes pour évaluer les performances de leur plateforme - puis Vegeta a généré environ 10 millions de requêtes par seconde sur un cluster de milliers de nœuds.
La documentation décrivant toutes les fonctions et drapeaux pour les tests Vegeta est
dans le référentiel sur GitHub . Vous
pouvez également y trouver des fichiers exécutables précompilés.
Il s'agit d'un outil de test de charge de serveur écrit en Go. Il a été développé par les ingénieurs de Buoyant, qui crée un réseau de service pour Kubernetes - Linkerd. Il fait partie de la Cloud Native Computing Foundation et
est considéré comme un concurrent de
Google Istio .
Photos - Joshua Aragon - UnsplashHabituellement, les utilitaires de test de charge vérifient les capacités du serveur, en lui envoyant autant de demandes que possible en peu de temps. Les auteurs de slow_cooker disent que leur outil vous permet d'évaluer le travail du fer sous une charge prévisible pendant longtemps.
Des experts dynamiques utilisent leur développement pour tester Linkerd et d'autres services, tels que nginx. L'instrument est assez jeune - il a environ trois ans - donc jusqu'à ce qu'il ait une grande communauté. Mais la situation pourrait changer à l'avenir, par exemple, son référentiel a déjà été
bifurqué chez Skysanner, un service international de recherche de billets d'avion.
Vous pouvez trouver le code source
sur GitHub .
Un outil pour les tests de charge et de régression des microservices, conteneurs et sites hébergés dans le cloud. Il est écrit en Go et par les développeurs JavaScript de Load Impact - c'est une application pour tester la "persistance" des sites.
Le travail avec k6 est basé sur le tout comme modèle de code, lorsque la logique de test et tous les paramètres sont écrits en JavaScript. Dans les scripts, les étapes individuelles peuvent être regroupées, ce qui peut être pratique pour ceux qui sont habitués à suivre les principes du BDD. Voici un exemple d'un tel groupe:
import { group } from "k6"; export default function() { group("user flow: returning user", function() { group("visit homepage", function() {
L'outil permet également d'
enregistrer des scripts et de
construire des graphiques - cette dernière fonction est implémentée sur InfluxDB et Grafana. Et il a des intégrations avec des systèmes CI comme Jenkins, Circle CI, Team City et GitLab.
Les utilisateurs disent que k6
ne consomme
pas beaucoup de ressources et possède une API pratique. Mais il y a plusieurs inconvénients, en particulier, k6
ne prend pas en charge websocket et
ne sait pas comment effectuer des tests sur des systèmes distribués. Bien que les développeurs de k6 dans le fil thématique sur Hacker News aient
déclaré que ces fonctionnalités apparaîtront à l'avenir.
Si vous voulez vous familiariser avec les capacités de k6, les résidents de HN recommandent de commencer par
la documentation technique - elle est détaillée et avec des exemples. Si vous avez des questions, vous pouvez contacter
le forum officiel .
Siege vous permet de charger des serveurs Web de test. L'utilitaire a été créé par l'ingénieur Jeff Fulmer (Jeff Fulmer), afin que les développeurs puissent vérifier la consommation de ressources de leur code dans des conditions proches du combat. Siege émule un flux continu d'accès au site de la part de nombreux utilisateurs, comme s'il tenait le serveur "en état de siège" - d'où le nom de l'outil.
Après le test, l'utilitaire affiche: le temps d'analyse, le nombre de transactions par seconde, le débit, le nombre de demandes réussies et infructueuses, ainsi que leur nombre avec un code de réponse de 200. Voici
un exemple de rapport généré par Siege.
Siege est assez répandu dans la communauté informatique. Par exemple, une section entière du livre "
NGINX High Performance " est consacrée aux tests de charge avec son aide. Il est également
utilisé par certains fournisseurs de cloud.
Parmi les inconvénients de Siege, on peut distinguer la syntaxe non standard et les méthodes non évidentes de calcul des paramètres de test - par exemple, les redirections
sont considérées comme des transactions réussies, leur nombre peut donc dépasser le nombre total de demandes. Si vous voulez essayer Siege dans la pratique, étudiez le
manuel en ligne - il y a quelques "bizarreries" du système.
Lecture supplémentaire sur le blog 1cloud.ru:
Nouveautés du noyau Linux 5.3 - Pilotes graphiques, virtualisation et autres mises à jour
Pourquoi les développeurs de navigateurs traditionnels ont à nouveau refusé d'afficher le sous-domaine
Pourquoi Apple a modifié les exigences pour les développeurs d'applications