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.
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é)
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.
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 ¶
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 :
Attribut | Contenu |
---|---|
par | Octets |
sby | Octets envoyés |
de | Encodage des données |
dt | Type de données |
ce | Nombre d'erreurs (0 ou 1, sauf si plusieurs échantillons sont agrégés) |
hn | Nom d'hôte où l'échantillon a été généré |
ce | Idle Time = temps non passé à l'échantillonnage (millisecondes) (généralement 0) |
kg | Étiquette |
ça | Latence = temps de réponse initiale (millisecondes) - tous les échantillonneurs ne le prennent pas en charge |
ct | Connect Time = temps pour établir la connexion (millisecondes) - tous les échantillonneurs ne le supportent pas |
n / A | Nombre de threads actifs pour tous les groupes de threads |
ng | Nombre de threads actifs dans ce groupe |
rc | Code de réponse (par exemple 200 ) |
rm | Message de réponse (par exemple OK ) |
s | Drapeau de réussite ( vrai / faux ) |
sc | Nombre d'échantillons (1, sauf si plusieurs échantillons sont agrégés) |
t | Temps écoulé (millisecondes) |
tn | Nom du fil |
ts | timeStamp (millisecondes depuis minuit le 1er janvier 1970 UTC) |
nom de la variable | Valeur de la variable nommée |
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.
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
. 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.