Depurando errores durante la ejecución
Table of Contents
Intermedio - This article is part of a series.
Durante la ejecución de una prueba de carga por medio de línea de comando, es posible que existan algunos errores. Es factible utilizar el comando tail sobre el archivo de resultados JTL, para tener una idea sobre el código de error o algún dato sobre el mensaje de respuesta. Esta información puede ser ambigua o insuficiente. Por ello cuando se tienen algunas peticiones o transacciones con bajo nivel de error (por bajo nivel de error me refiero menor al 20%), existen ciertas formas de obtener más información al respecto, como activar receptores para guardar las respuestas en un archivo plano o xml, pero también existe una solución bastante eficiente que también he compartido en el sitio de Flood.io, esta solución consume pocos recursos y que puede enviar cualquier valor asociado de la respuesta a la bitácora de JMeter para que lo podamos analizarlo detenidamente.
Esta solución es utilizar un receptor JSR223, el cual deberá contener el siguiente código:
if (prev.isSuccessful() == false) {
log.info( "The Sample Label is : " + prev.getSampleLabel())
log.info( "The Start Time in milliseconds is : " + prev.getStartTime())
log.info( "The Response Code is : " + prev.getResponseCode())
log.info( "The Response Message is : " + prev.getResponseMessage())
log.info( "Headers are: " + prev.getResponseHeaders())
}
Es extremadamente importante que el caching del script esté activo y que sea el compilador Groovy. También se deberá colocar a nivel del test plan, sobre todo si se tienen múltiples grupos de hilos o también colocarlo a nivel del grupo del hilo si solo tenemos uno.
Aqui tenemos un ejemplo más reciente, que incluye la respuesta de la petición para mandarlo a la bítacora de JMeter.
if (prev.isSuccessful() == false) {
log.info( "###########################################################")
log.info( "The Sampler Label is : " + prev.getSampleLabel())
log.info( "The Sampler payload is : " + prev.getSamplerData())
log.info( "The Start Time in milliseconds is : " + prev.getStartTime())
log.info( "The Response Data is : " + prev.getResponseDataAsString())
log.info( "The Response Code is : " + prev.getResponseCode())
log.info( "The Response Message is : " + prev.getResponseMessage())
log.info( "Headers are: " + prev.getResponseHeaders())
log.info( "###########################################################")
}
¿ Qué hace el código ? #
El código evalúa todas las respuestas de los muestreadores y aquellas dónde el muestreador sea marcado como fallido, se enviarán los datos como:
- nombre de la etiqueta
- la estampa de tiempo
- el código de respuesta
- la respuesta del mensaje
- los encabezados
si quieres agregar algún otro valor, te recomiendo revisar aquí cuales podrían ser de utilidad para tu depuración. Cabe mencionar que esta muy dirigida a muestreadores de tipo HTTP, pero podrías modificarlo para capturar información relevante de cualquier otro protocolo.
Conclusión #
El proposito general de este codigo es poder visualizar en tiempo real por medio de un comando como tail cualquier tipo de error en las códigos de respuesta, que estaremos recibiendo de nuestras peticiones. Esto se guardará en la bitácora de JMeter (jmeter.log). Así mismo esto es ideal para guardar las evidencias y documentación del posible origen de estos errores.