12. Introducción a los oyentes

Un oyente es un componente que muestra los resultados de las muestras. Los resultados pueden mostrarse en un árbol, tablas, gráficos o simplemente escribirse en un archivo de registro. Para ver el contenido de una respuesta de cualquier muestra dada, agregue cualquiera de los oyentes " Ver árbol de resultados " o " Ver resultados en la tabla " a un plan de prueba. Para ver el tiempo de respuesta gráficamente, agregue los resultados del gráfico. La sección de oyentes de la página de componentes tiene descripciones completas de todos los oyentes.

Diferentes oyentes muestran la información de respuesta de diferentes maneras. Sin embargo, todos escriben los mismos datos sin procesar en el archivo de salida, si se especifica uno.

El botón " Configurar " se puede usar para especificar qué campos escribir en el archivo y si escribirlo como CSV o XML. Los archivos CSV son mucho más pequeños que los archivos XML, así que use CSV si está generando muchas muestras.

El nombre del archivo se puede especificar utilizando un nombre de ruta relativo o absoluto. Las rutas relativas se resuelven en relación con el directorio de trabajo actual (que por defecto es el directorio bin/ ). JMeter también admite rutas relativas al directorio que contiene el plan de prueba actual (archivo JMX). Si el nombre de la ruta comienza con " ~/ " (o lo que sea que esté en la propiedad jmeter.save.saveservice.base_prefix JMeter), se supone que la ruta es relativa a la ubicación del archivo JMX.

Si solo desea grabar ciertas muestras, agregue el Listener como elemento secundario de la muestra. O puede usar un controlador simple para agrupar un conjunto de muestras y agregar el oyente a eso. Múltiples samplers pueden usar el mismo nombre de archivo, ¡pero asegúrese de que todos usen la misma configuración!

12.1 Configuración por defecto

Los elementos predeterminados que se guardarán se pueden definir en el archivo jmeter.properties (o user.properties ). Las propiedades se utilizan como configuración inicial para la ventana emergente de configuración de escucha y también se utilizan para el archivo de registro especificado por el indicador de línea de comandos -l (comúnmente utilizado para ejecuciones de prueba en modo CLI).

Para cambiar el formato predeterminado, busque la siguiente línea en jmeter.properties :

jmeter.save.saveservice.output_format=

La información a guardar es configurable. Para obtener la máxima información, elija " xml " como formato y especifique " Modo de prueba funcional " en el elemento Plan de prueba. Si esta casilla no está marcada, los datos guardados predeterminados incluyen una marca de tiempo (la cantidad de milisegundos desde la medianoche del 1 de enero de 1970 UTC), el tipo de datos, el nombre del hilo, la etiqueta, el tiempo de respuesta, el mensaje y el código. y un indicador de éxito. Si está marcada, se registrará toda la información, incluidos los datos de respuesta completos.

El siguiente ejemplo indica cómo establecer propiedades para obtener un formato delimitado por una barra vertical (" | ") que generará resultados como:.

marca de tiempo|hora|etiqueta|código de respuesta|nombre de subproceso|tipo de datos|éxito|mensaje de error
06/02/03 08:21:42|1187|Inicio|200|Grupo de subprocesos-1|texto|verdadero|
06/02/03 08:21:42|47|Iniciar sesión|200|Grupo de subprocesos-1|texto|falso|Falló la prueba:
    se espera que contenga: contraseña, etc.

Las propiedades jmeter.properties correspondientes que deben configurarse se muestran a continuación. Una rareza en este ejemplo es que el formato de salida se establece en csv , que generalmente indica valores separados por comas. Sin embargo, el delimitador predeterminado se configuró para que fuera una barra vertical en lugar de una coma, por lo que la etiqueta csv es un nombre inapropiado en este caso. (Piense en CSV como valores separados por caracteres)

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.asertion_results_failure_message=verdadero
jmeter.save.saveservice.default_delimiter=|

El conjunto completo de propiedades que afectan la salida del archivo de resultados se muestra a continuación.

#------------------------------------------------- --------------------------
# Configuración del archivo de resultados
#------------------------------------------------- --------------------------

# Esta sección ayuda a determinar cómo se guardarán los datos de los resultados.
# Los valores comentados son los predeterminados.

# valores legítimos: xml, csv, db. Actualmente solo se admiten xml y csv.
#jmeter.save.saveservice.output_format=csv


