JMeter / Beanshell "ошибка вызова метода bsh: файл источника eval:"

у меня проблема в 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"

отредактировано, чтобы включить всю ошибку

3 ответов


Я не вижу вашего URL-адреса и что возвращает запрос XPath, но в любом случае ваша логика синтаксического анализа URL-адресов выглядит неустойчивой, поскольку она сильно зависит от порядка параметров и присутствия и может укусить вас в будущем в случае изменения 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.журнал.

надеюсь, что это помогает.


не могли бы вы показать весь ошибка?

попробуйте добавить один оператор за другим, чтобы увидеть, какой из них является основной причиной.

Я полагаю, вы можете сделать гипотезу о результатах (доступ к массиву), которые могут быть причиной проблемы.


Если вы покрываете сценарий JMS записанный VuGen в JMeter, то вам нужно искать lr функции скопированы, которые будут вызывать эту / подобную ошибку.

например: int orderlinecount = Integer.parseInt(lr.eval_string("strInt"));

вы должны убедиться, что ваш скрипт свободен от всех функций, связанных с lr, чтобы jmeter успешно выполнил ваш скрипт.