Jmeter 5.3 & InfluxDB..... Backend Listener en non gui

125 views
Skip to first unread message

Jean-Marie Markowski

unread,
Mar 10, 2021, 4:41:05 PM3/10/21
to JMeter en français
Bonjour à tous,
Je reviens vers vous avec un nouveau problème dans le Backend Listener.
En effet, je souhaite utiliser une propriété pour le paramètre measurement

Capture2.PNG
En mode gui tout ce passe très bien.
En mode non gui,  rien !    pas de data dans la DB
Une erreur surviens :
2021-03-10 21:59:52,024 ERROR o.a.j.v.b.i.HttpMetricsSender: Error writing metrics to influxDB Url: http://localhost:8086/write?db=jmeter, responseCode: 400, responseBody: {"error":"partial write: unable to parse ',application=ACHAT,transaction=internal minAT=0,maxAT=0,meanAT=0,startedT=0,endedT=0 1615409991793000000': missing measurement dropped=0"}

Auriez-vous un idée ?

Je vous joins un petit scénario qui montre très bien ce qui se passe.

D'avance je vous remercie pour votre aide.


InfluxDB.jmx

Philippe Mouawad

unread,
Mar 10, 2021, 4:53:09 PM3/10/21
to JMeter en français
Bonjour,
Comment lancez-vous le test en mode NON GUI ?

Merci

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "JMeter en français".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse jmeter-fr+...@googlegroups.com.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msgid/jmeter-fr/34274055-1fd4-4594-a32f-80e0db0d9aafn%40googlegroups.com.


--
Cordialement.
Philippe Mouawad.


Jean-Marie Markowski

unread,
Mar 11, 2021, 6:26:04 AM3/11/21
to jmet...@googlegroups.com
Bonjour Mr Mouawad,
Je lance le scénario simplement 

jmeter -n -t InfluxDB.jmx



Vous recevez ce message, car vous êtes abonné à un sujet dans le groupe Google Groupes "JMeter en français".
Pour vous désabonner de ce sujet, visitez le site https://groups.google.com/d/topic/jmeter-fr/wcZdNHM-daI/unsubscribe.
Pour vous désabonner de ce groupe et de tous ses sujets, envoyez un e-mail à l'adresse jmeter-fr+...@googlegroups.com.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msgid/jmeter-fr/CAH9fUpbKgf-JSNxdjzffYhNbuKuRvSZ6BYRM5ozLzrLJMsV9Hw%40mail.gmail.com.

Jean-Marie Markowski

unread,
Mar 11, 2021, 4:33:20 PM3/11/21
to JMeter en français
Bonsoir à tous,
Je reviens vers vous avec des info.
J'ai exécuté le même test avec les versions suivantes de JMeter : 5.2 - 5.3 - 5.4 - 5.4.1 - 5.5 
Elles ont toutes le même problème lié au paramètre measurement  qui n'accepte pas une valeur sous forme de variable ou propriété l'on exécute en mode non gui.
Toutefois, j'ai constaté que l'erreur apparait aussi lorsqu'on lance le scénario une première fois en mode gui.
Une exécution supplémentaire ne fait pas apparaitre d'erreur.

Les autre paramètre de ce backend listener accepte des variables ou propriétés.

Merci d'avance pour toute l'aide que vous apporterez

Philippe Mouawad

unread,
Mar 11, 2021, 4:59:20 PM3/11/21
to JMeter en français
Bonjour,
measurement étant égal à ${__P(Site,)} ,
est-ce que  Site (avec la bonne casse) est  défini dans user.properties, s'il est vide, est-ce que ça n'est pas le pb ?
Avez-vous testé le passage en ligne de commande:
jmeter -JSite=jmeter -n -t InfluxDB.jmx


Cordialement



--
Cordialement.
Philippe Mouawad.


Jean-Marie Markowski

