Junior
Parlez-moi des tests de charge.
sobes.tech IA
Réponse de l'IA
Les tests de charge sont un type de test visant à déterminer la performance, la stabilité et la scalabilité d'une application (système) sous différentes charges.
Les tâches des tests de charge :
- Définir la charge limite que le système peut supporter.
- Identifier les points faibles (goulots d'étranglement).
- Évaluer le temps de réponse du système sous charge.
- Vérifier la stabilité du système à long terme sous charge.
- Vérifier la scalabilité du système.
Types de tests de charge :
- Test de charge (Load Testing): Vérifier le comportement du système sous un niveau de charge attendu (normal).
- Test de stress (Stress Testing): Vérifier le système sous une charge dépassant la normale, jusqu'à l'apparition de défaillances. L'objectif est de déterminer la limite de résistance.
- Test d'endurance / d'absorption (Endurance/Soak Testing): Vérifier la stabilité du système avec une charge moyenne ou élevée sur une longue période, en identifiant les fuites de mémoire et la dégradation des performances avec le temps.
- Test de pic de charge (Spike Testing): Vérifier le comportement du système lors d'une augmentation soudaine et massive de la charge.
- Test de scalabilité (Scalability Testing): Évaluer la capacité du système à gérer une charge croissante en utilisant le scaling horizontal ou vertical des ressources.
- Test de volume (Volume Testing): Vérifier le comportement du système avec une augmentation du volume de données dans les bases de données ou autres stockages.
Étapes du test de charge :
- Définition des objectifs: Définir des métriques de performance claires (temps de réponse, capacité, erreurs) et des critères de réussite.
- Planification et conception des scénarios: Analyser les scénarios utilisateur, définir le profil de charge (nombre d'utilisateurs virtuels, intensité des requêtes).
- Développement des scripts de test: Créer des scripts pour simuler les actions des utilisateurs avec des outils de test de charge.
- Préparation de l'environnement de test: Configurer un environnement de test simulant l'environnement de travail.
- Exécution des tests: Lancer les tests avec différentes charges.
- Monitoring et collecte des données: Collecter les métriques de performance du système, des serveurs, des bases de données.
- Analyse des résultats et rapport: Comparer les résultats aux métriques cibles, identifier les problèmes, préparer un rapport.
Outils pour les tests de charge :
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Exemple d'un script simple JMeter (Requête HTTP) :
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test de charge d'exemple">
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Groupe de Threads">
<intProp name="ThreadGroup.num_threads">100</intProp>
<intProp name="ThreadGroup.ramp_time">10</intProp>
<longProp name="ThreadGroup.duration">60</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Exemple de requête HTTP">
<stringProp name="HTTPSampler.domain">example.com</stringProp>
<stringProp name="HTTPSampler.path">/</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">false</boolProp>
<boolProp name="HTTPSampler.embedded_url_report">true</boolProp>
<boolProp name="HTTPSampler.connect_timeout"></boolProp>
<boolProp name="HTTPSampler.response_timeout"></boolProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.comment"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.image_parser">true</stringProp>
<stringProp name="HTTPSampler.concurrentDwn">Both</stringProp>
<stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
<stringProp name="HTTPSampler.implementation_status">OK</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
<listProp name="HTTPSampler.HTTP_HEADERS"></listProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</TestPlan>
</hashTree>
</jmeterTestPlan>
Les métriques recueillies lors des tests de charge :
- Temps de réponse
- Capacité de transfert
- Nombre d'erreurs par seconde
- Nombre de requêtes par seconde
- Utilisation du CPU
- Utilisation de la mémoire
- Activité du disque dur
- Activité réseau
- Métriques de la base de données
Les tests de charge aident à prévenir les défaillances du système en production sous haute charge et à assurer un niveau de qualité acceptable pour les utilisateurs finaux.