# verdadero cuando se debe guardar el campo; falso de lo contrario

# assertion_results_failure_message solo afecta la salida CSV
#jmeter.save.saveservice.assertion_results_failure_message=verdadero
#
# valores legítimos: ninguno, primero, todos
#jmeter.save.saveservice.assertion_results=ninguno
#
#jmeter.save.saveservice.data_type=true
#jmeter.save.saveservice.label=true
#jmeter.save.saveservice.response_code=true
# response_data actualmente no es compatible con la salida CSV
#jmeter.save.saveservice.response_data=falso
# Guardar ResponseData para muestras fallidas
#jmeter.save.saveservice.response_data.on_error=falso
#jmeter.save.saveservice.response_message=verdadero
#jmeter.save.saveservice.successful=true
#jmeter.save.saveservice.thread_name=true
#jmeter.save.saveservice.time=true
#jmeter.save.saveservice.subresultados=verdadero
#jmeter.save.saveservice.asertions=true
#jmeter.save.saveservice.latency=true
#jmeter.save.saveservice.connect_time=true
#jmeter.save.saveservice.samplerData=false
#jmeter.save.saveservice.responseHeaders=falso
#jmeter.save.saveservice.requestHeaders=falso
#jmeter.save.saveservice.encoding=false
#jmeter.save.saveservice.bytes=verdadero
#jmeter.save.saveservice.sent_bytes=verdadero
#jmeter.save.saveservice.url=falso
#jmeter.save.saveservice.filename=falso
#jmeter.save.saveservice.hostname=falso
#jmeter.save.saveservice.thread_counts=verdadero
#jmeter.save.saveservice.sample_count=false
#jmeter.save.saveservice.idle_time=verdadero

# Formato de marca de tiempo: esto solo afecta a los archivos de salida CSV
# valores legítimos: ninguno, ms o un formato adecuado para SimpleDateFormat
#jmeter.save.saveservice.timestamp_format=ms
#jmeter.save.saveservice.timestamp_format=aaaa/MM/dd HH:mm:ss.SSS

# Para usar con archivos de valores separados por comas (CSV) u otros formatos
# donde los valores de los campos están separados por delimitadores especificados.
# Defecto:
#jmeter.save.saveservice.default_delimiter=,
# Para TAB, desde JMeter 2.3 se puede usar:
#jmeter.save.saveservice.default_delimiter=\t

# Solo se aplica a archivos en formato CSV:
# Imprimir nombres de campo como primera línea en CSV
#jmeter.save.saveservice.print_field_names=verdadero

# Lista opcional de nombres de variables de JMeter cuyos valores se guardarán en los archivos de datos de resultados.
# Use comas para separar los nombres. Por ejemplo:
#sample_variables=SESIÓN_ID,REFERENCIA
# NB La implementación actual guarda los valores en XML como atributos,
# por lo que los nombres deben ser nombres XML válidos.
# JMeter envía la variable a todos los servidores
# para garantizar que los datos correctos estén disponibles en el cliente.

# Instrucción de procesamiento xml opcional para la línea 2 del archivo:
#jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="sample.xsl"?>

# Prefijo usado para identificar nombres de archivo que son relativos a la base actual
#jmeter.save.saveservice.base_prefix=~/

# AutoFlush en cada línea escrita en salida XML o CSV
# Establecer esto en verdadero resultará en menos pérdida de datos de resultados de prueba en caso de bloqueo
# pero con impacto en el rendimiento, particularmente para pruebas intensivas (bajas o sin pausas)
# Desde JMeter 2.10, esto es falso por defecto
#jmeter.save.saveservice.autoflush=falso

# Ponga la marca de tiempo de inicio en los registros en lugar del final
resultado de la muestra.timestamp.start=true

# Ya sea para usar System.nanoTime(); de lo contrario, solo use System.currentTimeMillis()
#resultado de muestra.useNanoTime=true

# Use un subproceso de fondo para calcular el desplazamiento de nanoTime
# Configure esto en ≤ 0 para deshabilitar el hilo de fondo
#resultado de muestra.nanoThreadSleep=5000

