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. Er.. нормально. Есть ли в любом случае, я точно вижу, что пробовал 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.. но я надеюсь увидеть, возможно ли это, не обращаясь к ним. особенно если они находятся на другом сервере и/или я не могу получить к ним доступ.
Пожалуйста, помогите!
Ответы
Ответ 1
Компонент Просмотр дерева результатов показывает дерево всех примеров ответов, что позволяет просматривать как запрос, так и ответ для любого образца.
При нагрузочном тестировании (Всегда в режиме без графического интерфейса) заполните поле "Имя файла" и выберите сохранение ответов только при ошибке:
![View Results Tree in error]()
Как вы можете видеть выше, мы нажали на Configure, чтобы выбрать все поля, кроме CSV.
Вы также можете сохранить весь ответ в файл, используя Сохранить ответы в файл:
![Save Responses to a file]()
Ответ 2
Я нашел эту ветку в поисках решения для записи ответа только при сбое сэмплера, поэтому принятое решение мне не подходит. У меня случаются сбои сэмплов при очень высокой нагрузке, включающей сотни тысяч сэмплов, поэтому прослушиватель деревьев для меня совершенно непрактичен (он достигнет нескольких гигабайт), так что вот что я придумал (что должно быть хорошо для сценарий 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, что хорошо в моем случае, поскольку я знаю, что ответы действительно малы, но для больших ответов может быть выполнена более интеллектуальная обработка.
Ответ 3
Существует прослушиватель "Сохранить ответы на файл", который может сохраняться в файле только при возникновении ошибки.
Ответ 4
Вот как я регистрирую полный запрос (URL запроса + тело запроса) для неудачных запросов.
- Добавить прослушиватель внутри группы потоков
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
}
Для каждого сэмплера в группе потоков слушатель выполнит этот код после сэмплера.