Qu’est-ce que les tests STRESS dans les tests logiciels ?

⚡ Résumé intelligent

Les tests de résistance poussent une application au-delà de ses limites de fonctionnement normales afin de trouver le point de rupture, de confirmer que les défaillances sont gérées correctement et de prouver que le système se rétablit proprement une fois la charge extrême supprimée.

  • (I.e. Définition: Les tests de résistance mesurent la robustesse et la gestion des erreurs sous une charge bien supérieure à celle du trafic de production.
  • ☑️ Objectif: Le test permet de localiser le point de défaillance exact et de vérifier la capacité de récupération une fois que la charge est revenue à la normale.
  • ✅ Portée: Les variantes distribuées, applicatives, transactionnelles, systémiques et exploratoires mettent chacune l'accent sur une couche différente du système.
  • 🧪 Processus: Planifier, élaborer un scénario, exécuter, analyser, puis optimiser — généralement sur trois ou quatre cycles complets avant d'atteindre les objectifs fixés.
  • ️ Outillage: LoadRunner, Apache JMeter, StressTester, et NeoChargez la génération d'utilisateurs virtuels simultanés et la capture des données de réponse.
  • (I.e. Métrique: Le débit, le nombre de pages par seconde, le temps d'accès, le temps de réponse du premier octet et les connexions échouées quantifient le résultat.

Tests de résistance dans les tests logiciels

Qu’est-ce que les tests de résistance ?

Test de stress Le test de charge est un type de test logiciel qui vérifie la stabilité et la fiabilité d'une application. Son objectif est d'évaluer la robustesse et la capacité de gestion des erreurs du logiciel sous des charges extrêmement élevées, et de s'assurer qu'il ne plante pas en situation critique. Il consiste à tester délibérément le logiciel au-delà de ses points de fonctionnement normaux et à évaluer son comportement dans des conditions extrêmes.

Lors des tests de charge, l'application testée est soumise à des contraintes importantes pendant une courte période afin d'évaluer sa résistance. L'utilisation principale des tests de charge est de déterminer la limite de défaillance d'un système, d'un logiciel ou d'un matériel. Ils permettent également de vérifier si le système gère efficacement les erreurs une fois cette limite franchie.

In Génie logicielLes tests de résistance sont souvent listés à côté Test d'endurancemais les deux diffèrent : le test de contrainte applique une charge anormalement élevée en une courte période pour trouver le point de rupture, tandis que le test d'endurance (trempage) maintient une charge modérée pendant des heures pour exposer une dégradation progressive.

La capture d'écran ci-dessous montre un bloc important de données copié depuis une page web.

Copie d'un très gros bloc de données depuis une page web pour mettre à l'épreuve une application de bureau

L'application testée est soumise à une forte charge lorsque 5 Go de données sont copiés du site web et collés dans le Bloc-notes. Ce dernier, à son tour surchargé, renvoie un message d'erreur « Ne répond pas », comme le montre la capture d'écran suivante.

Le Bloc-notes affiche un message d'erreur « Ne répond pas » après le collage de 5 Go de données.

Le même principe s'applique directement aux systèmes côté serveur.

Nécessité de tests de résistance

Prenons comme exemples concrets les suivants, où l'utilité des tests de résistance devient évidente :

  • Pendant la période des fêtes, une boutique en ligneping Le site peut connaître un pic de trafic, ou lorsqu'il annonce une vente.
  • Lorsqu’un blog est mentionné dans un journal de premier plan, il connaît une soudaine augmentation du trafic.

Il est impératif de réaliser des tests de charge pour absorber ces pics de trafic anormaux. Ne pas pouvoir absorber ce trafic soudain peut entraîner une perte de revenus et nuire à la réputation de l'entreprise.

Les tests de résistance sont également extrêmement précieux pour les raisons suivantes :

  • Il vérifie si le système fonctionne dans des conditions anormales.
  • Cela confirme qu'un message d'erreur approprié s'affiche lorsque le système est soumis à une forte charge.
  • Une défaillance du système dans des conditions extrêmes pourrait entraîner d'énormes pertes de revenus.
  • Il est préférable de se préparer aux conditions extrêmes en effectuant des tests de résistance au préalable.

La section suivante explique ce qu'un test de résistance réussi doit prouver.

Objectifs des tests de résistance

L'objectif des tests de charge est d'analyser le comportement du système après une panne. Pour qu'un test de charge soit concluant, le système doit afficher un message d'erreur approprié lorsqu'il est soumis à des conditions extrêmes.

Pour réaliser des tests de charge, on utilise parfois d'importants volumes de données, or ces données peuvent être perdues en cas de défaillance du système. Les testeurs doivent s'assurer que ces données sensibles à la sécurité ne soient pas perdues pendant les tests de charge.

L'objectif principal des tests de résistance est de s'assurer que le système se rétablit après une panne, une propriété appelée capacité de récupération. Test de récupération puis vérifie en détail cette procédure de restauration.

Tests de charge vs tests de résistance

Les deux techniques appartiennent à la Test de performance Il s'agit d'une famille, il est donc facile de les confondre. Le diagramme ci-dessous compare les deux profils de charge.

Graphique comparant le profil de charge constant des essais de charge avec le profil de charge croissant des essais de contrainte.

test de charge Test de stress
test de charge Ce test permet de vérifier le comportement du système dans des conditions de charge de travail normales ; il simule la charge de travail réelle attendue. Les tests de résistance permettent de tester le comportement du système dans des conditions extrêmes et sont effectués jusqu'à la défaillance du système.
Les tests de charge ne mettent pas le système en panne. Les tests de résistance visent délibérément à mettre le système à l'épreuve en le submergeant de données ou en le privant de ressources.

Les profils associés incluent Test de pointe (une brève et soudaine explosion), Tests de volume (un grand volume de données plutôt qu'un grand nombre d'utilisateurs) et Tests d'évolutivité (marge de croissance).

Types de tests de résistance

Voici les différents types de tests de résistance, expliqués un par un.

Tests de résistance distribués

Dans les systèmes client-serveur distribués, les tests sont effectués sur tous les clients depuis le serveur. Le rôle du serveur de charge est de distribuer une série de tests de charge à tous les clients de charge et de… tracLe serveur vérifie l'état de chaque client. Lorsqu'un client contacte le serveur, celui-ci ajoute son nom et commence à lui envoyer des données de test. La figure ci-dessous illustre comment le serveur de test de charge atteint certains clients mais pas tous.

Configuration de test de charge distribué où un serveur de charge atteint les clients 1 et 2 mais perd le contact avec les clients 3 et 4.

Pendant ce temps, les machines clientes envoient un signal, ou battement de cœur, confirmant leur connexion au serveur. Si le serveur ne reçoit aucun signal d'une machine cliente, cette dernière doit faire l'objet d'une investigation plus approfondie à des fins de débogage. Sur la figure, le serveur peut se connecter à deux clients (Client 1 et Client 2), mais il ne peut ni envoyer ni recevoir de signal des clients 3 et 4.

Un test de charge nocturne est la meilleure option pour ces scénarios. Les grandes fermes de serveurs nécessitent une méthode plus efficace pour identifier les ordinateurs ayant subi des défaillances nécessitant une investigation.

Tests de résistance des applications

Ce test vise à détecter les défauts liés au verrouillage et au blocage des données, aux problèmes de réseau et aux goulots d'étranglement des performances dans une seule application.

Tests de résistance transactionnels

Il effectue des tests de résistance sur une ou plusieurs transactions entre deux applications ou plus. Il sert à optimiser et à affiner le système.

Tests de stress systémique

Il s'agit d'un test de charge intégré pouvant être exécuté sur plusieurs systèmes partageant le même serveur. Il sert à détecter les anomalies où une application bloque les données d'une autre.

Tests de résistance exploratoires

Il s'agit du type de test de résistance utilisé pour tester le système avec des paramètres ou des conditions inhabituels, peu susceptibles de se produire en situation réelle. Il permet de détecter les défauts dans des situations inattendues telles que :

  • Un grand nombre d'utilisateurs se sont connectés simultanément.
  • Un antivirus se lance simultanément sur toutes les machines.
  • Une base de données devient inaccessible pendant qu'elle est consultée depuis un site web.
  • Un grand volume de données est inséré simultanément dans la base de données.

Quelle que soit la variante applicable, la séquence d'exécution reste la même.

Comment faire des tests de résistance ?

Le processus de test de résistance peut être réalisé en 5 étapes principales :

  • Étape 1) Planification du test de résistance : Ici, vous collectez les données système, analysez le système et définissez les objectifs du test de résistance.
  • Étape 2) Créez des scripts d'automatisation : Dans cette phase, vous créez les scripts d'automatisation des tests de charge et générez les données de test pour les scénarios de charge.
  • Étape 3) Exécution du script : Dans cette étape, vous exécutez les scripts d'automatisation des tests de charge et enregistrez les résultats.
  • Étape 4) Analyse des résultats : À cette étape, vous analysez les résultats du test de résistance et identifiez les goulots d'étranglement.
  • Étape 5) Ajustements et optimisation : À cette étape, vous affinez le système, modifiez les configurations et optimisez le code dans le but d'atteindre le niveau de performance souhaité.

