Управление сеансами / файлами cookie в Apache JMeter

у нас есть простой тест производительности в приложении.

  1. мы входа
  2. поиск на основе некоторых критериев
  3. повторите поиск различных параметров.

мы используем Jmeter для тестирования производительности. Нам нужно запустить несколько потоков, чтобы проверить это масштабируемым образом.

способ, которым мы в настоящее время это устроили:

-Test Plan
  - Thread Group
      - Cookie Manager
      - Login To application
      - Search on param 1
      - Search on param 2
  - results summary table
  - Summary report

таким образом, в основном у нас есть сводная таблица возврата и отчет присутствует на уровне плана, в то время как диспетчер cookie присутствует на уровне группы потоков.

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

Я достиг этого результата с наблюдением:
1. Если я запускаю несколько потоков, действителен только последний поток ответы в дереве сводки результатов
2. Если я запускаю с 2 потоками с периодом нарастания как 10 секунд, что означает, что каждый поток получает время, чтобы закончить себя, то оба они работают успешно.

в соответствии с моим пониманием каждого входа в поток в приложение и поскольку cookie manager находится на уровне потока, значения будут поддерживаться для идентификатора сеанса для каждого потока соответственно? Но что вызывает переопределение значения идентификатора сеанса между потоками?

любая помощь будет ценится.

5 ответов


скопировано из документации jmeter:

последним элементом является http Cookie Менеджер. Менеджер файлов Cookie должен быть добавлено во все веб-тесты-в противном случае JMeter будет игнорировать cookies. путем добавления это на уровне группы потоков, мы убедитесь, что все HTTP-запросы поделитесь теми же cookies.

из главы "4.2.2 логические контроллеры" в http://jmeter.apache.org/usermanual/test_plan.html.

редактировать: Я думаю, вы должны использовать http://jmeter.apache.org/usermanual/component_reference.html#Simple_Controller группировать ваши запросы вместе с Cookie Manager.


Я думаю, что ответ Андрея не может помочь. Он цитирует, что каждый запрос будет использовать те же куки, но в соответствии с руководством jmeter:

каждый поток JMeter имеет свою собственную "область хранения cookie".

насколько я понимаю вопрос, вы хотите, чтобы каждый поток разделял один и тот же идентификатор сеанса cookie. Поэтому мне кажется, что вам нужно иметь две группы потоков и выполнять их последовательно. Первая группа потоков (с одним потоком, который выполняется только один раз) должна войдите в систему и сохраните значение cookie сеанса в глобальный параметр (возможно, вам нужно использовать возможности сценариев jmeter). Затем установите этот файл cookie в диспетчере файлов cookie второй группы потоков.

надеюсь, это поможет.


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


попробуйте это:

открыть пользователю.свойства, присутствующие в папке bin JMeter

редактировать его и добавьте следующую строку:

CookieManager.check.cookies=false

сохраните его и запустите скрипт. Надеюсь, это решит вашу проблему.


сначала измените код на:

jmeter.properties
CookieManager.save.cookies=true
CookieManager.name.prefix=mycookie_

затем добавьте http cookie manager в ту же группу потоков, что и ваш Java sampler.

затем в вашем Java sampler добавьте:

JMeterVariables jmv = JMeterContextService.getContext().getVariables();
Iterator<Map.Entry<String,Object>> it = jmv.getIterator();
while(it.hasNext()){
    Map.Entry<String,Object> v = it.next();
    System.out.println("name: " + v.getKey() + " value: " + v.getValue());
}