unread,
Mar 12, 2021, 4:32:24 PM3/12/21
to JMeter en français
Bonsoir,
Je pense qu'il y a de ma part un manque de précision, concernant la propriété Site.
En effet, le scénario en question va servir dans le cadre d'un monitoring d'application à partir de différents site (ou région)
Afin d'éviter de créer plusieurs versions d'un même scénario, j'ai penser à utiliser des paramètres.
Tout d'abord, j'utilise dans le scénario l'adresse IP :
  Site.Computer   ${__groovy('${__machineIP()}'.replaceAll(/\d+\.(\d+)\.\d+\.\d+/\,/$1/),)}
En suite, dans un "setUp Thread Group", je créé la propriété Site.Name et j'identifie la région à partir du second segment de l'adresse IP.

Cette propriété sera utilisée comme valeur du paramètre measurement du Backend Listener.

Capture.PNG

Compte tenu de la situation, j'ai ajouter quelques propriétés dans le ficher user.properties
 
Capture.PNG

l'exécution simple en non gui fonctionne : jmeter -n -t InfluxDB.jmx
Tous les paramètres acceptent soit des constantes, des variables ou de propriétés à l'exception du paramètres measurement.
Seul les constantes sont acceptées, Exemple : measurement = jmeter.

On a l'impression que ce paramètre n'est programmé dans JMeter comme les autres.

En conclusion, il n'est pas possible d'enregistrer la propriété Site.Name dans user.properties étant donné que cette dernière est calculée dynamiquement.

D'avance merci pour toute l'aide.
InfluxDB.jmx

Jean-Marie Markowski

unread,
Mar 13, 2021, 9:49:59 AM3/13/21
to JMeter en français
Bonjour à tous,

Je viens de faire un test en mettant la propriété dans le fichier user.properties.
Le problème c'est qu'il faudra dans ce cas gérer +/- 20 fichers user.properties .

Philippe Mouawad

unread,
Mar 13, 2021, 10:26:14 AM3/13/21
to JMeter en français
Bonjour,
Le paramètre n'a rien  de spécial, il est géré de la même façon.
Le problème vient de la façon dout vous calculez Site.Name, sa valeur n'est calculée qu'une fois que le listener a déjà été initialisé.
Le listener est initialisé au début du test, il lit donc Site.Name alors qu'il n'a pas encore été calculé.

Plutôt que de créer 20 fichiers, vous pouvez calculer la valeur dans un shell et la passer en ligne de commande avec:
-JSite.Name=${votre valeur calculée}

Cordialement

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "JMeter en français".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse jmeter-fr+...@googlegroups.com.


--
Cordialement.
Philippe Mouawad.


Vincent Daburon

unread,
Mar 15, 2021, 4:36:06 AM3/15/21
to JMeter en français
Bonjour,
Quand on doit passer de nombreux paramètres de configuration propre au script et à son environnement, je n'utilise pas le fichier user.properties, je n'utilise pas non plus le passage de properties avec -Jma_prop=valeur_prop.

Je déclare les properties dans un fichier dédié, puis le lance en JMeter en GUI de cette façon
jmeter.bat -t monscript.jmx -q monfichier.properties

et pour un tir en mode Command Line :
jmeter.bat -n -t monscript.jmx -q monfichier.properties

Pour un tir avec un JMeter master et des injecteurs JMeter, il faut lancer avec :
jmeter.bat -n -t monscript.jmx -Gmonfichier.properties

-q, --addprop <argument> additional JMeter property file(s)

-G, --globalproperty <argument>=<value> Define Global properties (sent to servers) e.g. -Gport=123 or -Gglobal.properties

Je ferai aussi un test en plaçant ton calcul Site.name au plus niveau de script c'est à dire dans le TestPlan.

Cordialement
Vincent DAB.

Jean-Marie Markowski

unread,
Mar 18, 2021, 8:33:53 AM3/18/21
to JMeter en français
Bonjour à tous,

Avant tous, je tenais à vous remercier pour vos aides qui m'ont fortement été utile.
J'ai tenu compte de toutes vos remarques et je suis parvenu à une solution.
Voici les étapes :
1. Pour info, le même scénario doit fonctionner sur différent site : (Exemple : PARIS - BORDEAU - LIMOGES - ROUBAIX)
2. Chaque site peut être identifier grasse au second segment de l'adresse IP : (Exemple : XXX.180.XXX.XXX = PARIS)
3. Il y a envoi des résultats vers un InfluxDB qui est centralisé sur un serveur (Windows server 2016)

