Depurando errores durante la ejecución
Tabla de contenido
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 donde 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
if you want to add any other value, i recommend reviewing here which could be useful for your debugging. it is very directed towards http samplers but you can modify it to capture relevant information from any other protocol as well.
Conclusion #
The general purpose of this code is to be able to visualize real-time errors in the response codes that we receive from our requests, which will be stored in JMeter’s log (jmeter.log). This is ideal for saving evidence and documentation on the possible origin of these errors.