Générer une source de données CSV au lancement d’un test JMeter

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.

 


Tags:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*


9 − = quatre

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© Thibault Duchateau
CyberChimps fièrement adapté par Thibault Duchateau