main

Нагрузочное тестирование

FAQ по нагрузочному тестированию с Jmeter

Февраль 2, 2015 — 1

При проведении нагрузочного тестирования с помощью Apache Jmeter часто возникают проблемы, связанные с особенностями сетевой инфраструктуры, архитектурой приложения и самим Jmeter’ом. Ниже представлен FAQ по решению наиболее типовых проблем.


При проведении нагрузочного тестирования с помощью Apache Jmeter часто возникают проблемы, связанные с особенностями сетевой инфраструктуры, архитектурой приложения и самим Jmeter’ом. Ниже представлен FAQ по решению наиболее типовых проблем.

Вопросы:

  1. Что требуется для запуска и стабильной работы Jmeter?
  2. При выполнении теста в JMeter возникает ошибка «Out of Memory».
  3. При запуске Jmeter выдает ошибку: «java.exe не является внутренней или внешней командой».
  4. При увеличении Heap Size Jmeter выдает ошибку (Unrecognized VM option ‘+HeapDumpOnOutOfMemoryError’ Could not create the Java virtual machine. errorlevel=1).
  5. Невозможно изменить прокси в настройках параметров локальной сети для HTTP(S) Test Script Recorder.
  6. Как имитировать переходы на страницы с динамическими параметрами?
  7. Как нагружать одновременно два и более серверов?
  8. Как менять пользователя и пароль при каждой авторизации?
  9. Как отследить какие значения принимает переменная при выполнении теста?
  10. Post HTTP Request, содержащий JSON не возвращает значения, но запрос выполняется успешно.
  11. Jmeter не завершает пользовательский сеанс.
  12. Как сделать нагрузочное тестирование из кластера?


В: Что требуется для запуска и стабильной работы Jmeter?

О: Необходим сам пакет Jmeter .Для запуска и дальнейшей работы необходимо установить  Java Runtime Environment  разрядности вашего компьютера.

Последнюю версию Apache Jmeter можно скачать здесь.
Последнюю версию Java Runtime Environment по этой ссылке.
 

В: При выполнении теста в JMeter возникает ошибка «Out of Memory».

О: Для устранения проблемы необходимо увеличить размер памяти (Heap Size) JMeter. Параметр Heap Size меняется таким образом:

  1. Заходим в папку с Jmeter и переходим в папку bin.
  2. Находим файл jmeter с расширением .bat
  3. Нажимаем правой кнопкой мыши и выбираем пункт «Изменить/Edit»
  4. В открывшемся файле необходимо найти строку, изображенную на скриншоте ниже.
  5. Изменять необходимо оба параметра. Первый параметр – начальный объем выделяемой памяти, второй – максимальный объем.

Heap Size Jmeter

В: При запуске Jmeter выдает ошибку: «java.exe не является внутренней или внешней командой».

О: Необходимо проверить переменную Path и выставить верное значение. Проверить или изменить эту переменную можно так: Панель управления -> Система и безопасность -> Система -> Дополнительные параметры системы -> Переменные среды. Дальше выполнить действия аналогично скриншотам ниже:

  1. Зайти в пременные среды и нажать на «Создать..»Переменные среды - настройка Java
  2. Создать переменную «JAVA_HOME». В значение переменной нужно ввести путь к Java на вашем компьютереСоздание переменной JAVA_HOME
  3. После создания переменной необходимо отредактировать переменную Path. В поле значение переменной так же вписать путь JavaИзменение переменной Path


В: При увеличении Heap Size Jmeter выдает ошибку (Unrecognized VM option ‘+HeapDumpOnOutOfMemoryError’ Could not create the Java virtual machine. errorlevel=1).

О: Все дело в Java. Необходимо установить Java RE (ссылка) разрядности, соответствующей вашей операционной системе.

В: Невозможно изменить прокси в настройках параметров локальной сети для HTTP(S) Test Script Recorder.

О: Решение всего одно – получить права доступа, позволяющие изменять данный параметр (чаще всего «администратор»). Проверьте, есть ли возможность подключиться к нагружаемому серверу через «Подключение к удаленному рабочему столу», опять же при условии наличия прав. На сервер так же необходимо установить Java, Jmeter и выставить прокси.

Для записи скриптов в локальной сети необходимо убрать галочку «Не использовать прокси-сервер для…» (п. 5, рис. 1).

Рассмотрим поэтапно настройку Test Scrip Recorder’a:

  1. В окне Jmeter’a выбрать Workbench -> Add -> Non-Test Elements -> HTTP(S) Test Script Recorder. Добавить этот элемент в Workbench
  2. В тест план необходимо добавить Thread Group.
  3. В Thread Group, в свою очередь, нужно занести следующее: Add -> Logic Controller -> Recording Controller.
  4. Зайти в Панель управления -> Сеть и Интернет -> Свойства браузера -> Подключение -> Настройка сети (рис. 1).
  5. Поставить галочку напротив «Использовать прокси-сервер…», ввести в первое поле localhost, а во второе используемый порт (порт в Jmeter должен совпадать со вторым полем этого пункта (рис. 2)).
  6. Нажимаем ОК. Возвращаемся в Jmeter, переходим на HTTP(S) Test Script Recorder и нажимаем Start. Запись запущена. Теперь все запросы будут попадать в раздел Recording Controller.

