Обновите переменные Jmeter с помощью beanshell

Я столкнулся с проблемой при попытке обновить переменную Jmeter с помощью скрипта beanshell. Я следил за этим руководством и видел в этой теме, и оба говорят об одном и том же:

  1. Чтобы обновить переменную, используйте vars.put("variable", "newValue");
  2. Введенное вами значение может быть только строкой.

Теперь я хочу использовать этот код:

String x = vars.get("counter");

int y = Integer.parseInt(x);
y = y + 1;

String z = "" + y;

vars.put("counter", z);
// print(z);

Мой счетчик переменных - это пользовательский параметр (ранее использовавшийся как пользовательская переменная) со значением 1. Я вижу, что мой скрипт работает, потому что print (z) возвращает значение 2. Теперь я также заявляю, что мой счетчик переменных обновляется в параметры пользователя, так что когда я снова запускаю его, он дает мне значение 3. Это не так: значение не обновляется, поэтому каждый раз, когда я запускаю сценарий, он возвращает мне значение 2.

Кто-нибудь может мне с этим помочь?


person Bastian    schedule 30.09.2015    source источник


Ответы (2)


Я не вижу проблем в вашем сценарии. Должно работать нормально.

Помните, что все эти переменные beanshell специфичны для потока. То есть, если Thread1 увеличивает его до 2, текущее значение counter для Thread2 все равно будет 1.

Я думаю, вы запускаете свой тест для большего количества потоков / пользователей всего за одну итерацию. Вот почему он печатает 2 для всех пользователей. Если у вас есть больше счетчиков циклов / установите его на вечность, счетчик будет увеличиваться.

Вы можете загрузить свой файл jmx, если он по-прежнему не решает проблему.


РЕДАКТИРОВАТЬ:

Я только что проверил ваш тест jmeter. Даже если вы увеличиваете значение счетчика на 1 в Beanshell Sampler, Yolu устанавливает счетчик обратно на 1 как часть User Parameters. Убери это. После их удаления у меня все работает нормально.

person vins    schedule 30.09.2015
comment
Большое спасибо за быстрый ответ! К сожалению, я не смог заставить его работать. Я установил счетчик циклов на вечность, используя только один поток. Это не помогло. Также я ожидаю, что, когда я запустил все один раз, мой счетчик переменных обновится. Если я снова запущу все вручную, оно возьмет мое новое значение и снова обновит его. В любом случае: вот мой файл .jmx. Надеюсь, у вас есть решение для этого. Заранее спасибо! - person Bastian; 01.10.2015
comment
Это почти все! Теперь я вижу, что это работает. Супер! Это может быть невозможно, но для полного удовлетворения моих потребностей я также хотел бы сохранить последнее значение, которое было сгенерировано с помощью beanshell scirpt, в определяемых пользователем переменных. Как вы думаете, это можно сделать? - person Bastian; 01.10.2015
comment
Что вы имеете в виду, говоря о том, что хотите сэкономить? Область переменных Beanshell находится только в пределах продолжительности теста. Если вы хотите где-то сохранить значение, вам нужно записать его в файл DB / CSV / TXT ... и т. Д. Вы не можете сохранить это в самом JMeter !! - person vins; 01.10.2015
comment
@Bastian, если это сработает и я разъяснил ваш вопрос, примите это как ответ, нажав на галочку! - person vins; 01.10.2015

Поместите менеджер файлов cookie в свой сценарий, и все будет в порядке.

Теперь у вас есть глобальная переменная counter = 1, в одном запросе вы используете счетчик локальной переменной и установите для него значение 2. Когда другой запрос пытается получить значение counter, он получает глобальное значение 1, потому что локальная переменная уничтожена.

person Imlus    schedule 01.10.2015
comment
Кроме того, не отказывайтесь от идеи цикла, поскольку потоки независимы и начинаются со значений по умолчанию. - person Imlus; 01.10.2015
comment
Спасибо за ответы! Я удалил глобальную переменную counter = 1. Теперь у меня есть только локальная переменная counter = 1. Я не знаю, что делает менеджер файлов cookie и как он мне поможет? Я вспоминаю идею менеджера файлов cookie в том же сеансе? Идея этого счетчика состоит в том, что я могу отправлять одно и то же сообщение JMS несколько раз в день, чтобы (1) сообщение не повторялось и (2) я мог видеть, сколько раз было отправлено одно и то же сообщение. - person Bastian; 01.10.2015
comment
Вы можете рассматривать диспетчер файлов cookie как локальное хранилище переменных - он хранит все ваши локальные значения для этого потока (пользователя), такие как sessionid, локальный счетчик и так далее. Вам не нужно удалять глобальный, вам просто нужен менеджер файлов cookie, чтобы ваш поток запомнил локальный до завершения сеанса. - person Imlus; 01.10.2015