El formato de fecha que se utilizará para timestamp_format se describe en SimpleDateFormat . El formato de marca de tiempo se utiliza tanto para escribir como para leer archivos. Si el formato se establece en " ms " y la columna no se analiza como un entero largo, JMeter (2.9+) probará los siguientes formatos:

  • aaaa/MM/dd HH:mm:ss.SSS
  • aaaa/MM/dd HH:mm:ss
  • aaaa-MM-dd HH:mm:ss.SSS
  • aaaa-MM-dd HH:mm:ss
  • MM/dd/aa HH:mm:ss (esto es por compatibilidad con versiones anteriores; no se recomienda como formato)
El emparejamiento ahora también es estricto (no indulgente). JMeter 2.8 y versiones anteriores usaban un modo indulgente que podía generar marcas de tiempo con fechas incorrectas (las horas generalmente eran correctas).

12.1.1 Variables de muestra

JMeter admite la propiedad sample_variables para definir una lista de variables JMeter adicionales que se guardarán con cada muestra en los archivos JTL. Los valores se escriben en archivos CSV como columnas adicionales y como atributos adicionales en archivos XML. Véase más arriba para ver un ejemplo.

12.1.2 Ejemplo de configuración para guardar resultados

Los oyentes se pueden configurar para guardar diferentes elementos en los archivos de registro de resultados (JTL) utilizando la ventana emergente de configuración como se muestra a continuación. Los valores predeterminados se definen como se describe en la sección anterior Configuración predeterminada del agente de escucha . Los elementos con (CSV) después del nombre solo se aplican al formato CSV; los elementos con (XML) solo se aplican al formato XML. Actualmente, el formato CSV no se puede utilizar para guardar elementos que incluyan saltos de línea.


Diálogo de configuración

Tenga en cuenta que las cookies, el método y la cadena de consulta se guardan como parte de la opción " Datos de muestra".

12.2 Ejecuciones de prueba del modo CLI (por lotes)

Cuando se ejecuta en modo CLI, el indicador -l se puede usar para crear un agente de escucha de nivel superior para la ejecución de la prueba. Esto se suma a cualquier Oyente definido en el plan de prueba. La configuración de este oyente está controlada por entradas en el archivo jmeter.properties como se describe en la sección anterior.

Esta función se puede utilizar para especificar diferentes datos y archivos de registro para cada ejecución de prueba, por ejemplo:

jmeter -n -t plan de prueba.jmx -l plan de prueba_01.jtl -j plan de prueba_01.log
jmeter -n -t plan de prueba.jmx -l plan de prueba_02.jtl -j plan de prueba_02.log

Tenga en cuenta que los mensajes de registro de JMeter se escriben en el archivo jmeter.log de forma predeterminada. Este archivo se vuelve a crear cada vez, por lo que si desea conservar los archivos de registro para cada ejecución, deberá cambiarle el nombre con la opción -j como se indicó anteriormente.

JMeter admite variables en el nombre del archivo de registro. Si el nombre de archivo contiene comillas simples emparejadas, el nombre se procesa como un formato SimpleDateFormat aplicado a la fecha actual, por ejemplo: log_file='jmeter_'yyyyMMddHHmmss'.tmp' . Esto se puede usar para generar un nombre único para cada ejecución de prueba.

12.3 Uso de recursos

Los oyentes pueden usar mucha memoria si hay muchas muestras.

La mayoría de los oyentes actualmente guardan una copia de cada muestra que muestran, además de:

  • Escritor de datos simple
  • Oyente BeanShell/JSR223
  • Visualizador de correo
  • Supervisar resultados
  • Informe resumido

Los siguientes oyentes ya no necesitan guardar copias de cada muestra. En su lugar, se agregan las muestras con el mismo tiempo transcurrido. Ahora se necesita menos memoria, especialmente si la mayoría de las muestras solo toman uno o dos segundos como máximo.

  • Informe agregado
  • Gráfico agregado

Para minimizar la cantidad de memoria necesaria, use Simple Data Writer y use el formato CSV.

12.4 Formato de registro CSV