Enfin, vous relancez le cycle complet pour déterminer si les modifications ont produit les résultats escomptés. Par exemple, il n'est pas rare d'avoir besoin de 3 à 4 cycles du processus de test de charge avant d'atteindre les objectifs de performance ; les scripts sont donc généralement conservés en parallèle. régression suite.

Outils recommandés pour les tests de résistance

Les quatre outils ci-dessous couvrent la plupart des besoins, des suites d'entreprise à une option open source gratuite.

LoadRunner

LoadRunner est un outil de test de charge largement utilisé, désormais vendu par OpenText dans les éditions Professionnelle, Entreprise et Cloud après la migration de HP vers Micro Focus OpenTextLes résultats des tests de charge produits par LoadRunner sont considérés comme une référence.

JMeter

Apache JMeter est un outil de test open source. C'est un pur Java application pour les tests de contrainte et de performance, conçue pour couvrir différents types de tests tels que les tests de charge, fonctionnels et de contrainte. Versions actuelles 5.6.x de Apache JMeter exigent Java 8 ou plus tard, avec Java 17 recommandés.

Testeur d'effort

Cet outil offre une analyse approfondie des performances des applications web, présente les résultats sous forme graphique et est simple d'utilisation. Aucune programmation complexe n'est requise, ce qui permet de maintenir un retour sur investissement rapide.tracUtile pour les petites équipes.

