Gestion des sessions / cookies dans Apache JMeter
nous avons un flux de test de performance simple dans une application.
- nous nous connectons
- Recherche en fonction de certains critères
- répétition de recherches pour les différents paramètres.
nous utilisons Jmeter pour faire un test de performance. Nous devons avoir plusieurs threads en cours d'exécution pour tester cela d'une manière évolutive.
Le chemin que nous avons actuellement c'est arrangé:
-Test Plan
- Thread Group
- Cookie Manager
- Login To application
- Search on param 1
- Search on param 2
- results summary table
- Summary report
donc en gros nous avons le tableau de retour et le rapport sommaire présent au niveau du plan tandis que cookie manager est présent au niveau du thread group.
quand je cours pour un fil il court bien et complète bien. Quand je l'ajuste à plusieurs threads, dès que le thread suivant démarre, la session pour le dernier thread est invalidée. Cela provoque des échecs pour tous les threads déjà en cours d'exécution en raison de thread nouvellement engendré.
j'ai atteint ce résultat avec observation:
1. Si j'exécute plusieurs threads, seul le dernier thread est valide réponses dans l'arbre des résultats
2. Si j'exécute avec 2 threads avec une période de montée en puissance de 10 secondes, ce qui signifie que chaque thread a le temps de finir lui-même, alors les deux s'exécutent avec succès.
selon ma compréhension de chaque connexion de thread dans l'application et comme cookie manager est au niveau du thread, les valeurs seront maintenues pour l'id de session pour chaque thread respectivement? Mais qu'est-ce qui cause le dépassement de la valeur d'id de session entre les threads?
tous l'aide sera très appréciée.
5 réponses
Copié à partir de jmeter de la documentation:
le dernier élément est un Cookie HTTP Gestionnaire. Un gestionnaire de cookies devrait être ajouté à tous les tests web-sinon JMeter ignorera les cookies. En ajoutant au Fil au niveau du Groupe, nous s'assurer que toutes les requêtes HTTP seront partagez les mêmes cookies.
du chapitre "4.2.2 contrôleurs logiques" dans http://jmeter.apache.org/usermanual/test_plan.html.
EDIT: je suppose que vous devez utiliser http://jmeter.apache.org/usermanual/component_reference.html#Simple_Controller pour regrouper vos demandes en collaboration avec le Gestionnaire de fichiers cachés.
je pense que la réponse D'Andrey ne peut pas aider. Il cite que chaque requête utilisera les mêmes cookies mais selon le manuel de jmeter:
chaque fil JMeter a sa propre"zone de stockage des cookies".
pour autant que je comprenne la question, vous voulez que chaque thread partage le même cookie d'ID de session. Il me semble donc que vous devez avoir deux groupes de thread et les exécuter consécutivement. Le premier groupe de threads (avec un seul thread qui n'exécute qu'une seule fois) devrait connectez-vous et sauvegardez la valeur du cookie de session dans un paramètre global (peut-être que vous devez utiliser les capacités de script de jmeter). Ensuite, définissez ce cookie dans le gestionnaire de cookies du deuxième groupe de threads.
J'espère que ça aidera.
essayez d'augmenter le temps de montée en puissance. Je suis tombé sur le même problème où le temps de montée en puissance était d'environ 1 seconde puis je l'ai augmenté à 3 secondes par fil et il a fonctionné très bien.
essaye ceci:
Ouvrir l'utilisateur.propriétés présentes dans le dossier bin de JMeter
Modifier et ajouter la ligne suivante:
CookieManager.check.cookies=false
l'Enregistrer et exécuter le script. J'espère qu'il permettra de résoudre votre problème.
tout D'abord, changez votre code en:
jmeter.properties
CookieManager.save.cookies=true
CookieManager.name.prefix=mycookie_
Ensuite, ajoutez un gestionnaire de cookies HTTP dans le même groupe de threads que votre sampler java.
puis dans votre sampler java ajouter:
JMeterVariables jmv = JMeterContextService.getContext().getVariables();
Iterator<Map.Entry<String,Object>> it = jmv.getIterator();
while(it.hasNext()){
Map.Entry<String,Object> v = it.next();
System.out.println("name: " + v.getKey() + " value: " + v.getValue());
}