El formato de registro CSV depende de los elementos de datos seleccionados en la configuración. Solo los elementos de datos especificados se registran en el archivo. El orden de aparición de las columnas es fijo, y es el siguiente:

  • timeStamp - en milisegundos desde el 1/1/1970
  • transcurrido - en milisegundos
  • etiqueta - etiqueta de muestra
  • código de respuesta - por ejemplo , 200 , 404
  • mensaje de respuesta - por ejemplo, OK
  • subprocesoNombre
  • tipo de datos - por ejemplo, texto
  • éxito - verdadero o falso
  • mensaje de error - si lo hay
  • bytes - número de bytes en la muestra
  • sentBytes - número de bytes enviados para la muestra
  • grpThreads - número de subprocesos activos en este grupo de subprocesos
  • allThreads - número total de subprocesos activos en todos los grupos
  • URL
  • Nombre de archivo : si se usó Guardar respuesta en archivo
  • latencia : tiempo hasta la primera respuesta
  • conectar - hora de establecer la conexión
  • codificación
  • SampleCount : número de muestras (1, a menos que se agreguen varias muestras)
  • ErrorCount : número de errores (0 o 1, a menos que se agreguen varias muestras)
  • Nombre de host : donde se generó la muestra
  • IdleTime - número de milisegundos de tiempo 'Inactivo' (normalmente 0)
  • Variables , si se especifica

12.5 Formato de registro XML 2.1

El formato del XML actualizado (2.1) es el siguiente (los saltos de línea serán diferentes):

<?versión xml="1.0" codificación="UTF-8"?>
<testResults versión="1.2">

-- Muestra HTTP, con muestras anidadas

<httpMuestra t="1392" lt="351" ts="1144371014619" s="verdadero"
     lb="Solicitud HTTP" rc="200" rm="OK"
     tn="Escuchar 1-1" dt="texto" de="iso-8859-1" by="12407">
  <httpMuestra t="170" lt="170" ts="1144371015471" s="verdadero"
        lb="http://www.apache.org/style/style.css" rc="200" rm="OK"
        tn="Escuchar 1-1" dt="texto" de="ISO-8859-1" by="1002">
    <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Fecha: viernes, 07 de abril de 2006 00:50:14 GMT
⋮
Tipo de contenido: texto/css
</responseHeader>
    <requestHeader class="java.lang.String">MiEncabezado: MiValor</requestHeader>
    <responseData class="java.lang.String">cuerpo, td, th {
    tamaño de fuente: 95%;
    familia tipográfica: Arial, Ginebra, Helvetica, sans-serif;
    de color negro;
    color de fondo: blanco;
}
⋮
</responseData>
    <clase de cookies="java.lang.String"></cookies>
    <método class="java.lang.String">GET</método>
    <queryString class="java.lang.String"></queryString>
    <url>http://www.apache.org/style/style.css</url>
  </httpEjemplo>
  <httpMuestra t="200" lt="180" ts="1144371015641" s="verdadero"
     lb="http://www.apache.org/images/asf_logo_wide.gif"
     rc="200" rm="OK" tn="Escuchar 1-1" dt="bin" de="ISO-8859-1" by="5866">
    <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Fecha: viernes, 07 de abril de 2006 00:50:14 GMT
⋮
Tipo de contenido: imagen/gif
</responseHeader>
    <requestHeader class="java.lang.String">MiEncabezado: MiValor</requestHeader>
    <responseData class="java.lang.String">http://www.apache.org/asf.gif</responseData>
      <responseFile class="java.lang.String">Mixed1.html</responseFile>
    <clase de cookies="java.lang.String"></cookies>
    <método class="java.lang.String">GET</método>
    <queryString class="java.lang.String"></queryString>
    <url>http://www.apache.org/asf.gif</url>
  </httpEjemplo>
  <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Fecha: viernes, 07 de abril de 2006 00:50:13 GMT
⋮
Tipo de contenido: texto/html; conjunto de caracteres = ISO-8859-1
</responseHeader>
  <requestHeader class="java.lang.String">MiEncabezado: MiValor</requestHeader>
  <responseData class="java.lang.String"><!DOCTYPE html PÚBLICO "-//W3C//DTD XHTML 1.0 Transicional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
⋮
<html>
 <cabeza>
⋮
 </cabeza>
 <cuerpo>
⋮
 </cuerpo>
</html>
</responseData>
  <clase de cookies="java.lang.String"></cookies>
  <método class="java.lang.String">GET</método>
  <queryString class="java.lang.String"></queryString>
  <url>http://www.apache.org/</url>
</httpEjemplo>

-- Muestra no HTTP

<muestra t="0" lt="0" ts="1144372616082" s="true" lb="Muestra de ejemplo"
    rc="200" rm="OK" tn="Escuchar 1-1" dt="texto" de="ISO-8859-1" by="10">
  <responseHeader class="java.lang.String"></responseHeader>
  <requestHeader class="java.lang.String"></requestHeader>
  <responseData class="java.lang.String">Escuchar 1-1</responseData>
  <responseFile class="java.lang.String">Mixed2.unknown</responseFile>
  <samplerData class="java.lang.String">ssssss</samplerData>
