Преобразование строки в целое число в сэмплере BeanShell в JMeter

#java #string #integer #jmeter #beanshell

#java #строка #целое число #jmeter #beanshell

Вопрос:

Я пытаюсь разобрать строку в целое число в JMeter, но не удалось из-за следующей ошибки. Если я попытаюсь напечатать строки, возвращаемые vars.get, они выглядят хорошо.

 2014/06/28 00:08:52 WARN  - jmeter.assertions.BeanShellAssertion: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval  Sourced file: inline evaluation of: ``if (ResponseCode != null amp;amp; ResponseCode.equals ("200") == false ) {  int i = In . . . '' : Typed variable declaration : Method Invocation Integer.parseInt 
 

Ниже приведен мой код

 if (ResponseCode != null amp;amp; ResponseCode.equals ("200") == false )
{
    int i = Integer.parseInt(vars.get("currentPMCount"));
    int j = Integer.parseInt(vars.get("pmViolationMaxCount"));
    if( i > j ){
        log.warn("PM count on server is greater than max allowed count.");
        }

        log.warn( "The return code is "   ResponseCode); // this goes to the JMeter log file
} 
else 
{
    Failure=true ;
    FailureMessage = "The response data size was not as expected" ;   
}
 

Ответ №1:

Ваш код выглядит хорошо, однако это может быть проблемой с currentPMCount переменными и / или pmViolationMaxCount .

Если они действительно выглядят хорошо и выглядят как целые числа и не превышают максимальных / минимальных значений Integer, вы можете попробовать следующее:

  1. Убедитесь, что вокруг числового значения нет символов «пробел», так как начальный или конечный пробел приведет к сбою преобразования. Возможно, вызов trim() метода для переменной может помочь:
     int i = Integer.parseInt(vars.get("currentPMCount").trim());
     
  2. Если вы сохраните свой скрипт в файл, а затем укажете путь к файлу в утверждении Beanshell, вы получите «проблемный» номер строки
  3. Мой любимый: окружите свой код в блоке try / catch следующим образом:
     try{
        //your code here
    }
    catch (Exception ex){
        log.warn("Error in my script", ex);
        throw ex; // elsewise JMeter will "swallow" the above exception
    }
     

Таким образом, вы получите более информативную трассировку стека вместо паршивого Error invoking bsh method сообщения, которое ничего не говорит.

Дополнительные советы и рекомендации см. в разделе Как использовать BeanShell: руководство по любимым встроенным компонентам JMeter.

Комментарии:

1. Значение currentPMCount равно нулю из-за неправильного регулярного выражения, но выданное сообщение об ошибке было очень расплывчатым для понимания. Спасибо за помощь.