В моем плане тестирования JMeter я пытаюсь записать все ошибки в журнал. Я использую BeanShell постпроцессор настроен следующим образомJMeter Thread Group, не попадающая в BeanShell PostProcessor
import org.apache.jmeter.services.FileServer;
if (ResponseCode != null && ResponseCode.equals("200") == false) {
Failure = true;
// displays in Results Tree
FailureMessage ="Creation of a new CAE record failed. Response code " + ResponseCode + "." ;
// Static elements
part1 = "Creation of a new record failed. Response code: ";
part2 = ". Sorry!";
// Open File(s)
FileOutputStream f = new FileOutputStream("d:\\error.csv", true);
PrintStream p = new PrintStream(f);
// Write data to file
p.println(part1 + ResponseCode + part2);
// Close File(s)
p.close();
f.close();
}
Я пытаюсь сделать простой тест, где запрос HTTP делает POST, который проходит в файле JSon из C: JMeter/тесты/где каталог больше не существует. (Скажем, кто-то случайно удаляет его ...)
Проблема заключается испытание остановки (см ниже) и никогда не добраться до BeanShell писать без ошибок в лог-файл. Мне нужно собрать все ответы об ошибках и только ответы об ошибках.
Я не уверен, как с этим справиться. Я читал Jmeter. BeanShell PostProcessor и другие, но они не затрагивают вопрос о том, что происходит, когда он не попадает в BeanShell.
Любая помощь приветствуется!
org.apache.jorphan.util.JMeterStopThreadException: End of sequence
at org.apache.jmeter.functions.FileToString.execute(FileToString.java:105)
at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:142)
at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:118)
at org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101)
at org.apache.jmeter.testelement.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:274)
at org.apache.jmeter.config.Argument.getValue(Argument.java:146)
at org.apache.jmeter.protocol.http.util.HTTPArgument.getEncodedValue(HTTPArgument.java:236)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sendPostData(HTTPHC4Impl.java:1111)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.handleMethod(HTTPHC4Impl.java:453)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:329)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1146)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1135)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:434)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: File 'C:\JMeter\test\payloads\Request_1.json' does not exist
at org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:299)
at org.apache.commons.io.FileUtils.readFileToString(FileUtils.java:1711)
at org.apache.commons.io.FileUtils.readFileToString(FileUtils.java:1734)
at org.apache.jmeter.functions.FileToString.execute(FileToString.java:102)
РЕШЕНИЕ
На основе обратной связи Дмитрия, я перешел из Beanshell постпроцессор в Beanshell утверждения. После некоторой настройки я получил ее для работы там, где теперь она записывает только ошибки (ответ! = 200) в файл errors.csv. Вместо добавления файла из предыдущего прогона он перезаписывается при каждом прогоне, поэтому фиксируются только ошибки последнего запуска.
Если кто-то думает, что мое решение может быть улучшено, я буду рад получить обратную связь. Еще раз спасибо Кирилю и Дмитрию.
import org.apache.jmeter.services.FileServer;
if (ResponseCode != null && ResponseCode.equals("200") == true) {
SampleResult.setResponseOK();
}
else if (!ResponseCode.equals ("200") == true) {
Failure = true;
FailureMessage ="Creation of a new record failed. Response code " + ResponseCode + "." ; // displays in Results Tree
print ("Creation of a new record failed: Response code " + ResponseCode + "."); // goes to stdout
log.warn("Creation of a new record failed: Response code " + ResponseCode); // this goes to the JMeter log file
// Static elements or calculations
part1 = "Unable to generate a new record via POST. The response code is: \"";
part2 = "\". \n\n For response code = \'Non-HTTP ressponse\', verify the payload file still exists. \n For response code = 409, check the recordTypeId and recordGrpId combination for validity. \n For response code = 500, verify the database and its host server are reachable. ";
// Open File(s)
FileOutputStream f = new FileOutputStream(FileServer.getFileServer().getBaseDir() + "\\error.csv");
PrintStream p = new PrintStream(f);
// Write data to file
p.println(part1 + ResponseCode + part2);
// Close File(s)
p.close();
f.close();
}
не имеет отношения к вашему вопросу, но 'ResponseCode.equals (" 200 ") == true': обычно статус 200 указывает на успех, и вам не нужно добавлять' == 'для booleans. Таким образом, maybeyou должен был иметь условие как '! ResponseCode.equals (" 200 ")' (т. Е. Ввести условие ошибки, если код возврата не 200)? –
@KirilS. Благодарю. Я нашел и исправил это в своем коде после моей первоначальной публикации. Я хотел набрать «ResponseCode.equals (« 200 ») == false». Использует ли ваш «! ResponseCode.equals (« 200 ») == true' то же самое? – David
'! ResponseCode.equals (" 200 ")' (без каких-либо ==) совпадает с 'ResponseCode.equals (" 200 ") == false' (' equals' возвращает логическое значение, оператор! Инвертирует его значение) –