У меня есть BeanShell
PostProcessor
, который начинается с:JMeter BeanShell постпроцессор Попытки обработать строку как байт []
result = ctx.getPreviousResult();
String data = result.getResponseDataAsString();
На второй петле LoopController
, это даст это в журнале:
ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: set Variable assignment: data: Can't assign byte [] to java.lang.String
WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: set Variable assignment: data: Can't assign byte [] to java.lang.String
Однако, если я удалить String
декларацию, я не получаю предупреждение (поэтому использование этого работать вокруг) ... т.е. неоднозначной о типе):
data = result.getResponseDataAsString();
Если я печатаю result.getResponseDataAsString().getClass().getName()
до этой строки, я получаю java.lang.String
.
Невероятно новый для BeanShell
использование в JMeter, но довольно уверенно, что проблема в линии.
В то же время, если у меня есть log.info
заявления до назначения String data = ...
, они не будут печатать на второй итерации цикла, что заставляет меня подвергнуть сомнению эту оценку.
Как я могу понять/исправить попытку byte[]
?
Для справки: вот мой тест план:
В принципе, каждый пробоотборник использует result.getResponseDataAsString()
, чтобы получить тело ответа, делает некоторые манипуляции «нормализовать», а затем устанавливает значение через vars.put()
. BeanShell Assertion
использует vars.get()
для извлечения двух значений, сравнивает их и наборы FailureMessage
и Failure
соответственно.
Примечание: оба варианта PostProcessor
имеют такую же проблему.
Примечание 2: String data = new String(result.getResponseData());
одинаково проблематично (то есть та же ошибка) ... не то, что я бы никогда не выступает за создание String
из byte[]
без явного кодирования/о кодировке.
Я пробовал ваш код и не получал никаких ошибок. Хотя для этого вам не нужен 'ctx', вы можете напрямую использовать' prev.getResponseDataAsString() '. Итак, либо ваш ответ действительно двоичный, либо ... Попробуйте это: создайте сэмплер BeanShell с кодом: 'SampleResult.setResponseData (« Hello »);' и поместите ваш постпроцессор под этот пробоотборник. Возвращает ли она ту же ошибку? Если нет, это означает определенно что-то с вашими конкретными данными. Если да, вам нужно посмотреть на свою среду ... –
Спасибо за подсказку на 'prev'. Кроме того, я использовал вашу идею сэмплера BeanShell, чтобы построить небольшой .JMX, упомянутый в моем ответе. Вы помогли мне открыть мою собственную ошибку. –