Un petit article pour montrer qu’il est possible de générer une source de données avant le lancement d’un test JMeter. Pour cela, il va falloir vous armer de la dernière version actuelle de JMeter, la 2.5.1. Télécharger la dernière version.
Si les requêtes JDBC ne vous suffisent pas et que vous avez absolument besoin de passer par une source de données CSV, il est possible de la générer dynamiquement avant le début du test.
Pour les impatients, l’astuce est de passer par un groupe d’unités de début dans lequel on ajoutera un échantillon BeanShell. L’échantillon, qui ne sera bien exécuté qu’une et une seule fois pendant tout le test, contiendra le code Java permettant la génération du fichier CSV.
Pour les autres, voici comment faire, pas à pas.
Mise en place du test
Une fois JMeter démarré, cliquez-droit sur Plan de test puis Ajouter > Moteurs d’utilisateur > Groupe d’unités de début
Cliquez-droit sur Groupe d’unités de début puis Ajouter > Echantillons > Echantillon BeanShell
Faites attention de configurer le groupe d’unité de début avec uniquement un seul utilisateur.
Dans l’exemple, j’avais besoin de me connecter à la base de données du client. J’aurais pu passer par des requêtes JDBC (intégrées directement dans JMeter) mais j’avais besoin d’effectuer un traitement spécifique sur les résultats de la requête. Je suis donc passé par du code Java.
Le code se connecte à la base, génère le contenu du fichier CSV dans un StringBuffer puis crée le fichier CSV via un FileOutputStream.
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
FileOutputStream vFlux = null;
try {
// Connexion eventuelle a une BDD
Class.forName(driver);
// Traitements
// Buffer dans lequel on construira le contenu du fichier CSV
StringBuffer vContenuCsv = new StringBuffer();
// Remplissage du buffer
// Creation du fichier (source de donnees CSV) a l'endroit indique par une propriete JMeter
File vSourceDeDonnees = new File(vars.get("SOURCE_DONNEES"));
// Declaration du flux de sortie
vFlux = new FileOutputStream(vSourceDeDonnees, false);
// Ecriture dans le flux de sortie
vFlux.write(vContenuCsv.toString().getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
vFlux.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Je vous conseille d’utiliser votre IDE favori pour coder en Java, à moins que vous connaissiez sur le bout des doigts les imports à utiliser ;).
Cliquez ensuite sur l’échantillon BeanShell puis faites un simple copié-collé du code Java dans le champ principal Script.
Attention : collez uniquement le contenu de votre fonction (main par exemple) en n’oubliant pas les imports nécessaires.
Configuration de la source de données CSV
Cliquez-droit sur Plan de test puis Ajouter > Configurations > Source de données CSV
Dans la configuration de la source de données CSV, précisez dans le champ Nom de fichier la variable que nous créerons juste après : ${SOURCE_DONNEES}
Mise en place des variables
Dans le cas présent, ma source de données étant propre à mon test, je passe par des variables pré-définies.
Pour cela, cliquez-droit sur Plan de test puis Ajouter > Configurations > Variables pré-définies
Il vous suffit alors d’ajouter une variable en cliquant sur le bouton Ajouter puis de préciser son nom (SOURCE_DONNEES) et sa valeur, ici l’emplacement du fichier CSV (C:\source_donnees.csv)
Et c’est tout !
A partir de maintenant, dès que vous lancerez votre test, le groupe d’unité de début exécutera l’échantillon BeanShell pour générer la source de données CSV. Et le test prendra en compte le fichier généré grâce aux variables pré-définies.
Attention : Je me suis fait avoir la 1ère fois, un “contrôleur d’exécution unique” n’est bien lancé qu’une fois mais une fois par thread, pas par test, d’où l’utilité de passer par un groupe d’unité de début configuré avec un seul utilisateur.
Conseils :
- Le blog de Milamber est une source d’informations très précieuse, qu’on débute avec JMeter ou pas. Allez y jeter un oeil !
- Il existe également un Google Groupe pour JMeter et en français s’il vous plaît ! N’hésitez pas à le consulter ou à vous en servir dès que vous bloquez sur un sujet particulier. Les utilisateurs, dont Milamber, sont toujours très réactifs.








