2009-10-04 14 views
30

estoy usando la línea de comando de JMeter para poner a prueba nuestra API del sitio web. Ahora, aquí hay un resultado de muestra que estoy obteniendo:JMeter: ¿cómo registrar la solicitud completa de una respuesta fallida?

Creating summariser <summary> 
Created the tree successfully using street_advisor.jmx 
Starting the test @ Sat Oct 03 15:22:59 PDT 2009 (1254608579848) 
Waiting for possible shutdown message on port 4445 
summary +  1 in 0.0s = 37.0/s Avg: 27 Min: 27 Max: 27 Err:  1 (100.00%) 
<snip a few more lines> 
<then i break it> 

Me aparece un error.

Actualmente, todos los errores van a un archivo. Cuando reviso ese archivo, dice que es un 404. Er ... ok. ¿De todos modos puedo ver exactamente que ha intentado con la solicitud JMeter?

He aquí un fragmento de mi archivo de configuración ...

<ResultCollector guiclass="SimpleDataWriter" testclass="ResultCollector" testname="Error Writer" enabled="true"> 
      <boolProp name="ResultCollector.error_logging">true</boolProp> 
      <objProp> 
      <name>saveConfig</name> 
      <value class="SampleSaveConfiguration"> 
       <time>true</time> 
       <latency>true</latency> 
       <timestamp>false</timestamp> 
       <success>true</success> 
       <label>true</label> 
       <code>true</code> 
       <message>true</message> 
       <threadName>false</threadName> 
       <dataType>true</dataType> 
       <encoding>false</encoding> 
       <assertions>true</assertions> 
       <subresults>true</subresults> 
       <responseData>false</responseData> 
       <samplerData>false</samplerData> 
       <xml>true</xml> 
       <fieldNames>false</fieldNames> 
       <responseHeaders>true</responseHeaders> 
       <requestHeaders>true</requestHeaders> 
       <responseDataOnError>false</responseDataOnError> 
       <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage> 
       <assertionsResultsToSave>0</assertionsResultsToSave> 
       <bytes>true</bytes> 
      </value> 
      </objProp> 
      <stringProp name="filename">./error.jtl</stringProp> 
     </ResultCollector> 

Ahora, antes de que alguien dice 'Compruebe los archivos de registro del servidor web', sé que puedo hacer esto y sí, he encontrado el 404. .pero espero ver si es posible sin acceder a ellos ... especialmente si están en otro servidor y/o no puedo acceder a ellos. Por favor ayuda!

Respuesta

53

El componente View Results Tree muestra un árbol con todas las respuestas de muestra, lo que le permite ver tanto la solicitud como la respuesta para cualquier muestra. También puede guardar toda la respuesta a un archivo usando Guardar respuestas en un archivo.

+5

Correcto, pero estaba haciendo esto a través de la línea de comandos ... así que no tengo acceso a la GUI. Pero no especifiqué eso en mi pregunta (rubor). Además, no pude entender cómo hacerlo a través de la línea de comandos, así que terminé haciendo lo que sugirió de todos modos :) –

+2

Si está utilizando la línea de comando, puede configurar su prueba para enviar los datos a un archivo de salida (jtl) y luego procesar ese archivo con esta herramienta: http://jmeter-plugins.org/wiki/JMeterPluginsCMD/ para exportar a PNG o CSV. – hveiras

+0

Si leí la pregunta correctamente, ¿estaba buscando la solicitud no respondida ...? – arcseldon

20

Encontré este hilo buscando una solución para registrar la respuesta solo cuando falla un muestreador, por lo que la solución aceptada no es buena para mí. Tengo fallas de muestra ocasionales a una carga muy alta que involucra cientos de miles de muestras, por lo que un oyente de árbol es completamente impráctico para mí (alcanzará varios gigabytes de tamaño), así que esto es lo que se me ocurrió (que debería ser bueno para escenario de la OP también):

Añadir un BeanShell Assertion (debe venir después de todas las otras afirmaciones) y poner el siguiente código en él:

if (Boolean.valueOf(vars.get("DEBUG"))) { 
    for (a: SampleResult.getAssertionResults()) { 
    if (a.isError() || a.isFailure()) { 
     log.error(Thread.currentThread().getName()+": "+SampleLabel+": Assertion failed for response: " + new String((byte[]) ResponseData)); 
    } 
    } 
} 

Esto hará que toda la respuesta conseguir registra en el registro jmeter archivo que está bien en mi caso, ya que sé que las respuestas son realmente pequeñas, pero para respuestas grandes, se podría hacer un procesamiento más inteligente.

+0

¡¡Buena idea !! ¡Woot! –

+0

Agregué la capacidad de controlar el registro usando un UDV llamado "DEPURAR", por lo que es más fácil dejar la afirmación para las cargas de trabajo normales y habilitarla solo cuando sea necesario. – haridsv

+0

@haridsv ¡Decisión agradable! Pero, ¿es posible guardar el requestData que causó una respuesta fallida? – ShurupuS

4

Hay un oyente 'Guardar respuestas en un archivo', que puede guardarse en el archivo solo cuando se produce un error.

Cuestiones relacionadas