Вот подробное описание записи скриптов от самого Jmeter’a: ссылка.

Рисунок 1Настройка сети

Рисунок 2

Прокси-сервер настройка

В: Как имитировать переходы на страницы с динамическими параметрами?

О: Необходимо выявить момент, когда генерируется интересующий параметр. Алгоритм поиска такой:

  1. Записываем сценарий в результате, которого получаем параметризированную страницу.
  2. Recording controller JmeterДалее воспроизводим записанную последовательность в Jmeter, анализируя результаты с помощью View Result Tree (Listener).
  3. Из запросов копируем интересующий нас параметр.8
  1. Открываем по очереди все запросы теста в Result Tree на вкладке Response Data и с помощью поиска внизу страницы ищем искомое.
  1. Открываются запросы до тех пор, пока они находятся выше параметризируемого.
  2. Если нам встречается искомое, то ставим на него Post Processors-> Regular Expression Extractor.Regular Expression Extractor Jmeter

11

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

Описание регулярных выражений Jmeter можно найти здесь.

Удобная шпаргалка по регулярным выражениям.

В: Как нагружать одновременно два и более серверов?

О: Для этого достаточно создать для каждого сервера свой Thread Group. Пример:

Есть два сервера server1.ru и server2.ru. В одном Thread Group или Logic Conroller всем запросам прописываем server1.ru в поле Server Name or IP, а во втором server2.ru.

Они будут работать параллельно.

В: Как менять пользователя и пароль при каждой авторизации?

О: Лучшим решением будет подгружать логин и пароль из CSV файла. Для этого используется CSV Data Set Config, где значение, взятое из файла, заносится в переменную, которую потом можно будет использовать в HTTP Authorization Manager. Для этого:

  1. Создадим CSV файл.
  2. Добавим CSV Data Set Config, в котором заполнить:
    1. Поле Filename, которое должно включать полный путь к файлу, имя файла и его расширение (C:Windowstest.csv).
    2. Поле Variable Names. Содержит названия переменных, в которое заносятся значения из файла. Разделять их следует запятыми (рис. 3).
  3. Вставить параметры в необходимые поля (пример с HTTP Authorization Manager рис. 4)

Рисунок 3
CSV Data Set Config Jmeter

Рисунок 4

13

Описание CSV Data Set Config на сайте Jmeter.


В: Как отследить какие значения принимает переменная при выполнении теста?

О: Это легко делается с помощью Debug Sampler. Ставим его в нужное нам место сценария, в конце сценария создаем Listener View Results Tree. Найдя Debug Sampler в дереве запросов, можно увидеть значения всех используемых в тесте переменных.14
Debug Sampler используется в основном для отладки скриптов. На хабре есть отличная статья про это.

Описание Debug Sampler на сайте Jmeter’a.

15


В: Post HTTP Request, содержащий JSON не возвращает значения, но запрос выполняется успешно. 21

О: Данную проблему можно решить изменением параметра Implementation на «Java» в опциях HTTP Request. 17

После выставления данного параметра получаем успешный запрос, содержащий информацию:

Безымянный


В: Jmeter не завершает пользовательский сеанс.

О: Дело в том, что после выполнения сценария Jmeter не закрывает поток. Завершение потоков в Jmeter решается путем добавления Test Action’a в Thread Group (Add -> Sampler -> Test Action) с параметром «Stop» в конце Thread Group.

19


В: Как сделать нагрузочное тестирование из кластера?

О: Краткая инструкция по настройке:

Выставить на основном компьютере IP адреса дополнительных компьютеров.

  1. На дополнительных компьютерах, установив java и предварительно изменив Heap Size, запустить сервер.
  2. Открыть Jmeter,открыть свой тест план Run -> Remote Start All. Запустить данный тест план на всех дополнительных компьютерах и на основном.

Число потоков указано в правом верхнем углу окна Jmeter.20

Подробное описание со всеми нюансами на сайте Jmeter’a.

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

Кирилл Юрков

One comment

  • Артём

    Октябрь 19, 2017 at 10:42

    Влияет ли на производительность jmeter ошибки рядом с восклицательным знаком, может ли из-за этого виснуть jmeter? Из-за чего эти ошибки возникают и как с ними бороться??

    Reply

Оставьте комментарий

Адрес вашей почты не будет отображаться в комментарии. Обязательные поля отмечены символом *