12. Introduction aux auditeurs

Un écouteur est un composant qui affiche les résultats des échantillons. Les résultats peuvent être affichés dans un arbre, des tableaux, des graphiques ou simplement écrits dans un fichier journal. Pour afficher le contenu d'une réponse d'un échantillonneur donné, ajoutez l'un des écouteurs " Afficher l'arborescence des résultats " ou " Afficher les résultats dans le tableau " à un plan de test. Pour afficher graphiquement le temps de réponse, ajoutez les résultats du graphique. La section des écouteurs de la page des composants contient des descriptions complètes de tous les écouteurs.

Différents écouteurs affichent les informations de réponse de différentes manières. Cependant, ils écrivent tous les mêmes données brutes dans le fichier de sortie - si celui-ci est spécifié.

Le bouton « Configurer » peut être utilisé pour spécifier les champs à écrire dans le fichier, et s'il faut l'écrire en CSV ou en XML. Les fichiers CSV sont beaucoup plus petits que les fichiers XML, utilisez donc CSV si vous générez beaucoup d'échantillons.

Le nom de fichier peut être spécifié à l'aide d'un chemin d'accès relatif ou absolu. Les chemins relatifs sont résolus par rapport au répertoire de travail actuel (qui est par défaut le répertoire bin/ ). JMeter supporte également les chemins relatifs au répertoire contenant le plan de test courant (fichier JMX). Si le nom du chemin commence par " ~/ " (ou tout ce qui se trouve dans la propriété JMeter jmeter.save.saveservice.base_prefix ), alors le chemin est supposé être relatif à l'emplacement du fichier JMX.

Si vous ne souhaitez enregistrer que certains échantillons, ajoutez le Listener en tant qu'enfant de l'échantillonneur. Ou vous pouvez utiliser un contrôleur simple pour regrouper un ensemble d'échantillonneurs et y ajouter l'écouteur. Le même nom de fichier peut être utilisé par plusieurs échantillonneurs - mais assurez-vous qu'ils utilisent tous la même configuration !

12.1 Configuration par défaut

Les éléments par défaut à enregistrer peuvent être définis dans le fichier jmeter.properties (ou user.properties ). Les propriétés sont utilisées comme paramètres initiaux pour la fenêtre contextuelle Listener Config et sont également utilisées pour le fichier journal spécifié par l' indicateur de ligne de commande -l (couramment utilisé pour les tests en mode CLI).

Pour changer le format par défaut, recherchez la ligne suivante dans jmeter.properties :

jmeter.save.saveservice.output_format=

Les informations à sauvegarder sont paramétrables. Pour un maximum d'informations, choisissez " xml " comme format et spécifiez " Functional Test Mode " sur l'élément Test Plan. Si cette case n'est pas cochée, les données enregistrées par défaut incluent un horodatage (le nombre de millisecondes depuis minuit, le 1er janvier 1970 UTC), le type de données, le nom du thread, l'étiquette, le temps de réponse, le message et le code, et un indicateur de réussite. Si cette case est cochée, toutes les informations, y compris les données de réponse complètes, seront enregistrées.

L'exemple suivant indique comment définir des propriétés pour obtenir un format délimité par une barre verticale (" | ") qui affichera des résultats tels que :.

timeStamp|time|label|responseCode|threadName|dataType|success|failureMessage
02/06/03 08:21:42|1187|Accueil|200|Groupe de threads-1|texte|vrai|
02/06/03 08:21:42|47|Connexion|200|Groupe de threads-1|texte|false|Échec du test :
    devrait contenir : mot de passe, etc.

Les jmeter.properties correspondants qui doivent être définis sont indiqués ci-dessous. Une bizarrerie dans cet exemple est que le output_format est défini sur csv , ce qui indique généralement des valeurs séparées par des virgules. Cependant, le default_delimiter a été défini pour être une barre verticale au lieu d'une virgule, donc la balise csv est un abus de langage dans ce cas. (Pensez à CSV comme signifiant des valeurs séparées par des caractères)

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.assertion_results_failure_message=true
jmeter.save.saveservice.default_delimiter=|

L'ensemble complet des propriétés qui affectent la sortie du fichier de résultats est présenté ci-dessous.

#-------------------------------------------------------------- --------------------------
# Configuration du fichier de résultats
#-------------------------------------------------------------- --------------------------

# Cette section permet de déterminer comment les données de résultat seront enregistrées.
# Les valeurs commentées sont les valeurs par défaut.

