52

我正在使用 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

4 回答 4

74

查看结果树组件显示所有示例响应的树,允许您查看任何示例的请求和响应。

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

查看结果树错误

正如您在上面看到的,我们单击配置以选择除 CSV 之外的所有字段。

您还可以使用Save Responses to a file将整个响应保存到文件中:

将响应保存到文件

于 2009-10-06T15:34:16.387 回答
24

我发现这个线程正在搜索在采样器失败时记录响应的解决方案,因此接受的解决方案对我不利。在涉及数十万个样本的高负载下,我偶尔会出现样本失败,因此树侦听器对我来说完全不切实际(它的大小将达到几 GB),所以这就是我想出的(这应该对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 日志文件中,这在我的情况下很好,因为我知道响应非常小,但是对于大响应,可以进行更智能的处理。

于 2012-12-18T10:34:44.500 回答
6

有一个“将响应保存到文件”侦听器,只有在发生错误时才能保存到文件。

于 2015-08-28T04:26:05.553 回答
3

这就是我记录失败请求的完整请求(请求 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
}

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

于 2019-10-20T06:10:39.447 回答