Archivo de resultados JTL en formato CSV o XML

resultados

La mejor opción para ejecutar una prueba de carga en JMeter es a través del modo no gráfico, aunque es mejor conocido como CLI (command line interface) o línea de comandos. Existen dos ficheros principales, la bitácora de JMeter y el archivo de resultados JTL, sin embargo se deben especificar con la opción -l para el JTL y -j para la bitácora. El día de hoy nos concentramos en el archivo JTL o archivo de resultados. Por definición este archivo se encuentra en formato CSV (comma separated values) o valores separados por coma, la importancia de este fichero reside en que contiene todos los detalles y resultados de cada una de las peticiones, transacciones o etiquetas que hayamos definido en el script de JMeter.

       jmeter.sh  -n -t script.jmx -l resultados.jtl -j bitacora.log
        jmeter.bat -n -t script.jmx -l resultados.jtl -j bitacora.log

Aquí tenemos un ejemplo de como se ve un archivo JTL en formato CSV:

jtl

Este formato tiene las siguientes ventajas:

  • Es ligero. (ocupa poco espacio en disco)
  • Es texto plano fácil de leer. (prácticamente con cualquier editor de texto)
  • Es sencillo de importar y graficar la datos.
  • Es simple la detección de errores.

Este formato es el más popular por ser el definido, pero tiene la gran limitante de que no podemos guardar las peticiones y la respuesta de las peticiones como parte del resultado. Normalmente esta información no debiera ser guardada en caso de ser exitosa, porque ocupa espacio y recursos, pero pudiera ser necesaria para realizar algún tipo de análisis post-mortem o depuración. Si requieres guardar este tipo de información te sugeriría leer esta publicación Depurando errores durante la ejecución pero en lugar de guardarlo como parte del archivo de resultados, se envía a la bitácora. Para almacenar los detalles de las peticiones primero tenemos que cambiar el formato del archivo de resultados a XML, esto se puede lograr por medio del reemplazo de la propiedad en la línea de comando o en la modificación permanente en el archivo jmeter.properties.

       -Jjmeter.save.saveservice.output_format=xml

después deberemos hacer lo mismo para habilitar el almacenamiento de los detalles, con la siguiente propiedad

       -Jjmeter.save.saveservice.response_data=true

Aquí tenemos un ejemplo de hacer el reemplazo por línea de comando:

       jmeter.sh  -n -t script.jmx -l resultados.jtl -j bitacora.log -Jjmeter.save.saveservice.output_format=xml -Jjmeter.save.saveservice.response_data=true
        jmeter.bat -n -t script.jmx -l resultados.jtl -j bitacora.log -Jjmeter.save.saveservice.output_format=xml -Jjmeter.save.saveservice.response_data=true

Lo cual nos daría como resultado un archivo como este:

<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
<sample t="165" it="0" lt="11" ct="1" ts="1675066304203" s="true" lb="HTTP Sampler" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="36" sby="0" ng="1" na="1">
 <responseData class="java.lang.String">9634dd0f-d8b7-41d1-9c52-685f9765d4fb</responseData>
</sample>
<sample t="485" it="0" lt="21" ct="3" ts="1675066304807" s="true" lb="HTTP Sampler" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="36" sby="0" ng="1" na="1">
 <responseData class="java.lang.String">5215d3bc-38ca-479b-82af-0a042ebaafe8</responseData>
</sample>
<sample t="194" it="0" lt="48" ct="3" ts="1675066305315" s="true" lb="HTTP Sampler" rc="200" rm="OK" tn="Thread Group 1-2" dt="text" by="36" sby="0" ng="2" na="2">
 <responseData class="java.lang.String">b9bca1f2-5ee5-41d1-8d8f-5cf11243f8d6</responseData>
</sample>

Conclusión

Cabe mencionar que esto te servirá únicamente en la ejecución que modifiquen las propiedades, si quieres hacer esto de manera permanente recomiendo que visites esta URL y modifiques las propiedades a tus necesidades en el archivo jmeter.properties como lo había mencionado antes. Finalmente, si vas a realizar una prueba de carga te recomiendo que solo guardes la información de las etiquetas que fallen, con la opción "jmeter.save.saveservice.response_data.on_error=true" dado que si guardas también los datos de los exitosos podrías muchos recursos innecesariamente.

-Antonio