JMeter et Groovy : exemple d’échantillon BSF/Groovy

JMeter dispose de plusieurs éléments « BSF » pour Bean Scripting Framework. Ce cadre de travail (framework), fait par la Fondation Apache, permet de faire un pont entre le Java de JMeter et un code script dans un autre langage de programmation.

Plus précisément ces éléments BSF permettent d’avoir accès à un certain nombre d’objets internes de JMeter (comme l’objet SampleResult correspondant au résultat courant : temps de réponses, nom, latence, etc.), tout en pouvant effectuer des opérations (de programmation) dessus avec un langage de programmation qui n’est pas forcément du Java (le langage utilisé pour créer JMeter).

BSF supporte un grand nombre de langage, soit directement c’est-à-dire distribué dans l’archive binaire de BSF, soit directement par les langages eux-mêmes, qui dans ces cas-là proposent leur moteur BSF.

Dans ce billet, nous allons voir comment faire du Groovy (définit comme un langage dynamique et agile pour Java) dans JMeter à travers ces éléments BSF.

Pour continuer sur JMeter, les éléments BSF sont (dans la version 2.4) :

Au total donc, 6 éléments BSF, qui savent tous exécuter des scripts BSF mais qui sont exécuter à différents moments lors d’un test (voir la notion d’ordre d’exécution).

Nous allons travailler sur l’échantillon BSF, qui peut aussi être traduit par « Requête BSF », ce qui signifie qu’un échantillon BSF s’exécute comme une Requête « standard », ce sera donc un élément principal dans ce scénario de test.

Voici l’arbre JMeter pour ce billet :

Très simple. La requête BSF va faire le test, et l’arbre de résultat va capter le résultat.

Revenons à Groovy.

Le binaire BSF (le fichier .jar) est directement inclut dans JMeter, mais le langage Groovy n’est pas inclut directement dans BSF, car il dispose de son propre moteur BSF. Il faut donc aller télécharger l’archive binaire de Groovy (qui est aussi un .jar) et l’ajouter dans le classpath de JMeter.

Pour cela, récupérer le fichier ZIP de Groovy à partir de cette page, puis le décompresser dans un répertoire temporaire.

Dans le répertoire groovy-1.7.8/embeddable, il y a le fichier groovy-all-1.7.8.jar. C’est lui qui va être installé dans JMeter. Il faut placer ce fichier dans le répertoire JMETER_HOME/lib/. Ensuite, Si votre JMeter est lancé, il faut le redémarrer bien entendu.

Voilà vous êtes prêts à faire du Groovy dans JMeter.

Nous allons commencer notre script Groovy avec un exemple simple, en gros, on ne va pas faire grand chose dans notre échantillon BSF, on va se concentrer sur l’interfaçage entre JMeter ‘inside’ et le script BSF.

Donc dans notre script Groovy/JMeter, on a un échantillon BSF. On choisit le langage « groovy » dans la liste des langages de script.

Dans l’échantillon BSF, une zone est consacrée au script à exécuter, où il est possible d’accéder à des variables ‘internes’ de JMeter.

Ces variables ‘internes’ correspondent à des objets Java qui sont manipulés dans le cadre (ici) d’un échantillon traditionnel de JMeter.

Voici une petite description de ces variables :

  • log – le Logger de JMeter (commons-logging)
  • Label – le libellé de l’échantillon, genre : OUT.println(Label);
  • FileName – le nom du fichier script s’il existe
  • Parameters – le texte du champ Paramètres
  • args – les paramètres sous forme de liste (i.e. pour les paramètres « toto titi tata », et le script Groovy « args.each { println it } », on a « titi <retour à la ligne> toto <retour à la ligne> tata <retour à ligne> »
  • SampleResult – la référence vers l’objet correspondant aux données de réponse de l’élément courant (voir ci-dessous)
  • ctx – JMeterContext : le contexte de JMeter
  • vars – JMeterVariables – accès aux variables de JMeter. i.e. vars.get(« VAR1 »); vars.put(« VAR2″, »value »); vars.remove(« VAR3 »); vars.putObject(« OBJ1 »,new Object());
  • props – JMeter Properties – accès aux propriétés de JMeter. i.e. props.get(« START.HMS »); props.put(« PROP1″, »1234 »);
  • OUT – System.out : Sortie standard – i.e. OUT.println(« message »)

Bon, maintenant, passons à un script d’exemple :

// Récupération d'un variable JMeter
//def myVar = vars.get("MA_VARIABLE")
// Mon premier parametre
def monPremier = args[0]
// Récupération de l'objet correspondant au résultat de cet échantillon
def sr = SampleResult
// Définition des données de requête (onglet Requête dans Arbre de résultat)
sr.setSamplerData("Voici la requete !")

// Egalement, on change le statut de la réponse à SUCCES
sr.setSuccessful(true)
sr.setResponseCode("200")
sr.setResponseMessage("OK")
// Ici on profite de la sortie standard, pour afficher quelques messages
OUT.println(Label)
// OUT n'est pas obligatoire
println "Les arguments sont : "
args.each { println it }

// Définition des données de réponse (onglet Données de réponse dans l'Arbre de résultat)
def maResponse = "\n\nVoici la reponse ! et le premier argurment est " + monPremier
sr.setResponseData(maResponse)

La capture de l’échantillon BSF de test :

On passe à l’exécution, voici les résultats à travers l’Arbre de résultats :

Onglet Résultat de l’échantillon :

Onglet Requête :

Onglet Données de réponses :

Sur la sortie standard, on a :

Echantillon BSF
Les arguments sont :
toto
titi
tata

Et voilà pour notre premier petit script Groovy fonctionne dans notre JMeter.

Plus d’info sur le langage Groovy, c’est ici

Dans un prochain billet, on fera quelque chose de plus costaud avec le Groovy.

./

Flattr this!

Un commentaire

  1. […] que nous avons vu comment faire des scripts Groovy dans JMeter, utilisons Groovy pour faire des requêtes HTTP parallèles avec […]