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.