# valeurs légitimes : xml, csv, db. Seuls xml et csv sont actuellement pris en charge.
#jmeter.save.saveservice.output_format=csv


# true lorsque le champ doit être enregistré ; faux sinon

# assertion_results_failure_message n'affecte que la sortie CSV
#jmeter.save.saveservice.assertion_results_failure_message=true
#
# valeurs légitimes : aucune, première, toutes
#jmeter.save.saveservice.assertion_results=aucun
#
#jmeter.save.saveservice.data_type=true
#jmeter.save.saveservice.label=true
#jmeter.save.saveservice.response_code=true
# response_data n'est actuellement pas pris en charge pour la sortie CSV
#jmeter.save.saveservice.response_data=false
# Enregistrer ResponseData pour les échantillons ayant échoué
#jmeter.save.saveservice.response_data.on_error=false
#jmeter.save.saveservice.response_message=true
#jmeter.save.saveservice.successful=true
#jmeter.save.saveservice.thread_name=true
#jmeter.save.saveservice.time=true
#jmeter.save.saveservice.subresults=true
#jmeter.save.saveservice.assertions=true
#jmeter.save.saveservice.latency=true
#jmeter.save.saveservice.connect_time=true
#jmeter.save.saveservice.samplerData=false
#jmeter.save.saveservice.responseHeaders=false
#jmeter.save.saveservice.requestHeaders=false
#jmeter.save.saveservice.encoding=false
#jmeter.save.saveservice.bytes=true
#jmeter.save.saveservice.sent_bytes=true
#jmeter.save.saveservice.url=false
#jmeter.save.saveservice.filename=false
#jmeter.save.saveservice.hostname=false
#jmeter.save.saveservice.thread_counts=true
#jmeter.save.saveservice.sample_count=false
#jmeter.save.saveservice.idle_time=true

# Format d'horodatage - cela n'affecte que les fichiers de sortie CSV
# valeurs légitimes : aucune, ms ou un format adapté à SimpleDateFormat
#jmeter.save.saveservice.timestamp_format=ms
#jmeter.save.saveservice.timestamp_format=aaaa/MM/jj HH:mm:ss.SSS

# À utiliser avec des fichiers de valeurs séparées par des virgules (CSV) ou d'autres formats
# où les valeurs des champs sont séparées par des délimiteurs spécifiés.
# Défaut:
#jmeter.save.saveservice.default_delimiter=,
# Pour TAB, depuis JMeter 2.3 on peut utiliser :
#jmeter.save.saveservice.default_delimiter=\t

# S'applique uniquement aux fichiers au format CSV :
# Imprimer les noms de champs en première ligne dans CSV
#jmeter.save.saveservice.print_field_names=true

# Liste facultative de noms de variables JMeter dont les valeurs doivent être enregistrées dans les fichiers de données de résultats.
# Utilisez des virgules pour séparer les noms. Par exemple:
#sample_variables=SESSION_ID,REFERENCE
# NB L'implémentation actuelle enregistre les valeurs en XML sous forme d'attributs,
# donc les noms doivent être des noms XML valides.
# JMeter envoie la variable à tous les serveurs
# pour s'assurer que les bonnes données sont disponibles chez le client.

# Instruction de traitement XML facultative pour la ligne 2 du fichier :
#jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="sample.xsl"?>

# Préfixe utilisé pour identifier les noms de fichiers relatifs à la base actuelle
#jmeter.save.saveservice.base_prefix=~/

# AutoFlush sur chaque ligne écrite en sortie XML ou CSV
# Définir ceci sur true entraînera moins de perte de données de résultats de test en cas de crash
# mais avec un impact sur les performances, notamment pour les tests intensifs (peu ou pas de pauses)
# Depuis JMeter 2.10, c'est faux par défaut
#jmeter.save.saveservice.autoflush=false

# Mettez l'horodatage de début dans les journaux au lieu de la fin
sampleresult.timestamp.start=true

# S'il faut utiliser System.nanoTime() - sinon, utilisez uniquement System.currentTimeMillis()
#sampleresult.useNanoTime=true

# Utilisez un fil d'arrière-plan pour calculer le décalage nanoTime
# Réglez-le sur ≤ 0 pour désactiver le fil d'arrière-plan
#sampleresult.nanoThreadSleep=5000

