2010-03-03 2 views
3

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

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

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

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

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

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

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

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

+1

Что о наличие нескольких UDVs (названный в честь вашей среды) и отключить все, кроме одного, что нужно? – aromero

ответ

4

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

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

В TestCase добавить Sampler «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"); 
} 

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

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

+1

+1. Благодарю. Я исследую это как решение. Тем не менее, я заставил его работать так, как он был у меня, мне просто нужно было определить переменные SERVER и PATH за пределами группы потоков, а затем переопределить их с помощью If Controller -> User Parameters. – sberry

0

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

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

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

Смежные вопросы