JMeter/Beanshell "Ошибка при вызове метода bsh: eval Sourced file:"
У меня проблема в JMeter, в которой я получаю эту ошибку
2014/08/14 14:13:26 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``String RequestUrl = vars.get("RequestUrl"); String[] params = RequestUrl.split(" . . . '' : Typed variable declaration
2014/08/14 14:13:26 WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``String RequestUrl = vars.get("RequestUrl"); String[] params = RequestUrl.split(" . . . '' : Typed variable declaration
Я не знаю, что не так, и код, похоже, работает. Может ли кто-нибудь дать мне совет?
Вот блок кода, о котором идет речь:
String RequestUrl = vars.get("RequestUrl");
String[] params = RequestUrl.split("\\?");
String RequestTask = params[1].split("\\&")[1].split("=")[1];
System.out.println(RequestTask);
vars.put("RequestTask",RequestTask);
следует, вероятно, упомянуть, что код находится в постпроцессоре, который соединен с экстрактором Xpath для "RequestUrl"
Отредактировано, чтобы включить полную ошибку
Ответы
Ответ 1
Я не вижу ваш URL-адрес и что возвращает запрос XPath, но в любом случае логика синтаксического анализа URL выглядит flaky, поскольку она сильно зависит от порядка и присутствия параметров и может укусить вас в будущем в случае изменения URL-адреса запроса, параметр или измененный порядок параметров или что-то закодированное и т.д.
См. ниже для справки:
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import java.net.URI;
import java.util.List;
String url = vars.get("RequestUrl");
List params = URLEncodedUtils.parse(new URI(url), "UTF-8");
for (NameValuePair param : params) {
if (param.getName().equals("put your actual param name here")) {
vars.put("RequestTask", param.getValue());
}
}
Также стоит проверить Как использовать BeanShell: любимый встроенный компонент JMeter для устранения неполадок. В общем случае для локализации журнала ошибок следует использовать как:
log.info("something");
log.error("something else");
Итак, если вы не видите сообщение в журнале, то Beanshell не смог выполнить строку и не смог что-то выше.
Также сообщения об ошибках Beanshell не очень информативны, я использую следующую конструкцию в своих сценариях:
try {
//script logic here
}
catch (Throwable ex) {
log.error("Failed to do this or that", ex);
}
Таким образом, ошибка stracktrace может быть прочитана в файле jmeter.log.
Надеюсь, это поможет.
Ответ 2
Не могли бы вы показать всю ошибку?
Попробуйте добавить одно утверждение за другим, чтобы узнать, какая из них является основной причиной.
Я предполагаю, что вы можете делать гипотезу о результатах (доступ к массиву), которые могут быть причиной проблемы.
Ответ 3
если вы используете JM script для JMeter, VuGen, вам нужно искать функции lr
, которые будут скопированы с этой/подобной ошибкой.
Например, int orderlinecount = Integer.parseInt(lr.eval_string("strInt"));
Вы должны убедиться, что ваш script свободен от всех связанных с lr функций, чтобы jmeter успешно выполнил ваш script.