Le format de date à utiliser pour le timestamp_format est décrit dans SimpleDateFormat . Le format d'horodatage est utilisé à la fois pour l'écriture et la lecture de fichiers. Si le format est défini sur " ms " et que la colonne n'est pas analysée comme un entier long, JMeter (2.9+) essaiera les formats suivants :

  • aaaa/MM/jj HH:mm:ss.SSS
  • aaaa/MM/jj HH:mm:ss
  • aaaa-MM-jj HH:mm:ss.SSS
  • aaaa-MM-jj HH:mm:ss
  • MM/jj/aa HH:mm:ss (c'est pour la compatibilité avec les versions précédentes ; ce format n'est pas recommandé)
L'appariement est désormais également strict (non indulgent). JMeter 2.8 et les versions antérieures utilisaient le mode indulgent qui pouvait entraîner des horodatages avec des dates incorrectes (les heures étaient généralement correctes).

12.1.1 Exemples de variables

JMeter prend en charge la propriété sample_variables pour définir une liste de variables JMeter supplémentaires qui doivent être enregistrées avec chaque échantillon dans les fichiers JTL. Les valeurs sont écrites dans des fichiers CSV en tant que colonnes supplémentaires et en tant qu'attributs supplémentaires dans les fichiers XML. Voir ci-dessus pour un exemple.

12.1.2 Exemple de configuration de sauvegarde des résultats

Les écouteurs peuvent être configurés pour enregistrer différents éléments dans les fichiers journaux de résultats (JTL) à l'aide de la fenêtre contextuelle Config, comme indiqué ci-dessous. Les valeurs par défaut sont définies comme décrit dans la section Configuration par défaut de l'écouteur ci-dessus. Les éléments avec (CSV) après le nom s'appliquent uniquement au format CSV ; les éléments avec (XML) s'appliquent uniquement au format XML. Le format CSV ne peut actuellement pas être utilisé pour enregistrer des éléments qui incluent des sauts de ligne.


Boîte de dialogue de configuration

Notez que les cookies, la méthode et la chaîne de requête sont enregistrés dans le cadre de l' option " Sampler Data ".

12.2 Tests en mode CLI (par lots)

Lors de l'exécution en mode CLI, l' indicateur -l peut être utilisé pour créer un écouteur de niveau supérieur pour l'exécution du test. Cela s'ajoute à tous les auditeurs définis dans le plan de test. La configuration de cet écouteur est contrôlée par des entrées dans le fichier jmeter.properties comme décrit dans la section précédente.

Cette fonctionnalité peut être utilisée pour spécifier des données et des fichiers journaux différents pour chaque exécution de test, par exemple :

jmeter -n -t testplan.jmx -l testplan_01.jtl -j testplan_01.log
jmeter -n -t testplan.jmx -l testplan_02.jtl -j testplan_02.log

Notez que les messages de journalisation JMeter sont écrits dans le fichier jmeter.log par défaut. Ce fichier est recréé à chaque fois, donc si vous souhaitez conserver les fichiers journaux pour chaque exécution, vous devrez le renommer en utilisant l' option -j comme ci-dessus.

JMeter prend en charge les variables dans le nom du fichier journal. Si le nom de fichier contient des guillemets simples appariés, le nom est traité comme un format SimpleDateFormat appliqué à la date actuelle, par exemple : log_file='jmeter_'yyyyMMddHHmmss'.tmp' . Cela peut être utilisé pour générer un nom unique pour chaque exécution de test.

12.3 Utilisation des ressources

Les auditeurs peuvent utiliser beaucoup de mémoire s'il y a beaucoup d'échantillons.

La plupart des auditeurs conservent actuellement une copie de chaque échantillon qu'ils affichent, à l'exception de :

  • Rédacteur de données simple
  • Écouteur BeanShell/JSR223
  • Visualiseur de courrier
  • Surveiller les résultats
  • Rapport sommaire

Les auditeurs suivants n'ont plus besoin de conserver des copies de chaque échantillon. Au lieu de cela, les échantillons avec le même temps écoulé sont agrégés. Moins de mémoire est maintenant nécessaire, surtout si la plupart des échantillons ne prennent qu'une seconde ou deux au maximum.

  • Rapport agrégé
  • Graphique agrégé

Pour minimiser la quantité de mémoire nécessaire, utilisez Simple Data Writer et utilisez le format CSV.

12.4 Format du journal CSV

