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 :

  1. Editer ldif4Template.sh pour positionner la variable SIZE, correspondant au nombre de personnes dans le jeu de test.
  2. Exécuter ldif4Template.sh, ce qui va créer le fichier testSet.ldif
  3. 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.


Image:Plan-test.png

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

pages développeurs
pages "communauté ESCO"