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 для домена с обновленными значениями.

Другие вопросы по тегам