Le format du journal CSV dépend des éléments de données sélectionnés dans la configuration. Seuls les éléments de données spécifiés sont enregistrés dans le fichier. L'ordre d'apparition des colonnes est fixe, et est le suivant :

  • timeStamp - en millisecondes depuis le 1/1/1970
  • écoulé - en millisecondes
  • étiquette - étiquette de l'échantillonneur
  • responseCode - par exemple 200 , 404
  • responseMessage - par exemple OK
  • threadName
  • dataType - par exemple texte
  • succès - vrai ou faux
  • message d' échec - le cas échéant
  • bytes - nombre d'octets dans l'échantillon
  • sentBytes - nombre d'octets envoyés pour l'échantillon
  • grpThreads - nombre de threads actifs dans ce groupe de threads
  • allThreads - nombre total de threads actifs dans tous les groupes
  • URL
  • Nom de fichier - si Enregistrer la réponse dans le fichier a été utilisé
  • latence - temps de première réponse
  • connect - temps d'établissement de la connexion
  • codage
  • SampleCount - nombre d'échantillons (1, sauf si plusieurs échantillons sont agrégés)
  • ErrorCount - nombre d'erreurs (0 ou 1, sauf si plusieurs échantillons sont agrégés)
  • Nom d' hôte - où l'échantillon a été généré
  • IdleTime - nombre de millisecondes de temps 'Idle' (normalement 0)
  • Variables , si spécifié

12.5 Format de journal XML 2.1

Le format du XML mis à jour (2.1) est le suivant (les sauts de ligne seront différents) :

<?xml version="1.0" encoding="UTF-8" ?>
<testResults version="1.2">

-- Échantillon HTTP, avec des échantillons imbriqués

<httpSample t="1392" lt="351" ts="1144371014619" s="true"
     lb="Requête HTTP" rc="200" rm="OK"
     tn="Écouter 1-1" dt="texte" de="iso-8859-1" by="12407">
  <httpSample t="170" lt="170" ts="1144371015471" s="true"
        lb="http://www.apache.org/style/style.css" rc="200" rm="OK"
        tn="Écouter 1-1" dt="texte" de="ISO-8859-1" by="1002">
    <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Date : ven. 07 avril 2006 00:50:14 GMT
⋮
Type de contenu : texte/css
</responseHeader>
    <requestHeader class="java.lang.String">MonEntête : MaValeur</requestHeader>
    <responseData class="java.lang.String">corps, td, th {
    taille de police : 95 % ;
    famille de polices : Arial, Genève, Helvetica, sans empattement ;
    la couleur noire;
    couleur de fond : blanc ;
}
⋮
</responseData>
    <cookies class="java.lang.String"></cookies>
    <method class="java.lang.String">GET</method>
    <queryString class="java.lang.String"></queryString>
    <url>http://www.apache.org/style/style.css</url>
  </httpSample>
  <httpSample t="200" lt="180" ts="1144371015641" s="true"
     lb="http://www.apache.org/images/asf_logo_wide.gif"
     rc="200" rm="OK" tn="Écouter 1-1" dt="bin" de="ISO-8859-1" by="5866">
    <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Date : ven. 07 avril 2006 00:50:14 GMT
⋮
Type de contenu : image/gif
</responseHeader>
    <requestHeader class="java.lang.String">MonEntête : MaValeur</requestHeader>
    <responseData class="java.lang.String">http://www.apache.org/asf.gif</responseData>
      <responseFile class="java.lang.String">Mixed1.html</responseFile>
    <cookies class="java.lang.String"></cookies>
    <method class="java.lang.String">GET</method>
    <queryString class="java.lang.String"></queryString>
    <url>http://www.apache.org/asf.gif</url>
  </httpSample>
  <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Date : ven. 07 avril 2006 00:50:13 GMT
⋮
Type de contenu : text/html ; jeu de caractères=ISO-8859-1
</responseHeader>
  <requestHeader class="java.lang.String">MonEntête : MaValeur</requestHeader>
  <responseData class="java.lang.String"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
⋮
<html>
 <tête>
⋮
 </tête>
 <corps>
⋮
 </body>
</html>
</responseData>
  <cookies class="java.lang.String"></cookies>
  <method class="java.lang.String">GET</method>
  <queryString class="java.lang.String"></queryString>
  <url>http://www.apache.org/</url>
</httpSample>

-- Exemple non HTTP

<sample t="0" lt="0" ts="1144372616082" s="true" lb="Exemple d'échantillonneur"
    rc="200" rm="OK" tn="Écouter 1-1" dt="text" de="ISO-8859-1" by="10">
  <responseHeader class="java.lang.String"></responseHeader>
  <requestHeader class="java.lang.String"></requestHeader>
  <responseData class="java.lang.String">Écouter 1-1</responseData>
  <responseFile class="java.lang.String">Mixed2.unknown</responseFile>
  <samplerData class="java.lang.String">sssss</samplerData>