NeoCharge

NeoCharge, fait maintenant partie de la Tricentis portfolio est un outil populaire pour tester les sites web et Applications mobilesIl permet de simuler des milliers d'utilisateurs afin d'évaluer les performances d'une application en charge et d'analyser les temps de réponse. Il prend également en charge les tests de performance, de charge et de stress intégrés au cloud et offre une excellente scalabilité.

D'autres options sont répertoriées dans le guide. outils de test de performances; quel que soit le choix effectué, son résultat n'a de signification qu'au regard des indicateurs ci-dessous.

Paramètres pour les tests de résistance

Les indicateurs permettent d'évaluer les performances d'un système et sont généralement étudiés à la fin du test de charge. Les indicateurs couramment utilisés sont regroupés en trois familles.

Mesure de l'évolutivité et des performances

  • Pages par seconde : Mesure le nombre de pages demandées par seconde.
  • Débit: Une mesure de base : la taille des données de réponse par seconde.
  • Rounds: Le nombre de fois où les scénarios de test ont été planifiés par rapport au nombre de fois où un client les a exécutés.

Réponse de l'application

  • Heure de frappe : Temps moyen de récupération d'une image ou d'une page.
  • Temps jusqu'au premier octet : Temps nécessaire pour renvoyer le premier octet de données ou d'informations.
  • Temps de page : Temps nécessaire pour récupérer toutes les informations d'une page.

