2016-10-03 2 views
1

У меня проблема с Integer в JMeter Beanshell Sampler/Pre/Post процессор. У меня есть некоторый массив значений, и я хочу использовать каждое значение этого массива для установки JMeterProperty для следующего использования.JMeter Beanshell Integer Error

GOAL> имеет несколько строк из запроса. Для примера столбец UPSTREAM имеет значения diff, и мне нужно его сохранить для последующего использования. Потому что я буду использовать их для вызова CMD.exe в качестве параметров с помощью «OS Processes Sampler».

So, if UPSTREAM_1=XXX, UPSTREAM_2=AAA, 
CMD.EXE will looks like: CMD.EXE -upstream_1 -upstream_2, etc. 

С SQL я получил массив значений

COUNT=31 
UPSTREAM_#=31 
UPSTREAM_1=XXX 
UPSTREAM_2=AAA 
.... 

В постпроцессор я установил:

${__setProperty(COUNT, ${COUNT_1})}; 

Я пытаюсь это scrpit:

import java.util.*; 
import java.text.*; 
import java.io.*; 

int max = Integer.parseInt(vars.get(${COUNT_1})); //--COUNT=31, Integer doesnt work 
int n = vars.get(${COUNT_1}); //--COUNT=31, this also doesnt work 

for (int i=1;i<=n;i++) 
{ 
    ${__setProperty(UPSTREAM_i, ${UPSTREAM_i})}; 
} 

Но журнал JMeter сказать, что не знаете «INT»

2016/10/03 14:52:13 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: `` import java.util.*; import java.text.*; import java.io.*; int max = Integer.p . . . '' : Typed variable declaration : Error in method invocation: Method get(int) not found in class'org.apache.jmeter.threads.JMeterVariables' 
2016/10/03 14:52:13 WARN - jmeter.protocol.java.sampler.BeanShellSampler: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: `` import java.util.*; import java.text.*; import java.io.*; int max = Integer.p . . . '' : Typed variable declaration : Error in method invocation: Method get(int) not found in class'org.apache.jmeter.threads.JMeterVariables' 

Может кто-нибудь мне помочь? Может быть, я пропустил некоторые библиотеки или что-то в этом роде. JRE/JDK у меня есть.


UPDATE_1

Переменные пользователя все:

COUNT ${__property(COUNT)} Count of Rows from SQL Query 

Test_Plan:

enter image description here

постпроцессор Вход:

SamplerProperties: 
variableNames=DATE,DOWNSTREAM,UPSTREAM,COUNT,etc. 

JMeterVariables: 
COUNT=31 
COUNT_#=31 
COUNT_1=31 
COUNT_2=31 
..... 
DATE_#=31 
DATE_1=04.10.2016 
DATE_2=04.10.2016 
..... 
DOWNSTREAM_#=31 
DOWNSTREAM_1=DDD11 
DOWNSTREAM_2=DDD11 
..... 
UPSTREAM_#=31 
UPSTREAM_1=XXX 
UPSTREAM_2=AAA 
.... 
JMeterProperties: 
COUNT= 31 
DATE= 04.10.2016 
DOWNSTREAM= DDD11 
TEST= 1 

журнала отладки Loop:

SamplerProperties: 
BeanShellSampler.query=import java.util.*; 
import java.text.*; 
import java.io.*; 
int n = Integer.parseInt(vars.get("COUNT")); 
for (int i=1;i<=n;i++) 
{ 
     props.setProperty("UPSTREAM_"+i, vars.get("UPSTREAM_i")); 
} 
    JMeterVariables: 
    COUNT=31 
    COUNT_#=31 
    COUNT_1=31 
    COUNT_2=31 
    ..... 
    DATE_#=31 
    DATE_1=04.10.2016 
    DATE_2=04.10.2016 
    ..... 
    DOWNSTREAM_#=31 
    DOWNSTREAM_1=DDD11 
    DOWNSTREAM_2=DDD11 
    ..... 
    UPSTREAM_#=31 
    UPSTREAM_1=XXX 
    UPSTREAM_2=AAA 
    .... 
    JMeterProperties: 
    COUNT= 31 
    DATE= 04.10.2016 
    DOWNSTREAM= DDD11 
    TEST= 1 

Это в JMeter журнале теперь: решение

2016/10/03 17:12:24 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Method Invocation props.setProperty 
2016/10/03 17:12:24 WARN - jmeter.protocol.java.sampler.BeanShellSampler: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Method Invocation props.setProperty 

UPDATE_2

Ubik упакуйте в разница между покупной и продажной ценой акции работает :) ГОАЛ обновляется.

ответ

0

Вашего Beanshell скрипт имеет много ошибок:

import java.util.*; 
import java.text.*; 
import java.io.*; 
int n = Integer.parseInt(vars.get("COUNT")); 
for (int i=1;i<=n;i++) 
{ 
     props.setProperty("UPSTREAM_"+i, vars.get("UPSTREAM_"+i)); 
} 

Обратите внимание, что вы делаете настройки в реквизита (глобальный), что вы получите от Варса (специфичного для каждого пользователя), так что это может быть неправильными.

Read:

+0

Beanshell образцы все еще есть некоторые проблемы .. Response code: 500 Response message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval \t Sourced file: inline evaluation of: ''import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Typed variable declaration : Method Invocation Integer.parseInt

+0

вы уверены, что COUNT действительно определяется как переменная? Можете ли вы показать свой план тестирования? Добавьте DebugPostProcessor перед Beanshell PostProcessor и покажите вывод? Thx –

+0

no COUNT также приходит из SQL. Но когда я устанавливаю GLOBAL VAR в User Defined Variables 'COUNT = $ {__ property (COUNT)}', он возвращает еще одну ошибку 'int n = Integer.pa. , , '': Метод Invocation props.setProperty ' –

0

Я не знаю, что вы пытаетесь достичь, есть несколько проблем с вашим подходом.

  1. ${__setProperty(COUNT, ${COUNT_1})};

        ^here you set an extra space before the value 
    

    Кроме того, чтобы быть полностью ясно, vars и props разные звери, и они не имеют ничего общего. Если вы установили свойство через функцию __setProperty, вы не сможете получить к нему доступ через vars.get(), вместо этого вам придется использовать props.get().

  2. vars.get(${COUNT_1}) не будет работать, вы должны изменить его на один из следующих:

    • `vars.get ("COUNT_1");
    • `$ {} COUNT_1

    В общем случае не рекомендуется встроенных функций JMeter и переменные в Beanshell (и другие) скрипты, так как они могут быть истолкованы по-разному в зависимости от их стоимости.

  3. Что касаемо

    метод получить (INT) не найден в class'org.apache.jmeter.threads.JMeterVariables'

    Я не знаю, как вам удалось поставить целое число в JMeter переменных, но если вы сделали, вы должны быть к нему доступ с помощью функции vars.getObject() как

    int n = vars.getObject("COUNT"); 
    
  4. УСТРАНЕНИЕ ладо совет: окружить код с try block, вы сможете получить путь более информативные сообщения об ошибках в jmeter.log файл как:

    try { 
        //your code here 
    } 
    catch (Throwable ex) { 
        log.error("something wrong", ex); 
        throw ex; 
    } 
    

Я также рекомендую к ознакомлению с Debugging JDBC Sampler Results in JMeter гидом

+0

Thx тоже, я просто обновил цель в начале вопроса –