Dans le scénario, j'utilise une variable qui récoltera l'adresse IP du PC où se trouve le scénario :
Site.IP = ${__groovy('${__machineIP()}'.replaceAll(/\d+\.(\d+)\.\d+\.\d+/\,/$1/),)}
Donc dans notre exemple : Site.IP=180

Capture3.PNG

Ensuite je créé une liste de variables
Capture2.PNG

Au niveau du Backend Listener, pour le paramètre measurement, je récupère la valeur PARIS comme suit :
${__groovy(vars[vars['Site.IP']],)}

Capture4.PNG

Ce qui permet d'avoir comme valeur de measurement = PARIS
En ce qui concerne les autres paramètres ils seront stocké dans user.properties ce fichier sera embarqué dans mon bundle (privé :))

L'architecture complète se décrit comme suit :
1.  Les scénarii se trouvent dans un GIT
2.  Ils sont appelés par un plateforme SERVER JENKINS
3.  Dans le server JENKINS il a un job par application qui va exécuter le scénario sur chaque site où il y a un JENKINS - SLAVE.
4.  Tous JMeter des slaves vont retourner les info sur l'influxDB du server JENKINS

Tout cela fonctionne correctement, sauf le problème de measurement dont vous m'avez aider à trouver la solution

Merci à vous tous pour vos aides.

Bonne journée.
 

Jean-Marie Markowski

unread,
Mar 18, 2021, 8:34:13 AM3/18/21
to JMeter en français

Vincent Daburon

unread,
Mar 23, 2021, 4:19:02 AM3/23/21
to JMeter en français
Bonjour,

Pour différencier les machines d'injection , j'utilise une variable d'environnement utilisateur propre à la machine (le compte avec lequel JMeter est lancé)
Ex :
1er machine maitre :
TYPE_MACHINE=MASTER
IS_MASTER=1

2eme machine injecteur1
TYPE_MACHINE=INJ1
IS_MASTER=0

3eme machine
TYPE_MACHINE=INJ2
IS_MASTER=0

4eme machine
TYPE_MACHINE=INJ3
IS_MASTER=0

J'utilise ces valeurs avec la fonction
env pour récupérer les valeurs d'environnement.

${__env(ENV_VAR, someVariable, defaultValue)}

Par exemple avec l'utilisation du Http Simple Table Serveur (STS)
Uniquement le maitre en standalone (sans les injecteurs) ou bien INJ1 font le chargement initial des fichiers csv dans le mémoire du STS.
Les autres injecteurs attendent quelques secondes durant le chargement initial (/sts/INIT) des fichiers.

L'avantage des variables d'environnement est de mettre des valeurs assez neutres et génériques dans le script (pas de nom de machine ou @IP) et cette partie avec les tests de valeurs des variables de l'environnement peut être reprise dans d'autres scripts sur d'autres projets assez facilement.

Dans ton cas, tu peux avoir des injecteurs avec comme variable d'environnement
injecteur à Paris
SITE=PARIS

injecteur à Limoge
SITE=LIMOGE
...

Cordialement
Vincent DAB.

Jean-Marie Markowski

unread,
Mar 23, 2021, 5:56:55 AM3/23/21
to JMeter en français
Bonjour Vincent,

Merci pour l'idée d'utiliser les variables d'environnement, cela  me plait beaucoup, je trouve cet aspect très intéressant et je vais l'utiliser pour un des projet en cours.
En ce qui concerne mon cas ce n'est pas un load test. Il s'agit d'exécuter les scénarii à partir des régions afin que les temps de réponse sont acceptables ente elles.

Dans le listener j'ai améliorer le calcul de la variable measurement
measurement : ${__groovy(vars[InetAddress.getLocalHost().getHostAddress().replaceAll(/\d+\.(\d+)\.\d+\.\d+/\,/$1/)],)}

et j'ajoute un User variables
Capture6.PNG

Le tour est joué

Reply all
Reply to author
Forward
0 new messages