Перейти к содержимому

Фотография

Как вызвать метод написаный в BeanShell PreProcessor


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 05 марта 2012 - 12:58

Всем привет.

Есть несколько HTTP Request подряд.
И есть BeanShell PreProcessor компонент в котором реализована функция.
Функция в качестве параметра принимает строку. Выполняет над этой строкой некоторые действия и возвращает тоже строку.
Нужно в поле Path каждого HTTP Request вызвать эту функцию передав в качестве параметра уникальную строку и что бы строка которую возвращает эта функция подставлялась в поле Path.

Если кто знает как можно это сделать (вызвать метод из поля Path компонента HTTP Request), подскажите пожалуйста.
  • 0

#2 player1

player1

    Новый участник

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Шайдров Павел
  • Город:Лимассол


Отправлено 05 марта 2012 - 13:10

facepalm

BeanShell PreProcessor не нужно вызывать, он вызывается автоматически перед отправкой запроса.
Для того, чтобы передать значение переменной JMeter_variable_name из Jmeter в BeanShell PreProcessor необходимо либо заполнить поле Parameters ${JMeter_variable_name} и далее из BS вызывать bsh.args[0] (ни разу не пробовал), либо вызывать изнутри BeanShell PreProcessor'а:
String BS_Variable_Name = vars.get("JMeter_variable_name");

Для того, чтобы использовать результаты выполнения BeanShell PreProcessor'а далее в JMeter необходимо вызывать изнутри BeanShell:
vars.put("JMeter_result_variable",BS_Result_Variable);

После этого в качестве Path используй ${JMeter_result_variable}

Наверняка есть ещё способ оформление этой функции в виде кастомной функции, встроенной в JMeter, но я не делал такого, посему описать не могу. Гуглите, если описанные выше методы не подходят.
  • 0

#3 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 05 марта 2012 - 13:30

facepalm

BeanShell PreProcessor не нужно вызывать, он вызывается автоматически перед отправкой запроса.
Для того, чтобы передать значение переменной JMeter_variable_name из Jmeter в BeanShell PreProcessor необходимо либо заполнить поле Parameters ${JMeter_variable_name} и далее из BS вызывать bsh.args[0] (ни разу не пробовал), либо вызывать изнутри BeanShell PreProcessor'а:

String BS_Variable_Name = vars.get("JMeter_variable_name");

Для того, чтобы использовать результаты выполнения BeanShell PreProcessor'а далее в JMeter необходимо вызывать изнутри BeanShell:
vars.put("JMeter_result_variable",BS_Result_Variable);

После этого в качестве Path используй ${JMeter_result_variable}

Наверняка есть ещё способ оформление этой функции в виде кастомной функции, встроенной в JMeter, но я не делал такого, посему описать не могу. Гуглите, если описанные выше методы не подходят.


Да, это все понятно.
Проблема в том что "JMeter_variable_name" для каждого запроса должна быть разная. Я пробовал сделать для каждого запроса свой User Defined Variables и задавать там значение переменной. Но проблема в том что имя переменной в каждом компоненте одно, и уже при выполнении первого запроса эта переменная инициализирована последним значением.
Поэтому я и написал в BeanShell PreProcessor не просто код, а именно метод с именем, входящими параметрами и т.д.
Что то типа такого:

String testMethod(String a)
{
return a + "test message";
}
Но как его вызвать???


=======================================================
Немного добавлю сути.
Суть в том что нужно сформировать http запрос. Нужно в поле Path (обозначено на прикрепленном скрине) вызвать метод вида:
getRequest(test.json), который сформирует нужный мне url вида: https://server.com/t...json?param1=... И вернет в это же поле этот сформированный url.

Либо, если можно это сделать как-то по другому подскажите пожалуйста.

Прикрепленный файл  05.03.png   16,67К   40 Количество загрузок:
  • 0

#4 player1

player1

    Новый участник

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Шайдров Павел
  • Город:Лимассол


Отправлено 05 марта 2012 - 21:34

яничегонепонял

Засовывай все значения переменной в CSV файл и считывай их при помощи CSV Data Set Config с параметром Sharing mode=All threads (вроде так). В результате у тебя каждый поток при обработке CSV Data Set Config будет считывать из указанного файла каждый раз следующее значение. И для каждого треда в этой переменной будет хранится своё значение.

Про "суть токова" не понял абсолютно совсем вообще ничего.
Тебе не кажется что ты пытаешься изобрести велосипед? Ты же ведь читал http://bit.ly/x4HxYD ? Всмысли что ты же знаешь, что чтобы просто открыть url _https://server.com/test.json?param1=... тебе не надо формировать его полностью руками, а надо указать следующие параметры в сэмплере HTTP Request:
Server Name: server.com
Port: если URL что ты указал правильный, то либо ничего, либо 80, но я подозреваю, что там должно быть 443 (в общем зависит от того на каком порту у вас https)
Method: GET
Protocol: https
Path: test.json
и потом уже в параметрах указывать имена и значения параметров. При этом каждое из вышеперечисленых полей (ну кроме что Method) могут быть заданы при помощи переменных, которые можгут быть либо одни для всех потоков, например, если они указаны в User Defined Variables, либо у каждого потока своё значение, если оно задаётся при помощи CSV Data Set Config с параметром Sharing mode=All threads
  • 0