</exemple>

</testResults>

Notez que l'exemple de nom de nœud peut être " sample " ou " httpSample ".

12.6 Format de journal XML 2.2

Le format des fichiers JTL est identique pour 2.2 et 2.1. Le format 2.2 n'affecte que les fichiers JMX.

12.7 Exemples d'attributs

Les exemples d'attributs ont la signification suivante :

AttributContenu
parOctets
sbyOctets envoyés
deEncodage des données
dtType de données
ceNombre d'erreurs (0 ou 1, sauf si plusieurs échantillons sont agrégés)
hnNom d'hôte où l'échantillon a été généré
ceIdle Time = temps non passé à l'échantillonnage (millisecondes) (généralement 0)
kgÉtiquette
çaLatence = temps de réponse initiale (millisecondes) - tous les échantillonneurs ne le prennent pas en charge
ctConnect Time = temps pour établir la connexion (millisecondes) - tous les échantillonneurs ne le supportent pas
n / ANombre de threads actifs pour tous les groupes de threads
ngNombre de threads actifs dans ce groupe
rcCode de réponse (par exemple 200 )
rmMessage de réponse (par exemple OK )
sDrapeau de réussite ( vrai / faux )
scNombre d'échantillons (1, sauf si plusieurs échantillons sont agrégés)
tTemps écoulé (millisecondes)
tnNom du fil
tstimeStamp (millisecondes depuis minuit le 1er janvier 1970 UTC)
nom de la variableValeur de la variable nommée
JMeter permet d'enregistrer des variables supplémentaires avec le plan de test. Actuellement, les variables sont enregistrées en tant qu'attributs supplémentaires. Le nom de la variable testplan est utilisé comme nom d'attribut. Voir Exemples de variables (ci-dessus) pour plus d'informations.

12.8 Sauvegarde des données de réponse

Comme indiqué ci-dessus, les données de réponse peuvent être enregistrées dans le fichier journal XML si nécessaire. Cependant, cela peut rendre le fichier assez volumineux et le texte doit être encodé pour qu'il soit toujours valide en XML. De plus, les images ne peuvent pas être incluses. Seuls les exemples de réponses de type TEXTE peuvent être enregistrés.
Une autre solution consiste à utiliser le post-processeur Save_Responses_to_a_file . Cela génère un nouveau fichier pour chaque échantillon et enregistre le nom du fichier avec l'échantillon. Le nom du fichier peut ensuite être inclus dans l'exemple de sortie du journal. Les données seront extraites du fichier si nécessaire lors du rechargement de l'exemple de fichier journal.

12.9 Chargement (lecture) des données de réponse

Pour visualiser un fichier de résultats existant, vous pouvez utiliser le bouton Fichier « Parcourir… » pour sélectionner un fichier. Si nécessaire, créez simplement un plan de test factice avec l'écouteur approprié.

Les résultats peuvent être lus à partir de fichiers au format XML ou CSV. Lors de la lecture de fichiers de résultats CSV, l'en-tête (s'il est présent) est utilisé pour déterminer quels champs ont été enregistrés. Afin d'interpréter correctement un fichier CSV sans en-tête, les propriétés JMeter appropriées doivent être définies.

JMeter n'efface aucune donnée actuelle avant de charger le nouveau fichier, permettant ainsi la fusion des fichiers. Si vous souhaitez effacer les données actuelles, utilisez l'élément de menu : Exécuter  →  Effacer ( Ctrl  +  Maj  +  E ) ou Exécuter  →  Effacer tout ( Ctrl  +  E ) avant de charger le fichier.

12.10 Enregistrement des données de l'interface graphique de l'écouteur

JMeter est capable d'enregistrer n'importe quel écouteur sous forme de fichier PNG. Pour ce faire, sélectionnez l'écouteur dans le panneau de gauche. Cliquez sur Modifier  →  Enregistrer le nœud en tant qu'image . Une boîte de dialogue de fichier apparaîtra. Entrez le nom souhaité et enregistrez l'écouteur.

Les écouteurs qui génèrent une sortie sous forme de tableaux peuvent également être enregistrés à l'aide d'un copier/coller. Sélectionnez les cellules souhaitées dans le tableau et utilisez le raccourci OS Copy (normalement Ctrl  +  C ). Les données seront enregistrées dans le presse-papiers, d'où elles pourront être collées dans une autre application, par exemple un tableur ou un éditeur de texte.

Figure 1 -
Figure 1 - Modifier  →  Enregistrer le nœud en tant qu'image
Go to top