</muestra>

</resultados de la prueba>

Tenga en cuenta que el nombre del nodo de muestra puede ser " muestra " o " httpSample ".

12.6 Formato de registro XML 2.2

El formato de los archivos JTL es idéntico para 2.2 y 2.1. El formato 2.2 solo afecta a los archivos JMX.

12.7 Atributos de muestra

Los atributos de muestra tienen el siguiente significado:

AtributoContenido
porbytes
sbyBytes enviados
DelawareCodificación de datos
dtTipo de datos
CERecuento de errores (0 o 1, a menos que se agreguen varias muestras)
hnNombre de host donde se generó la muestra
esoTiempo de inactividad = tiempo no dedicado al muestreo (milisegundos) (generalmente 0)
librasEtiqueta
esLatencia = tiempo hasta la respuesta inicial (milisegundos); no todos los muestreadores admiten esto
ConnecticutTiempo de conexión = tiempo para establecer la conexión (milisegundos); no todos los muestreadores admiten esto
n / ANúmero de subprocesos activos para todos los grupos de subprocesos
ngNúmero de subprocesos activos en este grupo
rcCódigo de respuesta (p. ej ., 200 )
rmMensaje de respuesta (por ejemplo, OK )
sIndicador de éxito ( verdadero / falso )
Carolina del SurRecuento de muestras (1, a menos que se agreguen varias muestras)
tTiempo transcurrido (milisegundos)
TennesseNombre del hilo
ttimeStamp (milisegundos desde la medianoche del 1 de enero de 1970 UTC)
nombrevarValor de la variable nombrada
JMeter permite guardar variables adicionales con el plan de prueba. Actualmente, las variables se guardan como atributos adicionales. El nombre de la variable testplan se utiliza como nombre de atributo. Consulte Variables de muestra (arriba) para obtener más información.

12.8 Guardar datos de respuesta

Como se muestra arriba, los datos de respuesta se pueden guardar en el archivo de registro XML si es necesario. Sin embargo, esto puede hacer que el archivo sea bastante grande y el texto debe codificarse para que siga siendo XML válido. Además, no se pueden incluir imágenes. Solo se pueden guardar respuestas de muestra con el tipo TEXTO .
Otra solución es usar el posprocesador Save_Responses_to_a_file . Esto genera un nuevo archivo para cada muestra y guarda el nombre del archivo con la muestra. El nombre del archivo se puede incluir en la salida del registro de muestra. Los datos se recuperarán del archivo si es necesario cuando se vuelva a cargar el archivo de registro de muestra.

12.9 Cargar (leer) datos de respuesta

Para ver un archivo de resultados existente, puede usar el botón Archivo " Examinar… " para seleccionar un archivo. Si es necesario, simplemente cree un plan de prueba ficticio con el Listener apropiado en él.

Los resultados se pueden leer desde archivos en formato XML o CSV. Al leer archivos de resultados CSV, el encabezado (si está presente) se usa para determinar qué campos se guardaron. Para interpretar correctamente un archivo CSV sin encabezado, se deben establecer las propiedades de JMeter adecuadas.

JMeter no borra ningún dato actual antes de cargar el nuevo archivo, lo que permite fusionar los archivos. Si desea borrar los datos actuales, use el elemento de menú: Ejecutar  →  Borrar ( Ctrl  +  Shift  +  E ) o Ejecutar  →  Borrar todo ( Ctrl  +  E ) antes de cargar el archivo.

12.10 Guardar datos de la GUI del oyente

JMeter es capaz de guardar cualquier oyente como un archivo PNG. Para hacerlo, seleccione el oyente en el panel izquierdo. Haga clic en Editar  →  Guardar nodo como imagen . Aparecerá un cuadro de diálogo de archivo. Introduzca el nombre deseado y guarde el oyente.

Los Listeners que generan resultados como tablas también se pueden guardar usando Copiar/Pegar. Seleccione las celdas deseadas en la tabla y use el atajo OS Copy (normalmente Ctrl  +  C ). Los datos se guardarán en el portapapeles, desde donde se pueden pegar en otra aplicación, por ejemplo, una hoja de cálculo o un editor de texto.

Figura 1 -
Figura 1: Editar  →  Guardar nodo como imagen
Go to top