Как вызвать метод написаный в BeanShell PreProcessor
#1
Отправлено 05 марта 2012 - 12:58
Есть несколько HTTP Request подряд.
И есть BeanShell PreProcessor компонент в котором реализована функция.
Функция в качестве параметра принимает строку. Выполняет над этой строкой некоторые действия и возвращает тоже строку.
Нужно в поле Path каждого HTTP Request вызвать эту функцию передав в качестве параметра уникальную строку и что бы строка которую возвращает эта функция подставлялась в поле Path.
Если кто знает как можно это сделать (вызвать метод из поля Path компонента HTTP Request), подскажите пожалуйста.
#2
Отправлено 05 марта 2012 - 13:10
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, но я не делал такого, посему описать не могу. Гуглите, если описанные выше методы не подходят.
#3
Отправлено 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 Количество загрузок:
#4
Отправлено 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
#5
Отправлено 06 марта 2012 - 05:40
Прикрепленные файлы
#6
Отправлено 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 тащить скрипт, так как код один и тот же.
#7
Отправлено 06 марта 2012 - 07:11
#8
Отправлено 06 марта 2012 - 12:05
Про авторизацию опять таки не очень понятно. Ну что она может быть хитрая -- да, но там что, ID сессии надо вставлять в каждый запрос? Почему тогда нельзя сгенерировать один раз при авторизации, сохранить в переменную и использовать далее по мере надобности.
Про "Как передать значение из поля Path" -- никак. Либо это адский overhead, ИМХО.
Пользуй переменные.
#9
Отправлено 06 марта 2012 - 12:32
чем неудобно использование CSV? данные динамические? Используя CSV можно вообще по-варварски сгенерировать заранее все УРЛы по который пройтись надо и проходитьсебе спокойно.
Про авторизацию опять таки не очень понятно. Ну что она может быть хитрая -- да, но там что, ID сессии надо вставлять в каждый запрос? Почему тогда нельзя сгенерировать один раз при авторизации, сохранить в переменную и использовать далее по мере надобности.
Про "Как передать значение из поля Path" -- никак. Либо это адский overhead, ИМХО.
Пользуй переменные.
CSV неудобно потому что будет дублирование данных. И в данном случае его будет неудобно поддерживать.
Сгенерировать заранее все УРЛы уже пройденный этап. Именно для того что бы уйти от этого я все и затеял. ИМХО хардкод - это плохо.
Сгенерировать один раз хэдер для авторизации нельзя, т.к. он зависит от УРЛа, а он постоянно другой.
#10
Отправлено 06 марта 2012 - 14:29
Ежели надо всё настолько сурово кастомно, то ИМХО прощще попросить программистов наваять на яве код отсылки запроса и использовать этот код в BeanShell Sampler.
#11
Отправлено 06 марта 2012 - 14:49
Адский ад. Либо я чего-то недопонимаю или недопредставляю.
Ежели надо всё настолько сурово кастомно, то ИМХО прощще попросить программистов наваять на яве код отсылки запроса и использовать этот код в BeanShell Sampler.
Да, мы не ищем легких путей.
А на самом деле наваять код никого просить не надо. Это я и сам могу сделать, что вообщем то и сделал. :)
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных