JMeter - странное поведение, когда переменные используются в CookieManager
JMeter версия 2.13 r1665067
Поэтому у меня возникают некоторые проблемы при использовании пользовательских переменных и / или переменных свойств JMeter внутри CookieManager.
Если я использую переменную в качестве значения для Cookie внутри CookieManager, независимо от того, является ли это Var определяемым пользователем или свойством Var, у меня возникает та же проблема при попытке просмотреть значения (значения) Cookie внутри BeanShell Pre и PostProcessor.
Если мой менеджер файлов cookie имеет следующее: * 1-я строка - при использовании переменной свойств, а 2-я строка - при использовании переменной из пользовательской переменной, * К вашему сведению, обе строки НЕ используются одновременно:
CookieManager:
NAME VALUE DOMAIN PATH
1st) MYID ${__P(propCookie)} www.mydomain.com /
OR
2nd) MYID ${userCookie} www.mydomain.com /
Переменная propCookie передается в CLI или определяется в файле.properties, как показано ниже:
COMMAND-LINE --> -JpropCookie=SRV1
IN PROP FILE --> propCookie=SRV1
И переменная userCookie определяется внутри элемента конфигурации пользовательских переменных следующим образом:
NAME VALUE DESCRIPTION
userCookie ${__P(propCookie)} User var using prop variable as value
Затем, когда я запускаю свой тест, я вижу на вкладке "Запрос" в дереве результатов, что он показывает cookie и ему назначено правильное значение, что хорошо... Но когда я пытаюсь просмотреть файлы cookie в BeanShell Pre/Post-Processor, он просто показывает переменную, а НЕ фактическое значение.
Код препроцессора BeanShell
import org.apache.jmeter.protocol.http.control.Cookie;
import org.apache.jmeter.protocol.http.control.CookieManager;
log.info("### Inside BeanShell PreProcessor:");
CookieManager manager = sampler.getCookieManager();
log.info("Cookie Count = '" + manager.getCookieCount() + "'");
for (int i = 0; i < manager.getCookieCount(); i++) {
Cookie cookie = manager.get(i);
log.info("\t\t Cookie.getName() = '" + cookie.getName() + "'");
log.info("\t\t Cookie.getValue() = '" + cookie.getValue() + "'");
}
Вот вывод сценария BeanShell в журнале:
2015/04/29 14:33:00 INFO - jmeter.util.BeanShellTestElement: ### Inside BeanShell PreProcessor:
2015/04/29 14:45:58 INFO - jmeter.util.BeanShellTestElement: Cookie Count = '1'
2015/04/29 14:33:00 INFO - jmeter.util.BeanShellTestElement: Cookie.getName() = 'MYID'
2015/04/29 14:33:00 INFO - jmeter.util.BeanShellTestElement: Cookie.getValue() = '${userCookie}'
Таким образом, как вы можете видеть в выходных данных BeanShell, функция getValue() печатает переменную, присвоенную значению Cookie, точно так же, как это -> " $ {userCookie} ", а НЕ то, что является фактическим значением Cookie, а это " SRV1 "...
Наконец, если я пытаюсь использовать переменную "COOKIE_", которая должна создаваться автоматически, и я использую ее в BeanShell, vars.get ("COOKIE_MYID"), она выводит "null" каждый раз... У меня есть все правильные свойства Cookie установлены в файле jmeter.properties, как здесь, так что я не уверен, в чем проблема:
CookieManager.allow_variable_cookies=true
CookieManager.save.cookies=true
CookieManager.name.prefix=COOKIE_
Я в значительной степени озадачен тем, почему это происходит, поэтому, если у кого-то есть идеи, почему это происходит, пожалуйста, не стесняйтесь, это будет высоко оценено!
Заранее спасибо,
Matt
1 ответ
HTTP Request Sampler фактически устанавливает cookie с помощью CookieManager's getCookieHeaderForURL
метод, который подставляет значение правильно.
В бобовой оболочке,
import org.apache.jmeter.protocol.http.control.Cookie;
import org.apache.jmeter.protocol.http.control.CookieManager;
manager = sampler.getCookieManager();
log.info(manager.getCookieHeaderForURL(new URL("http://www.google.com"))); //update the URL
Это дает куки с обновленными значениями.
Методы получения и добавления CookieManager используются для получения и добавления файлов cookie в HTTP Cookie Manager
во время выполнения. Так, getValue
Метод дает значение как есть. getCookieHeaderForURL
получает соответствующие файлы cookie от диспетчера файлов cookie для домена с обновленными значениями.