При проведении нагрузочного тестирования с помощью Apache Jmeter часто возникают проблемы, связанные с особенностями сетевой инфраструктуры, архитектурой приложения и самим Jmeter’ом. Ниже представлен FAQ по решению наиболее типовых проблем.
Вопросы:
- Что требуется для запуска и стабильной работы Jmeter?
- При выполнении теста в JMeter возникает ошибка «Out of Memory».
- При запуске Jmeter выдает ошибку: «java.exe не является внутренней или внешней командой».
- При увеличении Heap Size Jmeter выдает ошибку (Unrecognized VM option ‘+HeapDumpOnOutOfMemoryError’ Could not create the Java virtual machine. errorlevel=1).
- Невозможно изменить прокси в настройках параметров локальной сети для HTTP(S) Test Script Recorder.
- Как имитировать переходы на страницы с динамическими параметрами?
- Как нагружать одновременно два и более серверов?
- Как менять пользователя и пароль при каждой авторизации?
- Как отследить какие значения принимает переменная при выполнении теста?
- Post HTTP Request, содержащий JSON не возвращает значения, но запрос выполняется успешно.
- Jmeter не завершает пользовательский сеанс.
- Как сделать нагрузочное тестирование из кластера?
В: Что требуется для запуска и стабильной работы Jmeter?
О: Необходим сам пакет Jmeter .Для запуска и дальнейшей работы необходимо установить Java Runtime Environment разрядности вашего компьютера.
Последнюю версию Apache Jmeter можно скачать здесь.
Последнюю версию Java Runtime Environment по этой ссылке.
В: При выполнении теста в JMeter возникает ошибка «Out of Memory».
О: Для устранения проблемы необходимо увеличить размер памяти (Heap Size) JMeter. Параметр Heap Size меняется таким образом:
- Заходим в папку с Jmeter и переходим в папку bin.
- Находим файл jmeter с расширением .bat
- Нажимаем правой кнопкой мыши и выбираем пункт «Изменить/Edit»
- В открывшемся файле необходимо найти строку, изображенную на скриншоте ниже.
- Изменять необходимо оба параметра. Первый параметр – начальный объем выделяемой памяти, второй – максимальный объем.
В: При запуске Jmeter выдает ошибку: «java.exe не является внутренней или внешней командой».
О: Необходимо проверить переменную Path и выставить верное значение. Проверить или изменить эту переменную можно так: Панель управления -> Система и безопасность -> Система -> Дополнительные параметры системы -> Переменные среды. Дальше выполнить действия аналогично скриншотам ниже:
- Зайти в пременные среды и нажать на «Создать..»
- Создать переменную «JAVA_HOME». В значение переменной нужно ввести путь к Java на вашем компьютере
- После создания переменной необходимо отредактировать переменную Path. В поле значение переменной так же вписать путь Java
В: При увеличении 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:
- В окне Jmeter’a выбрать Workbench -> Add -> Non-Test Elements -> HTTP(S) Test Script Recorder. Добавить этот элемент в Workbench
- В тест план необходимо добавить Thread Group.
- В Thread Group, в свою очередь, нужно занести следующее: Add -> Logic Controller -> Recording Controller.
- Зайти в Панель управления -> Сеть и Интернет -> Свойства браузера -> Подключение -> Настройка сети (рис. 1).
- Поставить галочку напротив «Использовать прокси-сервер…», ввести в первое поле localhost, а во второе используемый порт (порт в Jmeter должен совпадать со вторым полем этого пункта (рис. 2)).
- Нажимаем ОК. Возвращаемся в Jmeter, переходим на HTTP(S) Test Script Recorder и нажимаем Start. Запись запущена. Теперь все запросы будут попадать в раздел Recording Controller.
Вот подробное описание записи скриптов от самого Jmeter’a: ссылка.
Рисунок 1
Рисунок 2
В: Как имитировать переходы на страницы с динамическими параметрами?
О: Необходимо выявить момент, когда генерируется интересующий параметр. Алгоритм поиска такой:
- Записываем сценарий в результате, которого получаем параметризированную страницу.
Далее воспроизводим записанную последовательность в Jmeter, анализируя результаты с помощью View Result Tree (Listener).
- Из запросов копируем интересующий нас параметр.
- Открываем по очереди все запросы теста в Result Tree на вкладке Response Data и с помощью поиска внизу страницы ищем искомое.
- Открываются запросы до тех пор, пока они находятся выше параметризируемого.
- Если нам встречается искомое, то ставим на него Post Processors-> Regular Expression Extractor.
С помощью регулярных выражений можно находить в запросе искомые параметры и заносить полученные значения в переменные, используемые в дальнейшем.
Описание регулярных выражений 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. Для этого:
- Создадим CSV файл.
- Добавим CSV Data Set Config, в котором заполнить:
- Поле Filename, которое должно включать полный путь к файлу, имя файла и его расширение (C:Windowstest.csv).
- Поле Variable Names. Содержит названия переменных, в которое заносятся значения из файла. Разделять их следует запятыми (рис. 3).
- Вставить параметры в необходимые поля (пример с HTTP Authorization Manager рис. 4)
Рисунок 3
Рисунок 4
Описание CSV Data Set Config на сайте Jmeter.
В: Как отследить какие значения принимает переменная при выполнении теста?
О: Это легко делается с помощью Debug Sampler. Ставим его в нужное нам место сценария, в конце сценария создаем Listener View Results Tree. Найдя Debug Sampler в дереве запросов, можно увидеть значения всех используемых в тесте переменных.
Debug Sampler используется в основном для отладки скриптов. На хабре есть отличная статья про это.
Описание Debug Sampler на сайте Jmeter’a.
В: Post HTTP Request, содержащий JSON не возвращает значения, но запрос выполняется успешно.
О: Данную проблему можно решить изменением параметра Implementation на «Java» в опциях HTTP Request.
После выставления данного параметра получаем успешный запрос, содержащий информацию:
В: Jmeter не завершает пользовательский сеанс.
О: Дело в том, что после выполнения сценария Jmeter не закрывает поток. Завершение потоков в Jmeter решается путем добавления Test Action’a в Thread Group (Add -> Sampler -> Test Action) с параметром «Stop» в конце Thread Group.
В: Как сделать нагрузочное тестирование из кластера?
О: Краткая инструкция по настройке:
Выставить на основном компьютере IP адреса дополнительных компьютеров.
- На дополнительных компьютерах, установив java и предварительно изменив Heap Size, запустить сервер.
- Открыть Jmeter,открыть свой тест план Run -> Remote Start All. Запустить данный тест план на всех дополнительных компьютерах и на основном.
Число потоков указано в правом верхнем углу окна Jmeter.
Подробное описание со всеми нюансами на сайте Jmeter’a.
Число потоков будет расти прямо пропорционально количеству машин в кластере, то есть, запустив нагрузочный тест с двух машин нагрузка увеличится вдвое.
Кирилл Юрков