Les échecs

  • Échecs de connexion : Nombre de connexions refusées par le client (signal faible).
  • Tours ratés : Nombre de tours qui échouent.
  • Échecs : Nombre de tentatives infructueuses du système (liens brisés ou images invisibles).

La dernière section énumère les situations qui justifient le plus souvent un test de résistance.

Exemples de tests de résistance

Les tests de charge prennent tout leur sens chaque fois qu'un événement est susceptible de faire grimper le trafic bien au-delà du niveau de base quotidien :

  • Un site de commerce électronique annonçant une vente spéciale pour les fêtes.
  • Un site d'actualités au moment d'un événement majeur.
  • Un organisme d'éducation publiant les résultats des examens.
  • Réseaux sociaux, blogs et applications mobiles lors d'un phénomène viral.

Dans chaque cas, le test surveille les ressources telles que la mémoire, le processeur et le réseau, vérifie que les messages d'erreur appropriés apparaissent en situation de forte charge et confirme que le système revient ensuite à la normale. Il s'inscrit dans le cadre de cycle de vie des tests logiciels comme contrôle non fonctionnel à côté Test du système et l'ensemble plus large de types de tests logiciels.

FAQ

Non. Les essais de contrainte appliquent une charge anormalement élevée pendant une courte durée afin de localiser le point de rupture. Tremper ou essais d'endurance Soumet une charge réaliste pendant de nombreuses heures afin de mettre en évidence les fuites de mémoire et la dégradation lente.

Test de pointe Le test de charge consiste à soumettre le système à une surtension soudaine et très brève, puis à mesurer sa capacité d'adaptation et de récupération. Le test de résistance, quant à lui, augmente la charge progressivement jusqu'à la défaillance, permettant ainsi de déterminer la limite de résistance plutôt que la vitesse de réaction du système.

Effectuez ce test avant chaque mise à jour majeure, avant tout pic de trafic prévisible (comme une période de soldes ou la publication de résultats), et après toute modification architecturale de la mise en cache, du regroupement de connexions ou de la mise à l'échelle automatique. De nombreuses équipes le répètent également chaque trimestre à titre de vérification de référence.

Utilisez un environnement dimensionné au plus près des conditions de production, dans les limites du budget, car un matériel sous-dimensionné peut entraîner des défaillances. Alimentez-le avec des données masquées ou synthétiques correspondant au volume de production et n'effectuez jamais de test de charge destructif sur des données clients réelles.

Les modèles d'apprentissage automatique exploitent les données de télémétrie de production pour établir des profils de trafic de pointe réalistes, identifier les courbes de temps de réponse anormales qu'un seuil fixe ne détecterait pas et corréler les indicateurs de ressources afin de localiser le goulot d'étranglement. Plusieurs plateformes commerciales génèrent désormais des scénarios de charge à partir des modèles d'utilisation observés.

Oui. Brouillons de copilote JMeter Plans de test, scripts k6 ou Gatling, générateurs de données paramétrés et étapes de pipeline CI à partir d'une invite en langage clair. Considérez le résultat comme une première ébauche : les temps de réflexion, le rythme et les assertions doivent encore être validés par un testeur.

Il révèle la capacité maximale réelle, prouve la gestion des erreurs et réduit le risque d'interruption de service lors des pics d'activité. Ses limitations résident dans le coût — les environnements de production et les licences sont onéreux — ainsi que dans l'effort de script et les résultats, qui varient en fonction des modifications de l'infrastructure.

Ce service est géré par des ingénieurs de performance ou des testeurs spécialisés, généralement avec l'aide de développeurs et de personnel d'exploitation pour analyser les indicateurs du serveur. Il intervient après les tests fonctionnels. test du système, une fois que la version est suffisamment stable pour que les échecs indiquent des limites de capacité plutôt que des bogues.

Résumez cet article avec :