web-dev-qa-db-fra.com

Gestion de session/cookie dans Apache JMeter

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

  1. Nous nous connectons
  2. Recherche basée sur certains critères
  3. répéter les recherches pour différents paramètres. 

Nous utilisons Jmeter pour effectuer des tests de performance. Nous avons besoin de plusieurs threads en cours d'exécution pour tester cela de manière évolutive.

La façon dont nous disposons actuellement de cette disposition est la suivante:

-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 une table de retour récapitulative et un rapport présent au niveau du plan, tandis que le gestionnaire de cookies est présent au niveau du groupe de threads. 

Quand je cours pour un fil, cela fonctionne bien et se termine bien. Lorsque je l'adapte à plusieurs threads, dès que le prochain thread démarre, la session du dernier thread est invalidée. Cela provoque des échecs pour tous les threads déjà en cours en raison du thread nouvellement créé.

J'ai atteint ce résultat avec observation:
1. Si j'exécute plusieurs threads, seul le dernier thread a obtenu des réponses valides dans l'arborescence du résumé des résultats
2. Si je lance avec 2 threads avec une période de montée en charge de 10 secondes, ce qui signifie que chaque thread a le temps de se terminer lui-même, puis les deux s'exécutent correctement. 

Selon ma compréhension, chaque thread se connecte à l’application et puisque le gestionnaire de cookies est au niveau du thread, les valeurs seront conservées pour l’identifiant de session de chaque thread, respectivement? Mais qu'est-ce qui cause le remplacement de la valeur de l'identifiant de session entre les threads?

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

48
Priyank

Copié à partir de la documentation de jmeter:

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 niveau du groupe de discussion, nous Assurez-vous que toutes les requêtes HTTP seront partager les mêmes cookies.

Extrait du chapitre "4.2.2 Contrôleurs logiques" dans http://jmeter.Apache.org/usermanual/test_plan.html .

EDIT: Je suppose que vous devriez utiliser http://jmeter.Apache.org/usermanual/component_reference.html#Simple_Controller pour regrouper vos demandes avec Cookie Manager.

46
Andrey Adamovich

Je pense que la réponse d'Andrey ne peut pas aider. Il cite que chaque demande utilisera les mêmes cookies MAIS selon le manuel de jmeter:

Chaque thread JMeter a sa propre "zone de stockage de cookies".

Si je comprends bien 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 threads et les exécuter de manière consécutive. Le premier groupe de threads (avec un seul thread qui ne s'exécute qu'une fois) doit se connecter et enregistrer la valeur du cookie de session dans un paramètre global (vous devez peut-être utiliser les fonctionnalités de script de jmeter) . Définissez ensuite ce cookie dans le gestionnaire de cookies du deuxième groupe de fil.

J'espère que cela pourra aider.

6
akostadinov

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

1
Isaac

Commencez par changer votre code pour: 

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

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.

0
Jigish Chawda