2009-10-04 14 views
30

J'utilise la ligne de commande de JMeter pour tester notre API sur notre site web. Maintenant, voici un exemple de résultat que je reviens:JMeter - comment enregistrer la requête complète pour une réponse échouée?

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> 

Donc, je reçois une erreur.

Actuellement, toutes les erreurs vont dans un fichier. Quand je vérifie ce fichier, il dit que c'est un 404. Euh ... d'accord. Y at-il de toute façon je peux voir exactement ce que la demande JMeter essayé?

est ici un extrait de mon fichier de configuration ...

<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> 

Maintenant, avant que quelqu'un dit: « Vérifiez les fichiers journaux de serveur Web », je sais que je peux le faire et eh oui, je l'ai trouvé 404. mais j'espère voir si c'est possible sans y accéder ... surtout s'ils sont sur un autre serveur et/ou que je ne peux pas y accéder. S'il vous plaît aider!

Répondre

53

Le composant View Results Tree affiche un arbre de toutes les réponses d'échantillon, vous permettant d'afficher à la fois la demande et la réponse pour n'importe quel échantillon. Vous pouvez également enregistrer la réponse entière dans un fichier en utilisant Enregistrer les réponses dans un fichier.

+5

Correct, mais je le faisais via la ligne de commande .. donc je n'ai pas accès à l'interface graphique. Bu tI ne l'a pas précisé dans ma question (rougir). En outre, je ne pouvais pas comprendre comment le faire via la ligne de commande, donc j'ai fini par faire ce que vous avez suggéré de toute façon :) –

+2

Si vous utilisez la ligne de commande, vous pouvez configurer votre test pour envoyer les données vers un fichier de sortie jtl) et ensuite traiter ce fichier avec cet outil: http://jmeter-plugins.org/wiki/JMeterPluginsCMD/ pour exporter au format PNG ou CSV. – hveiras

+0

Si j'ai lu la question correctement, je cherchais la demande enregistrée, pas de réponse ...? – arcseldon

20

J'ai trouvé ce fil recherche une solution pour enregistrer la réponse seulement quand un échantillonneur échoue, donc la solution acceptée n'est pas bon pour moi. J'ai des échecs d'échantillons occasionnels à une charge très élevée impliquant des centaines de milliers d'échantillons, donc un écouteur d'arbre est complètement impraticable pour moi (il atteindra plusieurs gigaoctets), alors voici ce que j'ai trouvé (ce qui devrait être bon pour le scénario de l'OP ainsi):

Ajouter un BeanShell Assertion (devrait venir après toutes les autres affirmations) et mettre le code ci-dessous il:

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)); 
    } 
    } 
} 

Cela entraînera toute la réponse se consigné dans le journal de jmeter Je trouve que les réponses sont très petites, mais pour les réponses de grande taille, un traitement plus intelligent pourrait être fait.

+0

Belle idée !! woot! –

+0

J'ai ajouté la possibilité de contrôler le journal en utilisant un UDV appelé "DEBUG", il est donc plus facile de laisser l'assertion pour les charges de travail régulières, et de l'activer uniquement si nécessaire. – haridsv

+0

@haridsv Nice Décision! Mais est-il possible de sauvegarder le requestData qui a provoqué l'échec de la réponse? – ShurupuS

4

Il existe un programme d'écoute 'Enregistrer les réponses à un fichier', qui peut être enregistré dans un fichier uniquement en cas d'erreur.