Grouper:Tests charge
Un article de Wiki ESCO-Portail.
Sommaire |
Tests de charge de Grouper
L'ensemble des éléments permettant de réaliser ces tests se trouvent dans le module svn ESCO-GrouperTestSetsGeneration.
- Ce module comprend un script permettant de charger un jeu de test dans l'annuaire LDAP.
- Une classe Java pour créer des dossiers et des groupes dans Grouper.
- Un plan de test JMeter.
Chargement du jeu de test dans l'annuaire LDAP
Fichiers :
- tools/ldif4TestSet.sh
- tools/people_ldif_template
Utilisation :
- Editer ldif4Template.sh pour positionner la variable SIZE, correspondant au nombre de personnes dans le jeu de test.
- Exécuter ldif4Template.sh, ce qui va créer le fichier testSet.ldif
- Importer le fichier ldif dans l'annuaire.
Chargement des groupes dans Grouper
Le chargement du jeu de test dans l'annuaire LDAP doit avoir été effectué préalablement.
1 - Editer les fichier properties/grouper.hibernate.propertie et properties/source.xml pour définir paramétrer, respectivement,
l'accès à la base de donnée et à l'annuaire LDAP.
2 - Editer le fichier de configuration properties/ESCO-GrouperTestSetGenerator.properties pour paramétrer la création des dossiers, des groupes et des appartenances :
########################################### # Creation de groupes et dossiers de test # ########################################### # Dossier racine (doit exister). esco-grpgen.root_stem = StressTest # Prefixe pour les noms des dossiers crees. esco-grpgen.stems.prefix = ST02_STEM_ # Nombre de dossiers crees. esco-grpgen.nb.stems = 200 # Proportion de dossiers possedant des sous-dossiers. esco-grpgen.substems.rate = 0.40 # Nombre max de sous dossiers. esco-grpgen.max.substems = 5 # Prefix pour les groupes cree esco-grpgen.groups.prefix = ST02_GROUP_ # Nombre total de groupes crees. esco-grpgen.nb.groups = 10000 # Proportion de groupe possedant des sous-groupes. esco-grpgen.subgroups.rate = 0.25 # Nombre max de sous-groupes pour un groupe donne. esco-grpgen.max.subgroups = 5 # Prefix pour les sujets. esco-grpgen.subjects.prefix = STRESS_TEST__Person_ # Nombre du sujet existants dans le LDAP. esco-grpgen.nb.subjects = 10000 # Nombre maximum de sujets membres d un groupe donne. esco-grpgen.max.members = 50 # Nombre minimum de sujets membres d un groupe donne. esco-grpgen.min.members = 5
Dans cet exemple 10000 groupes sont créés, répartis dans 200 sous dossiers, en utilisant le dossier StressTest comme racine.
Parmi les dossiers, 40 % possèdent des sous-dossiers, avec une valeur limite de 5 sous-dossiers directs par dossier.
Les 10000 groupes sont répartis aléatoirement dans les sous-dossiers.
Parmi les groupes, 25 % contiennent des sous-groupes, avec une valeur limite de 5 sous-groupes.
Enfin, de 5 à 50 personnes sont membres de chaque groupe.
3 - Exécuter le script tools/generateGrouperTestSet.sh
Tests de charge avec JMeter
- JMeter peut être téléchargé à cette adresse.
- Le composant additionnel BeanShell doit également être installé.
- Le plan de test et le fichier de propriétés de JMeter se trouvent dans le répertoire ESCOGrouperTestSet/tools.
Invocation de JMeter :
<install_dir>/bin/jmeter.sh -t tools/plan_test-Grouper.jmx -p tools/jmeter.properties
Plan de test
Le principe du plan de test est le suivant :
- Durant une phase d'initialisation on sélectionne aléatoirement un certain nombre d'identifiants de dossiers groupes et sujets(chaque thread dispose de sa propre sélection d'identifiants).
- Durant la phase de simulation de l'utilisation de Groupers ces identifiants sont utilisés de la façon suivante :
- Pour chaque identifiant de dossier on accède au dossier correspondant puis on créé un certain nombre de sous dossiers.
- Pour chaque sous-dossier on créé des groupes.
- Ces groupes sont peuplés via les identifiants de sujets de groupes extraits durant la phase d'initialisation.
- Les identifiants de sujets sont utilisés également pour simuler l'accès aux informations de sujets.
Paramétrage du plan de test
A la fin du fichier jmeter.properties se trouvent les propriétés utilisées pour le plan de test de Grouper :
######### Grouper parameters ######### #--------- Global ---------# results.directory=/opt/jmeter/results/ thread.nb=5 thread.ramp-up=5 thread.loop.count=2 random.wait.min=50 random.wait.max=200 #--------- Database ---------# # Fichiers utilises pour stocker les identifiants. db.groups.uuids.file=groups.uuids db.subjects.ids.file=subjects.ids db.stems.uuids.file=stems.uuids # Parametres de connexion. #db.url=jdbc:mysql://bach/grouper_vivaldi db.url=jdbc:mysql://Grouper/grouper db.driver=com.mysql.jdbc.Driver db.user=un login db.password=un mote de passe # Nombre d identifiants extraits de la bd. db.groups.limit=300 db.subjects.limit=100 db.stems.limit=50 # --------- Creation de dossiers et groupes ---------# # Nombre de sous-dossiers crees dans chaque dossier extrait de la bd. create.sub.stems.nb=10 # Nombre de groupes crees dans chaque sous-dossier. create.groups.nb=50 # Nombre de membres ajoutes dans chaque groupe # doit etre <= db.subjects.limit # (selectionnes parmis ceux extraits de la bd). create.subjects.members=50 create.group.members=5 #--------- HTTP ---------# http.server=dvorak http.port=80 # login par thread. http.1.login=login_le_thread_1 http.2.login=login_pour_le_thread_2 http.3.login=login_pour_le_thread_3 http.4.login=login_pour_le_thread_4 http.5.login=login_pour_le_thread_5 http.password=xxx http.context=grouper-esco-st
Dans cet exemple 5 utilisateurs sont simulés (5 threads).
Pour chacun des utilisateurs, la séquence d'opération suivante est réalisé 2 fois :
50 identifiants de dossiers, 3O0 identifiants de groupes et 100 identifiants de sujets sont extraits de la base de donnée.
Les informations relatives aux 100 sujets extraits de la base sont consultés.
Pour chacun des 50 dossiers, 10 sous-dossiers sont créés. Pour chacun de ces sous-dossiers 50 groupes sont créés.
Chaque groupe créé est peuplés avec 50 sujets membres et 5 sous groupes.
La liste des membres immédiats puis complète est consulté pour chaque groupe après son peuplement.
Tous les dossiers et groupes sont vidés et supprimés après ces opérations.
Remarques :
- random.wait.min et random.wait.max permettent de paramétrer une attente aléatoire après les requêtes.
- A priori la version de protocole http utilisée par jmeter ne permet pas une communication directe avec Tomcat, sans frontend apache.
Resultats
Les tests sont exécutés sur le serveur hôte lion, dans un vserveur contenant Grouper, MySQL et OpenLDAP.
La base de Grouper est chargée avec 10000 groupes et LDAP avec 10000 utilisateurs.
Exécution du plan de test sur une seule machine
Paramètres :
thread.nb=40 thread.ramp-up=5 thread.loop.count=2 random.wait.min=50 random.wait.max=200 db.groups.limit=300 db.subjects.limit=100 db.stems.limit=5 create.sub.stems.nb=2 create.groups.nb=2 create.subjects.members=50 create.group.members=5
Simulation de 40 utilisateurs.
Nombre de groupes créés par utilisateur :
thread.loop.count * db.stems.limit * create.sub.stems.nb * create.groups.nb : 2 * 5 *2 *2 = 40
Nombre total de groupes créés : </br> 40 * 40 = 1600


