JMeter : Think time et ordre d’exécution, « les bons plans »

Un billet inspiré d’une discussion sur le groupe Google JMeter en français (merci Jslave).

Vous avez fait ce plan de test, avec 2 itérations dans la boucle (01 Contrôleur Boucle) :

En pensant avoir l’ordre d’exécution suivant (pour un groupe d’unités à 1-1-1) :

  • 01 Requête Login
    • (1ère itération de boucle)
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête A
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête B
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête C
    • (2ème itération de boucle)
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête A
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête B
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête C
  • 02 Requête Logout

Malheureusement, le plan de test n’aura pas cet ordre d’exécution (ci-dessus), mais l’ordre d’exécution ci-dessous :

  • 01 Requête Login
    • (1ère itération de boucle)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête A
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête B
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête C
    • (2ème itération de boucle)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête A
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • 02 Requête B
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
      • (Compteur de temps fixe : pause 2 sec)
    • 02 Requête C
  • 02 Requête Logout

Tout simplement car les timers (compteur de temps) sont toujours exécutés avant les échantillons (samplers) qui sont au même niveau d’arborescence.

Voici le tableau des résultats qui montre bien l’intervalle à 6 secondes :

Une première solution possible est de mettre les compteurs de temps fixe dans un échantillon débogage (debug sampler).

Voici le plan de test associé :

Une autre solution, consiste à remplacer les compteurs de temps par des échantillons Action test.

L’avantage de la première solution c’est de permettre d’utiliser tout type de compteurs de temps (gaussien, fixe, aléatoire fixe, etc). L’inconvénient est que dans les résultats, on a les traces des échantillons débogages.

La deuxième solution est plus sympa, car les échantillons Test action sont invisibles dans les résultats.

Enfin, on peut toujours mixer un échantillon Test action avec en tant qu’enfant un compteur de temps.

Une dernière solution possible, est tout simplement de corriger le premier plan de test en supprimant 2 des 3 compteurs de temps. Elle ne fonctionnement que si les think times sont les mêmes pour toutes les requêtes (ce qui est le cas dans notre exemple, mais pas toujours dans la réalité d’un plan de test).

Pour plus d’informations sur les ordres d’exécution, voir ce lien sur la documentation JMeter ainsi que celui-ci pour les timers.

./