it-swarm.com.ru

Управление сессиями/файлами 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 находится на уровне потока, значения будут сохраняться для идентификатора сеанса для каждого потока соответственно? Но что вызывает переопределение значения идентификатора сеанса между потоками?

Любая помощь будет высоко ценится. 

48
Priyank

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

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

Из главы «4.2.2 Логические контроллеры» в http://jmeter.Apache.org/usermanual/test_plan.html .

EDIT: Полагаю, вам следует использовать http://jmeter.Apache.org/usermanual/component_reference.html#Simple_Controller для группировки ваших запросов вместе с Cookie Manager.

46
Andrey Adamovich

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

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

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

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

6
akostadinov

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

1
Isaac

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

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

Затем добавьте менеджер файлов cookie HTTP в ту же группу потоков, что и ваш образец Java. 

Затем в ваш пример Java добавьте:

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());
}
0
user2522062

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

Откройте user.properties, присутствующие в папке bin JMeter

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

CookieManager.check.cookies=false

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

0
Jigish Chawda