JMeter - 如何记录失败响应的完整请求?

时间:2009-10-04 05:37:53

标签: jmeter

我正在使用JMeter命令行对我们的网站api进行压力测试。现在,这是我回来的样本结果:

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>

现在,在有人说'检查网络服务器日志文件'之前,我知道我可以做到这一点,是的,我已经找到了404 ..但是我希望看看它是否可以不访问它们...特别是如果他们在另一台服务器上和/或我无法访问它们。 请帮忙!

4 个答案:

答案 0 :(得分:65)

View Results Tree 组件显示所有样本回复的树,允许您查看任何样本的请求和响应。

进行负载测试(始终处于非GUI模式)时,请填写“文件名”字段并选择仅保存错误中的响应:

View Results Tree in error

如您所见,我们点击了配置以选择除CSV之外的所有字段。

您还可以使用Save Responses to a file

将整个回复保存到文件中

Save Responses to a file

答案 1 :(得分:21)

我发现这个线程在采样器出现故障时正在寻找一个解决方案来记录响应 ,所以接受的解决方案对我不利。我偶尔会在涉及数十万个样本的非常高的负载下出现样本故障,所以树监听器对我来说完全不切实际(它的大小将达到几千兆字节),所以这就是我想出来的(这应该对我有用) OP的情景也是如此):

添加[JSR223 Assertion][1](应该在所有其他断言之后)并将下面的代码放入其中:

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日志文件中,这在我的情况下很好,因为我知道响应非常小,但对于大响应,可以进行更智能的处理。

答案 2 :(得分:6)

有一个&#39;保存对文件的回复&#39;侦听器,只有在发生错误时才能保存到文件中。

答案 3 :(得分:0)

这是我记录失败请求的完整请求(请求URL +请求正文)的方式。

  1. 在线程组内添加侦听器
try{
  var message = "";
  var currentUrl = sampler.getUrl();
  message +=  ". URL = " +currentUrl;
  var requestBody = sampler.getArguments().getArgument(0).getValue();
  message += " --data " + sampler.getArguments();

  if(!sampleResult.isSuccessful()){
      log.error(message);
  }

}catch(err){
  //do nothing. this could be a debug sampler. no need to log the error
}

对于线程组内的每个Sampler,侦听器将在Sampler之后执行此代码。