JMeter : Exemple de script BeanShell pour enregistrer des données dans un fichier

Un petit billet dans un but pédagogique, pour montrer un exemple de script BeanShell pour enregistrer des données dans un fichier texte.

Soit le plan de test suivant :

Dans ce plan de test, on extrait avec l’extracteur d’expressions régulières des données de la page reçue, (ici un NOMBRE).

On ajoute ‘au passage’ une assertion de réponse qui est là pour s’assurer que l’expression regexp a réussie (on vérifier si on (re)trouve le NOMBRE précédemment cherché dans la page).

Et pour finir, on a un élément post-processeur BeanShell qui exécuter un bout de code Java pour faire l’enregistrement de la variable NOMBRE dans un fichier.

Le code du BeanShell (du Java donc) est le suivant :

if (prev.isSuccessful()) {
    String nombre = vars.get("NOMBRE");
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter("/tmp/nombre.csv",true));
        out.write(nombre +"\n");
        out.close();
    } catch (IOException e) {}
}

Quelques commentaires :

  • Le test sur le prev.isSuccessful() afin d’enregistrer seulement les échantillons réussis,
  • Le vars.get(« NOMBRE »); pour récupérer dans une variable Java le contenu de la varialbe JMeter NOMBRE,
  • Le reste pour écrire dans un fichier.

Et voilà.

Pré-requis : pour exécuter des scripts BeanShell avec JMeter, il faut récupérer le fichier JAR du BeanShell, et le déposer dans le répertoire jmeter_home/lib (ou dans le classpath)

Nota : JMeter propose d’une part la possibilité d’enregistrer directement dans le fichier CSV ou JTL de résultats (via la fonctionnalités des « samples_variables »), et d’autre part d’enregistrer l’ensemble des données de réponses (via le récepteur « Sauvegarder les réponses vers un fichier »), cependant, il est parfois intéressant de pouvoir récupérer quelques variables durant un test JMeter, faire des opérations dessus et/ou créer un fichier de données pré-formaté à la volée.

./

Flattr this!

4 commentaires

  1. Eudes dit :

    Une astuce en plus : le FileWriter créera un fichier s’il est manquant et le complétera s’il est présent.
    De fait à chaque itération le fichier peut ‘grossir’ (à moins d’effacer à la main le fichier avant chaque exécution).
    L’ajout (en tete du testcase) d’un controlleur ‘Once Only’ + un sampler BeanShell avec ce code :
    «  » »
    file = new File(vars.get(« nombre.csv »));
    file.delete();
    «  » »
    permet d’etre un gros fénéant et d’avoir un fichier ‘nombre.csv’ issu du dernier test 😉

  2. Milamber dit :

    Merci pour cette astuce, j’ai l’idée d’être fainéant, l’ordinateur est là pour bosser, pour moi aussi 😉

  3. goeland dit :

    Post très intéressant.

    J’ai un soucis avec le code prev.isSuccessful()
    Même si l’assertion ne trouve pas l’expression régulière, le code prev.isSuccessful() me renvoie toujours vrai

    De quoi ça peut venir ?

  4. Milamber dit :

    Bonjour,
    Le prev.isSuccessful() n’est pas pour vérifier si l’expression régulière fonctionne ou non, il est là pour tester que la requête HTTP s’est bien déroulé.

    Si tu veux aussi contrôler que la regexp a fonctionné, il faut vérifier la variable nombre (différent de null et de « ERREUR PAS TROUVE »
    A+