mardi 9 décembre 2008

Introduction à JMeter

J'ai eu du mal à trouver de la documentation francophone sur l'utilisation de JMeter, c'est pourquoi je propose ici une traduction personnelle des parties de la documentation officielle qui m'ont parues les plus pertinentes pour commencer avec cet outils.


Installation

Un dézippe suffit


Démarrage

Lancer jmeter.bat


Bases

Un plan de test JMeter contient un ou plusieurs groupes de thread, controller logique, sampler, auditeurs, timers, vérifications.
On peut ajouter ou enlever des éléments du plan de test par click droit dans l'arbre de test. De la même manière et à n'importe quel endroit du plan de test on peut sauvegarder un élément par click droit / enregistrer dessus, ou on peut ajouter un élément enfant par click droit / ouvrir dessus.
Sur la partie de droite de l'interface se situe les éléments de configuration de l'élément en cours de sélection.

Pour lancer un plan de test utilisez le menu Lancer / Démarrer
Pour stopper immédiatement l'exécution du plan de test : Lancer / Stop
Pour stopper les threads à la fin de leur tâche courante : Lancer / Eteindre

L'arbre de test contient des éléments à la fois classés par hiérarchie et ordonnés. Certains sont strictement hiérarchiques (Listeners, Config Elements, Post-Procesors, Pre-Processors, Assertions, Timers), et d'autre sont d'abord ordonnés (controllers, samplers). En créant votre plan de test vous créez une liste ordonnée de requêtes (Samplers) qui représente une étape à exécuter. Ces requêtes sont souvent organisées en controllers qui sont ordonnés eux aussi. Il peut y avoir des temps d'attentes (Timers) entre les requêtes, en ajoutant un compteur de temps constant vous affectez le temps d'attente entre toutes les requêtes soeurs et petites soeurs du timers (les enfants de son parent).


Les éléments d'un plan de test

Groupe de threads
Les thread group sont les points d'entrée des plan de test. Tous les controleurs et samplers doivent être enfants d'un groupe de thread. Comme leur nom l'indique, ils controlent un nombre de thread que JMeter utilise pour le test.
Tous les threads exécutent le plan entièrement et indépendamment des autres threads. Les multiples threads simulent les accès concurrents au server.

Controleurs
Il y a deux types de controleurs dans JMeter, Les controleurs d'échantillons et les controleurs logiques (Samplers / Logical). Ils controllent l'exécution d'un test.
Les samplers envoient une requête au server (HTTP Request Sampler -> envois une requête http).
Vous pouvez aussi customiser un sampler en ajoutant des éléments de configuration.
Les controleurs logiques vous permettent de decider quand envoyer la requête. Par exemple, vous pouvez ajouter un controleur logique "interleave" pour alterner en 2 requêtes.

Auditeurs
Les auditeurs fournissent un accès à l'information collecté pendant les test. Ils collectent les informations de tous les éléments de leur niveau ou plus bas.

Timers
Par défaut, les thread envoient les requêtes sans pause entre chaque. Il est recommandé d'ajouter un delay entre les requêtes en ajoutant un timer. Sans cela JMeter peut submerger votre serveur en envoyant trop de requêtes en un très court laps de temps.
Si plusieurs timers sont présents sur les même éléments d'application, leur delais sont additionnés.

