Jmeter vars.put не сохраняет переменную (препроцессор jsr223 groovy)

Я хочу сохранить переменную в goovy и использовать ее позже

Я получаю свое начальное значение из "пользовательских переменных" (они устанавливаются maven)

но когда я меняю их, а затем кладу, они не хранятся постоянно

поэтому эффект работает следующим образом:

... INFO ...: throughput was: 600
... INFO ...: throughput is now: 720
... INFO ...: throughput is now (get): 720
... INFO ...: throughput is now (get): 720
... INFO ...: throughput is now (get): 600
... INFO ...: throughput is now (get): 600

Сценарий:

org.apache.jmeter.testelement.property.JMeterProperty;


int troughtputEnabled = Integer.parseInt(vars.get("enableTroughput"));
if(troughtputEnabled == 1){
    int req = Integer.parseInt(vars.get("idCounter"));
    int troughput = Integer.parseInt(vars.get("throughput"));
    if (req%100 == 0){
        log.info("throughput was: " +  troughput);
        troughput += 120;
        log.info("throughput is now: " +  troughput);
        vars.put("throughput",troughput+"");
        log.info("throughput is now (get): " +  vars.get("throughput"));
    }
    log.info("throughput is now (get): " +  vars.get("throughput"));

}

Может ли кто-нибудь увидеть, что я здесь делаю не так (журналы предназначены только для отладки)


person Robert Stevens    schedule 17.07.2017    source источник


Ответы (2)


Итак, у меня все заработало:

import org.apache.jmeter.testelement.property.JMeterProperty;
import org.apache.jmeter.util.JMeterUtils;

int troughtputEnabled = Integer.parseInt(vars.get("enableTroughput"));
if(troughtputEnabled == 1){
    int req = Integer.parseInt(vars.get("idCounter"));
    int troughput = Integer.parseInt(vars.get("throughput"));
    if (req%100 == 0){
        log.info("throughput was: " +  troughput);
        troughput += 120;
        log.info("throughput is now: " +  troughput);
        vars.put("throughput",troughput+"");
        log.info("throughput is now (get):---------------- " +  vars.get("throughput"));
        JMeterUtils.setProperty("troughput", troughput +"");

    }
    else
    {
        String tempTroughput = JMeterUtils.getProperty("troughput");
        if (tempTroughput != null && !tempTroughput.equals("")){
            vars.put("throughput",tempTroughput+"");
        }

    }
    log.info("throughput is now (get): " +  vars.get("throughput"));

}

Проблема, похоже, в том, что vars.put работает только для текущего потока

person Robert Stevens    schedule 17.07.2017

в первой итерации вы попадаете внутрь if (req%100 == 0), поэтому локальная переменная увеличивается на 120, вторая итерация не попадает внутрь if (req%100 == 0), поэтому выведите vars.get("throughput"), который остается 600.

Если вы хотите, чтобы переменная обновлялась, просто поместите ее в переменную после troughput += 120;:

vars.put("throughput",   String.valueOf( troughput));
person user7294900    schedule 17.07.2017
comment
Измените на vars.put (throughput, String.valueOf (troughput)); - person user7294900; 17.07.2017