#5 fesd

fesd

    Опытный участник

  • Members
  • PipPipPipPip
  • 262 сообщений

Отправлено 06 марта 2012 - 05:40

Если я правильно понял, то нужно просто сделать так:

Прикрепленные файлы

  • Прикрепленный файл  st.png   27,96К   47 Количество загрузок:

  • 0

#6 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 06 марта 2012 - 06:51

яничегонепонял

Засовывай все значения переменной в CSV файл и считывай их при помощи CSV Data Set Config с параметром Sharing mode=All threads (вроде так). В результате у тебя каждый поток при обработке CSV Data Set Config будет считывать из указанного файла каждый раз следующее значение. И для каждого треда в этой переменной будет хранится своё значение.

Про "суть токова" не понял абсолютно совсем вообще ничего.
Тебе не кажется что ты пытаешься изобрести велосипед? Ты же ведь читал http://bit.ly/x4HxYD ? Всмысли что ты же знаешь, что чтобы просто открыть url _https://server.com/test.json?param1=... тебе не надо формировать его полностью руками, а надо указать следующие параметры в сэмплере HTTP Request:
Server Name: server.com
Port: если URL что ты указал правильный, то либо ничего, либо 80, но я подозреваю, что там должно быть 443 (в общем зависит от того на каком порту у вас https)
Method: GET
Protocol: https
Path: test.json
и потом уже в параметрах указывать имена и значения параметров. При этом каждое из вышеперечисленых полей (ну кроме что Method) могут быть заданы при помощи переменных, которые можгут быть либо одни для всех потоков, например, если они указаны в User Defined Variables, либо у каждого потока своё значение, если оно задаётся при помощи CSV Data Set Config с параметром Sharing mode=All threads


Спасибо за ответы.
Да, конечно все это я знаю. И конечно я и сам подозреваю что пытаюсь сделать что-то что уже сделано до меня.
Но использовать csv файл будет очень не удобно. По поводу формирования запроса я согласен, но дело в том что без BeanShell мне в любом случае не обойтись, так как там реализована логика по кастомной авторизации запроса на сервере, в которой естественно участвует весь url.

fesd, где то так я сейчас и сделал. Но просто не хочется с каждым HTTP Request тащить скрипт, так как код один и тот же.
  • 0

#7 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 06 марта 2012 - 07:11

Может я что-то не понимаю. Как передать значение из поля Path HTTP Request'а в скрипт на BeanShell?
  • 0

#8 player1

player1

    Новый участник

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Шайдров Павел
  • Город:Лимассол


Отправлено 06 марта 2012 - 12:05

чем неудобно использование CSV? данные динамические? Используя CSV можно вообще по-варварски сгенерировать заранее все УРЛы по который пройтись надо и проходитьсебе спокойно.

Про авторизацию опять таки не очень понятно. Ну что она может быть хитрая -- да, но там что, ID сессии надо вставлять в каждый запрос? Почему тогда нельзя сгенерировать один раз при авторизации, сохранить в переменную и использовать далее по мере надобности.

Про "Как передать значение из поля Path" -- никак. Либо это адский overhead, ИМХО.
Пользуй переменные.
  • 0

#9 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 06 марта 2012 - 12:32

чем неудобно использование CSV? данные динамические? Используя CSV можно вообще по-варварски сгенерировать заранее все УРЛы по который пройтись надо и проходитьсебе спокойно.

Про авторизацию опять таки не очень понятно. Ну что она может быть хитрая -- да, но там что, ID сессии надо вставлять в каждый запрос? Почему тогда нельзя сгенерировать один раз при авторизации, сохранить в переменную и использовать далее по мере надобности.

Про "Как передать значение из поля Path" -- никак. Либо это адский overhead, ИМХО.
Пользуй переменные.


CSV неудобно потому что будет дублирование данных. И в данном случае его будет неудобно поддерживать.
Сгенерировать заранее все УРЛы уже пройденный этап. Именно для того что бы уйти от этого я все и затеял. ИМХО хардкод - это плохо.
Сгенерировать один раз хэдер для авторизации нельзя, т.к. он зависит от УРЛа, а он постоянно другой.
  • 0

#10 player1

player1

    Новый участник

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Шайдров Павел
  • Город:Лимассол


Отправлено 06 марта 2012 - 14:29

Адский ад. Либо я чего-то недопонимаю или недопредставляю.

Ежели надо всё настолько сурово кастомно, то ИМХО прощще попросить программистов наваять на яве код отсылки запроса и использовать этот код в BeanShell Sampler.
  • 0

#11 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 06 марта 2012 - 14:49

Адский ад. Либо я чего-то недопонимаю или недопредставляю.

Ежели надо всё настолько сурово кастомно, то ИМХО прощще попросить программистов наваять на яве код отсылки запроса и использовать этот код в BeanShell Sampler.


Да, мы не ищем легких путей.
А на самом деле наваять код никого просить не надо. Это я и сам могу сделать, что вообщем то и сделал. :)
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных