2009-10-04 137 views
30

我使用JMeter命令行來壓力測試我們的網站api。現在,這裏是我回來的示例結果:JMeter - 如何記錄失敗響應的完整請求?

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> 

所以我得到一個錯誤。

當前,所有的錯誤都會發送到一個文件。當我檢查該文件時,它說這是一個404.呃..好吧。有沒有反正我可以看到究竟是什麼請求JMeter試過?

這裏是我的配置文件中的一個片段:

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

現在,之前有人說「檢查Web服務器日誌文件」,我知道我能做到這一點,是的,我已經找到了404。 。但我希望看看是否可以不訪問它們,特別是如果它們在另一臺服務器上和/或我無法訪問它們。 請幫忙!

回答

53

View Results Tree組件顯示了所有示例響應的樹,允許您查看任何示例的請求和響應。您也可以使用將響應保存到文件來將整個響應保存到文件中。

+5

正確,但我通過命令行執行此操作..所以我無法訪問GUI。我沒有在我的問題中指出(臉紅)。另外,我不知道如何通過命令行來完成它,所以我最終完成了你建議的任何操作:) – 2009-10-07 03:37:31

+2

如果你使用命令行,你可以配置你的測試以將數據發送到輸出文件( jtl),然後使用此工具處理該文件:http://jmeter-plugins.org/wiki/JMeterPluginsCMD/以導出爲PNG或CSV。 – hveiras 2015-10-27 18:53:16

+0

如果我正確地閱讀了該問題,是否正在查找記錄的請求而不是響應...? – arcseldon 2017-09-22 14:18:40

20

我發現這個線程尋找一個解決方案來記錄響應只有當一個採樣器失敗,所以接受的解決方案是不適合我。我偶爾會在包含數十萬個樣本的非常高的負載下發生樣本故障,所以樹聽者對我來說是完全不切實際的(它將達到幾千兆字節的大小),所以這就是我想出的(這應該是對在OP的情況一樣):

添加BeanShell Assertion(應該來所有其他的斷言之後),並把它下面的代碼:

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

這將導致整個應對越來越記錄到JMeter的日誌這個文件在我的情況下很好,因爲我知道這些響應非常小,但對於大量響應,可以進行更智能的處理。

+0

好主意!活泉! – 2012-12-18 11:34:48

+0

我添加了使用名爲「DEBUG」的UDV控制日誌的功能,因此更容易爲常規工作負載保留斷言,並僅在必要時啓用斷言。 – haridsv 2012-12-19 07:13:41

+0

@haridsv好決定!但是可以保存導致失敗響應的requestData嗎? – ShurupuS 2013-06-26 13:15:42

4

有一個'保存對文件的響應'偵聽器,只有在發生錯誤時才能保存到文件。