Vérifications
Les vérifications vous permettent de vérifier des réponses du serveur. Avec une vérification (Assert) vous vous assurez essentiellement que votre application produit le resultat escompté.
Vous pouvez ajouter des vérifications à n'importe quel sampler, en cas d'échec de la vérification la requête est marqué comme échouée (ce qui fait grimper le pourcentage d'échec dans les auditeurs).

Configurations
Un élément de configuration travail en coopération avec un sampler, il n'envoit pas de requête mais il peut modifier la requête envoyée.
Un élément de configuration est accessible (comme le reste) seulement à l'intérieur de son élément parent. Un élément de configuration placé plus bas dans la hiérarchie est prioritaire par rapport au même élément de configuration placé sur une branche supérieur de l'arbre de test.

Pre Processeurs
Un pre processeur exécute une action avant qu'un sampler soit exécuté. Si un pre processeur est attaché à un sampler, il sera exécuté avant qu'il soit lancé (le sampler !).
Un pre processeur est le plus souvent utiliser pour modifier les paramètres d'une requête juste avant qu'elle tourne.

Post Processeurs
Un post processeur exécute une action après qu'un sampler ait été exécuté. Un post process est le plus souvent utilisé pour analyser les donnée de réponse, souvent pour en extraire des valeurs.


L'ordre d'exécution

  1. Elements de configuration
  2. Pre processeurs
  3. Timers
  4. Sampler
  5. Post processeur (sauf si le resultat du sample est null)
  6. Vérifications (sauf si le resultat du sample est null)
  7. Auditeurs (sauf si le resultat du sample est null)


Créer un plan de test Web

Le shema d'un plan de test tout simple :
  • Plan de test
    • Groupe de thread
      • HTTP Request Defaults (Configure l'URL racine de l'application web)
      • HTTP Cookie Manager (permet la gestion des cookies de l'application web)
      • HTTP Request (Echantillon requête)
      • HTTP Request (Requête 2 vers autre page)
      • Graph Result (Affiche les resultat des tests sous forme de graphique)

Pour un plan de test plus compliqué ajouter HTTP URL Re-writing Modifier, Header Manager ....


Bonnes pratiques

Limiter le nombre des threads
Surcharger le nombre des threads gérés par JMeter peut submerger votre propre machine. Surtout si votre application répond vite, éviter de gérer trop de threads. De plus, si JMeter est surchargé le calcul des informations de timing perdra en exactitude. Si vous avez besoin de tests à plus grand échelle préférez lancer des tests distribués sur plusieurs machines.
tutorial : http://jakarta.apache.org/jmeter/usermanual/jmeter_distributed_testing_step_by_step.pdf

Utilisez le serveur Proxy
Pour préparamétrer un plan de test il vous est possible d'utiliser le serveur proxy intégré à JMeter.
Sous réserve d'un bon préparamétrage ainsi que quelques modifications ultérieures votre plan de test sera déjà créé par la simple manipulation de votre application.
http://jakarta.apache.org/jmeter/usermanual/component_reference.html#HTTP_Proxy_Server
tutorial : http://jakarta.apache.org/jmeter/usermanual/jmeter_proxy_step_by_step.pdf

Variables utilisateur
Certaines applications nécéssitent d'utiliser différentes valeurs pour différent utilisateurs (threads). Par exemple vous pourriez vouloir tester une séquence qui nécéssaite un login unique pour chaque utilisateur. Dans ce cas par exemple :
- créez un fichier text des utilisateurs / mots de passe séparé par des virgule.
- mettez le dans le même répertoire que le plan de test.
- Ajouter un Element de configuration CSV DataSet, nommez les variables USER et PASS
- Remplacez le login original par ${USER} et ${PASS} sur la requête appropriée

Réduire le ressources requises
- Passez en ligne de commande
- utilisez le moins d'auditeurs possible
- plutôt que d'utiliser beaucoup de sampler similaires, utilisez le même dans un controleur de boucle,
et utilisez des variables utilisateur pour varier l'échantillon
- n'utilisez pas le mode fonctionnel
- utilisez des fichiers CSV plutôt que XML
- Ne sauvegardez que les données dont vous avez besoin
- utiliser le moins de vérifications possible

A l'aide ! Mon patron veut que je test notre application

Les question à poser :
- Combien d'utilisateurs en moyenne ?
- Combien d'utilisateurs au maximum ?
- Quand doit on tester (garder en tête que ça peut vraiment crasher un ou plusieurs serveurs) ?
- Est-ce que l'application gère des états (cookies, session, url rewriting, autres ...)

Quels types de test ?
- tests unitaires : peu de volume, juste pour voir si ça marche
- benchmark : volume moyen d'utilisateurs
- tests de charge : maximum d'utilisateurs
- test destructifs : quelle est la limite ?


Site Intéréssants
http://fr.wikipedia.org/wiki/JMeter
http://blog.milamberspace.net/index.php/jmeter-test-de-charges-dun-site-web-mode-demploi
http://fr.wikipedia.org/wiki/JMeter#Liens_externe
http://groups.google.com/group/jmeter-fr
http://jakarta.apache.org/jmeter/usermanual/

1 commentaire:

Anonyme a dit…

tuto d'une qualité rare!