JMeter - легко изменяемые параметры конфигурации - PullRequest
3 голосов
/ 03 марта 2010

Я использую JMeter для загрузки теста веб-службы SOAP.Веб-сервис существует во множестве мест, таких как мой локальный хост, блок разработки, блок интеграции, производственный блок и т. Д.

Я использую пробоотборник запросов WebService (SOAP) и установил «Имя сервера».параметров IP "," Path "и" SOAP Action ", например, так:

Server Name of IP: ${SERVER}
Path: ${PATH}/service
SOAPAction: http://${SERVER}${PATH}service#action

Это прекрасно работает при использовании элемента конфигурации« Определяемые пользователем переменные ».Я просто изменяю СЕРВЕР и ПУТЬ на то, что является специфическим для места, в которое я пытаюсь попасть.Тем не менее, это больше боли в заднице, чем я хочу иметь дело.Я надеялся сделать (и попытался) добавить несколько логических контроллеров If в мою группу потоков и проверить наличие $ {MODE} (еще один UDV) и действовать соответствующим образом, настраивая мой SERVER и PATH.Итак, у меня было что-то вроде

"${MODE}" == "dev"
"${MODE}" == "local"
"${MODE}" == "production"

По одному на каждый If Controller, тогда у меня был дочерний элемент UDV, устанавливающий соответствующие SERVER и PATH.Значения из последнего UDV (в порядке появления в моей группе потоков) всегда использовались, несмотря на мое предположение, что если Controller, возвращающий false, будет препятствовать оценке UDV.Тем не менее, я вижу в документах, что все UDV оцениваются независимо от местоположения до запуска каких-либо потоков.Поэтому вместо этого я попытался использовать пользовательские параметры, но значения $ {SERVER} и $ {PATH} в моем сэмплере SOAP не заменяются, и я делаю запросы к http://${SERVER}${PATH}, что не годится.

Есть ли какой-нибудь элегантный способ справиться с этим?В настоящее время я просто копирую значения для SERVER и PATH каждый раз, когда мне нужно сменить сервер, на который я попал.Я знаю, что у меня также может быть несколько планов тестирования, по одному на каждый сервер, на который я собираюсь загрузить тест, но я часто делаю обновления в структуре, включая добавление новых тестов, отключение существующих тестов и изменение некоторых частей запросов SOAP, так что у меня есть кучаони не кажутся хорошим решением.

Любая помощь?

Ответы [ 2 ]

4 голосов
/ 04 марта 2010

Мы решили эту проблему с помощью сэмплера BeanShell и переменных, определенных в самом плане тестирования.

Вместо использования элемента «Пользовательские переменные» вы можете определить переменные для всего плана тестирования. Просто нажмите на корневой элемент дерева и добавьте переменную с именем «mode» с содержимым «dev», «local» или «production».

В тестовом примере добавьте сэмплер "Bean Shell Sampler" и добавьте следующий код:

if ("dev".equals(vars.get("mode"))) {
 vars.put("server","x.y.z");
}
if ("local".equals(vars.get("mode"))) {
 vars.put("server","127.0.0.1");
}
if ("production".equals(vars.get("mode"))) {
 vars.put("server","10.0.0.10");
}

Затем вы можете определить все необходимые вам переменные, а также добавить другие среды, если это необходимо.

Но вы также можете пойти дальше: Создайте Simple Controller и поместите туда свой образец Bean Shell Sampler. Во всех ThreadGroups вы теперь можете получить доступ к этому простому контроллеру с помощью контроллера модулей. В этом случае вы должны определить селектор среды только один раз для всего плана тестирования.

0 голосов
/ 23 июня 2015

Лично мне гораздо проще иметь несколько модулей UDV, все на верхнем уровне.

Я держу их всех отключенными, кроме той, которую я хочу использовать.

Я вижу, что есть много способов сделать то же самое; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...