Qu'est-ce qu'un test d'évolutivité ? Apprendre avec l'exemple

⚡ Résumé intelligent

Les tests de scalabilité mesurent le comportement d'une application lorsque la charge utilisateur, le volume de données ou le taux de transactions augmentent ou diminuent, révélant le point précis où les performances cessent d'évoluer et identifiant le goulot d'étranglement responsable.

  • (I.e. Définition: Un test non fonctionnel qui vérifie si un système fonctionne toujours de manière acceptable lorsque la demande augmente.
  • ☑️ Deux directions : La mise à l'échelle verticale augmente la puissance d'une machine ; la mise à l'échelle horizontale ajoute des machines supplémentaires derrière un équilibreur.
  • Indicateurs clés: Le temps de réponse, le débit, l'utilisation du processeur et de la mémoire, ainsi que l'utilisation du réseau sont tracchargé à chaque étape de chargement.
  • 🧪 Préparation: La charge augmente par paliers planifiés jusqu'à ce qu'une métrique dépasse son seuil, ce qui marque la limite de scalabilité.
  • Outillage: JMeter, k6, Gatling, Locust et LoadRunner génèrent une charge distribuée et enregistrent automatiquement les résultats.
  • 📈 Résultat: La planification des capacités s'appuie désormais sur des données probantes plutôt que sur des conjectures, permettant ainsi aux mises en service de résister aux pics de trafic.

Qu'est-ce qu'un test de scalabilité ?

Qu'est-ce que les tests d'évolutivité ?

Tests d'évolutivité Les tests de scalabilité sont une méthode de test non fonctionnelle qui mesure les performances d'un système ou d'un réseau lorsque le nombre de requêtes utilisateur augmente ou diminue. Leur objectif est de garantir que le système peut gérer une augmentation prévue du trafic utilisateur, du volume de données et de la fréquence des transactions. Ils testent la capacité du système à répondre à une demande croissante.

Les tests de scalabilité sont un sous-type de Test de performanceElle se concentre donc sur le comportement d'une application lorsqu'elle est déployée sur un système plus vaste ou soumise à une charge excessive. Génie logicielLes tests de scalabilité mesurent le point auquel une application cesse de s'adapter et identifient la raison de ce phénomène.

Pourquoi effectuer des tests de scalabilité ?

Les problèmes de capacité apparaissent rarement lors des tests fonctionnels. Ils surgissent généralement lors des journées de forte activité, au lancement d'une campagne marketing ou lorsqu'un ensemble de données, dont la croissance a été discrète pendant deux ans, finit par ralentir chaque requête. Les tests de scalabilité permettent d'identifier ces limites dans un environnement contrôlé. Concrètement, ils vous aident à :

  • Déterminez comment l'application évolue à mesure que la charge de travail augmente, et à quel moment cette courbe s'aplatit.
  • Déterminez la limite d'utilisateurs simultanés pour l'application Web avant que les temps de réponse ne deviennent inacceptables.
  • Déterminer la dégradation côté client et l'expérience de l'utilisateur final sous charge, comme par exemple un rendu d'écran lent.
  • Déterminer la robustesse et la dégradation côté serveur, notamment la saturation du processeur, les fuites de mémoire et l'épuisement du pool de connexions.

La relation se représente plus facilement sous forme de courbe : le débit augmente avec la charge jusqu’à saturation des ressources, après quoi les utilisateurs supplémentaires ne font qu’allonger la file d’attente.

Les tests de montée en charge mesurent les performances du système lorsque la charge de travail augmente.

Types de tests d'évolutivité

La scalabilité n'est pas une propriété unique ; un plan de test couvre donc généralement plusieurs dimensions. Les quatre types ci-dessous sont ceux que la plupart des équipes mesurent, et les deux premiers déterminent la structure même de l'environnement de test.

Type Qu'est-ce qui est mis à l'échelle Ce que prouve le test
Évolutivité verticale (montée en gamme) Ajout de processeur, de mémoire ou de stockage à un seul serveur Quelle quantité de charge supplémentaire une machine mise à niveau absorbe-t-elle, et où se situe la limite de performance d'un nœud unique ?
Évolutivité horizontale (mise à l'échelle) Serveurs, conteneurs ou nœuds supplémentaires derrière un équilibreur de charge Que le débit augmente à peu près proportionnellement au nombre de nœuds ajoutés, ou que les ressources partagées le plafonnent,
Évolutivité fonctionnelle Nouvelles fonctionnalités, modules ou services La possibilité d'intégrer les fonctionnalités supplémentaires sans dégrader les transactions existantes
Évolutivité administrative Utilisateurs, locataires, équipes ou environnements à gérer La question est de savoir si l'intégration, les autorisations et le suivi restent adaptés à mesure que l'organisation se développe.

La mise à l'échelle verticale est plus simple car l'architecture évolue rarement, mais une machine unique a toujours ses limites. La mise à l'échelle horizontale lève ces limites et améliore la tolérance aux pannes, au prix d'une latence réseau, d'une incohérence des données et d'une surcharge de coordination — autant d'éléments que le test doit mesurer et non supposer.

Que tester lors des tests de scalabilité ?

La scalabilité s'évalue par des mesures, non par des impressions. Enregistrez les attributs suivants à chaque étape de chargement afin de visualiser la tendance, et pas seulement le résultat final.

Attribut Ce que ça te dit
Le temps de réponse Délai entre une requête utilisateur et la réponse du système ; ce délai doit rester constant malgré l’augmentation du nombre de requêtes simultanées.
Transition d'écran La rapidité avec laquelle une page ou une vue cède la place à la suivante sous charge
Cadence de production Volume de requêtes traitées par unité de temps ; un plateau marque la limite de scalabilité
Mesures du temps Durée de la session, temps de redémarrage, temps d'impression, temps de transaction et temps d'exécution de la tâche
Performances par rapport au nombre d'utilisateurs Comment chaque indicateur évolue-t-il lorsque des utilisateurs simultanés sont ajoutés par incréments ?
tarifs de demande Requêtes par seconde, transactions par seconde et accès par seconde
Utilisation du réseau Bande passante consommée et latence des paquets entre les niveaux
Utilisation du processeur et de la mémoire Coût des ressources par transaction ; un chiffre en constante augmentation signale souvent une fuite.
Compteurs de serveur Web Requêtes et réponses par seconde, profondeur de la file d'attente et connexions rejetées
Performances sous charge Comportement combiné une fois que toutes les métriques sont lues ensemble au pic

Stratégie de test pour les tests de scalabilité

La stratégie de test pour les tests de scalabilité diffère selon le type d'application testée. Si une application accède à un base de donnéesLes paramètres de test incluront notamment la taille de la base de données par rapport au nombre d'utilisateurs.

Conditions préalables aux tests d'évolutivité

  • Capacité de répartition de la charge — Vérifiez si l'outil de test de charge permet de générer la charge à partir de plusieurs machines et de la contrôler à partir d'un point central.
  • Operating système — Vérifier ce systèmes d'exploitation les agents de génération de charge et le maître de test de charge s'exécutent sous.
  • Processeur — Vérifiez le type de processeur requis pour l'agent utilisateur virtuel et le maître de test de charge.
  • Mémoire — Vérifiez la quantité de mémoire nécessaire pour l'agent utilisateur virtuel et le serveur maître de test de charge.
  • Environnement de test — Vérifiez que le environnement de test reflète suffisamment fidèlement la production pour que les résultats soient transposables.

Comment faire des tests d'évolutivité

  1. Définir un processus reproductible pour l'exécution des tests de scalabilité tout au long du cycle de vie de l'application
  2. Déterminer les critères d’évolutivité
  3. Présélectionnez les outils logiciels requis pour exécuter le test de charge
  4. Définir l'environnement de test et configurer le matériel requis pour exécuter les tests d'évolutivité
  5. Planifiez les scénarios de test ainsi que les tests de mise à l'échelle
  6. Créer et vérifier le script de l'utilisateur virtuel
  7. Créer et vérifier les scénarios de tests de charge
  8. Exécuter les tests
  9. Évaluer les résultats
  10. Générez les rapports requis

Plan de test d'évolutivité

Avant de créer les tests proprement dits, élaborez un plan de test détaillé. Cette étape est essentielle pour garantir la conformité des tests aux exigences de l'application.

Voici les attributs permettant de créer un Plan de test pour les tests d’évolutivité.

  • Étapes pour les scriptsLe script de test doit comporter des étapes détaillées qui déterminent les actions exactes qu'un utilisateur effectuerait.
  • Données d'exécutionLe plan de test doit déterminer toutes les données d'exécution nécessaires à l'interaction avec l'application.
  • Tests basés sur les donnéesSi les scripts nécessitent des données variables lors de l'exécution, vous devez comprendre tous les champs qui requièrent ces données.

Exemple de test de scalabilité

Prenons l'exemple d'une boutique en ligne qui prévoit 2 000 clients simultanés pendant une période de soldes. L'équipe définit d'abord un critère de réussite : la transaction de paiement doit être finalisée en moins de trois secondes pour 95 % des utilisateurs, avec un taux d'erreur inférieur à 1 %.

Le test exécute ensuite le même script de navigation, de recherche, d'ajout au panier et de paiement avec 250, 500, 1 000, 1 500 et 2 000 utilisateurs virtuels. Le temps de réponse se maintient autour de deux secondes jusqu'à 1 000 utilisateurs, passe à 2.8 secondes à 1 500 utilisateurs et atteint neuf secondes à 2 000 utilisateurs, tandis que l'utilisation du processeur de la base de données se situe à 98 %. La limite de scalabilité est donc d'environ 1 500 utilisateurs, et le goulot d'étranglement se situe au niveau de la base de données, et non au niveau des serveurs d'application que l'équipe avait prévu d'ajouter.

Outils de test de scalabilité

Les tests de montée en charge nécessitent un outil capable de générer une charge à partir de plusieurs machines simultanément et de centraliser les résultats. Le choix de cet outil dépend généralement du langage principal de l'équipe et des protocoles testés.

Outil Scripting Meilleur adapté à
Apache JMeter Plans de test GUI et XML, Java basé Large couverture des protocoles, notamment JDBC, JMS, LDAP et SOAP
Grafana k6 JavaScénario ou TypeScript Tests d'API et de microservices intégrés dans un pipeline CI/CD
Gatling Java, DSL Kotlin ou Scala Nombre élevé d'utilisateurs virtuels par injecteur avec des rapports HTML détaillés
Criquet nature Python Python les équipes qui ont besoin d'étendre le client au-delà du HTTP
LoadRunner Scripts de type C enregistrés dans VuGen Parcs d'applications d'entreprise de grande envergure avec des applications héritées et des progiciels.

Les runners hébergés dans le cloud, tels que BlazeMeterLoadView et Gatling Enterprise s'appuient sur plusieurs de ces moteurs et méritent d'être envisagés lorsqu'un test nécessite des dizaines de milliers d'utilisateurs virtuels ou du trafic provenant de plusieurs régions géographiques. Un aperçu plus complet de cette catégorie est disponible dans le guide. outils de test de performances.

Défis et bonnes pratiques en matière de tests de scalabilité

Résultats de mise à l'échelle très décevants tracNous revenons à la configuration de test plutôt qu'à l'application. Ce sont là les problèmes récurrents et les habitudes qui permettent de les éviter.

Défis communs

  • environnements sous-dimensionnés — Un banc d'essai doté de la moitié de la mémoire de production signale un goulot d'étranglement qui n'existe pas en production.
  • Modèles de charge de travail irréalistes — Les scripts sans temps de réflexion ni variation de données accèdent à des caches que les vrais utilisateurs ne remarqueraient pas.
  • Résultats bruyants — La mise à l'échelle automatique, le nettoyage de la mémoire et le matériel cloud partagé peuvent expliquer les différences entre deux exécutions identiques.
  • observabilité mince — Sans indicateurs côté serveur, un résultat lent indique qu'il y a eu un problème, mais pas lequel.
  • Prix — Générer une très forte concurrence nécessite sa propre flotte de générateurs de charge, qu'il est facile de sous-estimer dans le budget.

Meilleures pratiques

  • Définissez les critères de réussite, tels qu'un percentile de temps de réponse et un plafond de taux d'erreur, avant le premier essai.
  • Augmentez la charge par étapes planifiées et maintenez chaque étape suffisamment longtemps pour que le système se stabilise.
  • Variez les données de test pour chaque utilisateur virtuel afin que la mise en cache n'influence pas les résultats.
  • Collectez les indicateurs de performance des applications, des bases de données et de l'infrastructure, ainsi que les données côté client.
  • Stockez les scripts de test dans un système de contrôle de version et effectuez un court test de scalabilité à chaque compilation, puis un test complet avant la mise en production.
  • Comparer les tendances entre les différentes versions plutôt que de juger un seul rapport isolément.

Tests de montée en charge vs tests de charge

Ces deux tests sont souvent confondus car ils appliquent tous deux une charge. La différence réside dans la question à laquelle chacun répond : les tests de scalabilité s’intéressent à la capacité de croissance du système, tandis que les tests de scalabilité déterminent jusqu’où le système peut évoluer. test de charge demande s'il peut supporter la charge déjà prévue.

Base Tests d'évolutivité test de charge
Focus Elle se concentre sur les performances de vos sites web, logiciels, matériels et applications lorsque des modifications sont apportées à la taille ou au volume du système pour répondre à un besoin croissant. Les tests de charge consistent à tester une application sous de fortes charges, afin de déterminer à quel moment le temps de réponse du système devient insuffisant.
Modèle de charge La charge est augmentée par paliers, et des ressources peuvent être ajoutées entre les paliers. La charge est maintenue à un niveau de pointe prévu pendant une durée fixe.
Réponse à la question Jusqu'où ce système peut-il se développer, et quelles sont ses limites ? Ce système atteint-il aujourd'hui les objectifs convenus ?
Sortie typique Une limite d'évolutivité, un goulot d'étranglement et un plan de capacité Réussite ou échec par rapport aux objectifs de temps de réponse et de débit

Tous deux sont assis sous le tests non fonctionnels parapluie à côté tests de stress, tests de pointe, essais d'endurance et tests de volumeet une stratégie de performance mature consiste généralement à exécuter plusieurs de ces scripts sur les mêmes scripts.

FAQ

Les modèles d'apprentissage automatique analysent les données d'exécution historiques pour identifier la métrique qui a dévié en premier, distinguer les régressions réelles du bruit parasite et prévoir le niveau de charge auquel une ressource sera saturée. Plusieurs plateformes commerciales proposent désormais cette analyse automatisée après exécution.

Oui. Copilote et agents similaires recrutent k6 Dans le cadre de scénarios tels que Locust, générez des données de test paramétrées et échafaudez rapidement les étapes d'un pipeline CI. Un ingénieur de performance doit néanmoins définir des temps de réflexion réalistes, des répartitions de charge de travail et des critères de réussite, car ceux-ci sont issus du comportement en production.

La scalabilité désigne la capacité à s'adapter à l'augmentation des ressources ajoutées, que ce soit en quelques minutes ou en plusieurs mois. L'élasticité, quant à elle, est la capacité à ajouter et à libérer automatiquement ces ressources en fonction de la demande, puis à revenir à une configuration initiale plus simple.

Commencez bien en dessous du pic attendu, souvent de dix à vingt pour cent, afin de confirmer le bon fonctionnement du script et du système de surveillance. Augmentez ensuite le nombre par paliers réguliers jusqu'à la cible, puis au-delà, car le comportement intéressant se manifeste entre deux paliers plutôt qu'à une valeur précise.

Un seul ordinateur de bureau ne peut pas générer des dizaines de milliers de sessions, et il ne peut pas reproduire la latence qu'un utilisateur situé dans une autre région subit. Tests dans le cloud Il approvisionne en générateurs de charge plusieurs régions sur demande et les libère une fois le cycle terminé.

Effectuez un test rapide à chaque compilation afin de détecter les régressions sous 24 heures, et un test complet étape par étape avant toute mise en production modifiant l'architecture, le schéma de base de données ou les prévisions de trafic. Attendre la semaine précédant le lancement ne laisse aucun temps pour corriger les anomalies détectées par les tests.

Outre les pertes de transactions pendant la panne, les pages lentes incitent les visiteurs à se tourner vers la concurrence et nuisent au référencement. Pour le commerce de détail et la billetterie, cette panne survient généralement le jour le plus lucratif de l'année, précisément au moment où le trafic est le plus prévisible.

Script dans JavaScénario, Python or JavaUne bonne connaissance du protocole HTTP et du comportement des bases de données, une aisance dans l'interprétation des métriques des serveurs et des conteneurs, ainsi que des notions de statistiques suffisantes pour distinguer un percentile d'une moyenne sont indispensables. La maîtrise du cloud et des processus CI/CD est devenue quasi essentielle.

Résumez cet article avec :