53 votes

Gestion des sessions / cookies dans Apache Jmeter

Nous avons un simple test de performance de flux dans une application.

  1. Nous avons de connexion
  2. Recherche en fonction de certains critères
  3. la répétition de recherches pour les différents paramètres.

Nous sommes à l'aide de Jmeter pour faire un test de performance. Nous avons besoin d'avoir plusieurs threads en cours d'exécution pour tester cela de 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, fondamentalement, nous avons résumé de la table de retour et rapport présente sur le plan du niveau de tout cookie manager est présent sur le fil au niveau du groupe.

Quand je lance pour un fil, il fonctionne très bien et se termine bien. Quand je l'échelle de plusieurs threads, dès que le fil suivant débute, la séance pour le dernier fil est invalidé. Cela provoque des défaillances pour toutes les threads en cours d'exécution en raison nouvellement généré fil.

Je suis arrivé à ce résultat avec l'observation:
1. Si je exécuter plusieurs threads, seul le dernier thread a obtenu de réponses valides dans le sommaire des résultats de l'arbre
2. Si je lance avec 2 fils avec rampe période de 10 secondes, ce qui signifie que chaque fil est temps de finir lui-même, puis de les exécuter avec succès.

Selon ma compréhension de chaque fil de connexion dans l'application et depuis cookie manager est au niveau des threads, les valeurs seront maintenues pour les id de session pour chaque thread, respectivement? Mais ce qui est à l'origine de la substitution de la valeur d'id de session entre les threads?

Toute aide sera très appréciée.

48voto

Andrey Adamovich Points 9404

Copié à partir de jmeter de la documentation:

Le dernier élément est un Cookie HTTP Le gestionnaire . Un Gestionnaire de Cookies doivent être ajouté à tous les tests web - autrement JMeter ignore les cookies. En ajoutant au Fil au niveau du Groupe, nous s'assurer que toutes les requêtes HTTP seront partager les mêmes cookies.

À partir 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.

7voto

akostadinov Points 3272

Je pense que Andrey réponse ne peut pas aider. Il dit que chaque demande, d'utiliser les mêmes cookies MAIS selon jmeter manuel:

Chaque JMeter thread a son propre cookie "zone de stockage".

Autant je comprends la question, vous voulez chaque thread pour partager le même ID de session cookie. Donc, il me semble que vous devez avoir deux thread groupes et de les exécuter de façon consécutive. Premier groupe de thread (avec un seul thread qui exécute qu'une seule fois) doit connecter et enregistrer le cookie de session de la valeur à un paramètre global (peut-être vous avez besoin d'utiliser jmeter de capacités de script). Ensuite, réglez le cookie dans le gestionnaire des témoins de la seconde discussion de groupe.

Espérons que cela aide.

1voto

Isaac Points 19

Essayez d'augmenter le temps de montée en puissance. J'ai rencontré le même problème où le temps de montée était d'environ 1 seconde, puis je l'ai augmenté à 3 secondes par thread et cela s'est bien passé.

0voto

Jigish Chawda Points 566

Essaye ça:

Ouvrez le fichier user.properties présent dans le dossier bin de JMeter

Modifiez-le et ajoutez la ligne suivante:

 CookieManager.check.cookies=false
 

Enregistrez-le et exécutez le script. J'espère que cela résoudra votre problème.

0voto

user2522062 Points 1

Modifiez d'abord 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 échantillonneur Java.

Ensuite, dans votre échantillonneur java, ajoutez:

 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());
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X