Apache jMeter представляет собой утилиту для тестирования Apache-сервера и связанных с ним сервисов. Аналог – Apache Benchmark, о котором рассказано в статье Apache Bench: тестируем работу веб-сервера. Однако jMeter предоставляет намного больше возможностей, потому на нём оставимся подробнее.
Для его работы требуется Java и x-server на машине, с которой будет проводиться тестирование.
Загружаем архив со страницы http://jmeter.apache.org/download_jmeter.cgi
Распаковываем:
$ tar xpf apache-jmeter-2.9.tgz
$ cd apache-jmeter-2.9
Содержимое выглядит так:
# ls -l
total 168
drwxr-xr-x 3 root root 4096 Apr 5 12:45 bin
drwxr-xr-x 5 root root 4096 Apr 5 12:45 docs
drwxr-xr-x 2 root root 4096 Apr 5 12:45 extras
drwxr-xr-x 4 root root 4096 Apr 5 12:45 lib
-rw-r–r– 1 root root 138299 Jan 24 13:21 LICENSE
-rw-r–r– 1 root root 1632 Jan 24 13:21 NOTICE
drwxr-xr-x 6 root root 4096 Apr 5 12:45 printable_docs
-rw-r–r– 1 root root 5731 Jan 24 13:21 README
Для запуска выполняем:
$ ./bin/jmeter.sh
Переименуем наш тест в KZ test 1.
Кликаем правой кнопкой на KZ test 1 и добавляем новую группу тестов и способов просмотра/анализа – Add > Treads(Users) > Thread group:
Добавим простой тест – HTTP request.
Для этого кликаем правой кнопкой на Thread Group -> Add -> Sampler -> HTTP Request:
Теперь добавляем в тест средства отображения:
- Thread Group->Add->Listener->View Results in Table
- Thread Group->Add->Listener->View Results in Tree
- Thread Group->Add->Listener->Graph Results
- Thread Group->Add->Listener->Aggregate Report
Выбираем View Results in Table и в поле Write results to… укажем путь к нашему log-file /home/setevoy/jmeter.log – полезно при сбоях и для последующего анализа проблем:
Сохраняем эту схему – Ctrl+S или File -> Save:
Очистим всё (на первый раз можно не выполнять) что бы удалить резултаты предыдущих тестов Run -> Clear all или Ctrl+E.
Для интереса откроем просмотр лога Apache на тестируемом сервере:
# tail -f /var/log/apache2/access.log
Запускаем тест – Run -> Start.
Видим в логе поток записей типа:
194.***.***.214 – – [05/Apr/2013:14:07:59 -0400] “GET / HTTP/1.1” 200 515363 “-” “Apache-HttpClient/4.2.3 (java 1.5)”
Перейдём в View results in Table в окне jMeter-a:
Смотрим Status колонку – должно быть OK.
Всё работает, добавим нагрузки. Переходим в Thread Group и установим Number of threads (users)- 20, Ramp-Up period – 60, справа от Loop Count Forever ставим галочку.
С такими настройками будет эмулировано подключение 20-ти пользователей в течении 60-ти секунд:
Сохраняем настройки – Ctrl+S и Сtrl+E что бы очистить старые данные. Для запуска нажимаем Ctrl+R:
Посмотрим на вывод top сервера:
top – 14:13:54 up 3 days, 5 min, 3 users, load average: 14.81, 4.03, 1.36
Tasks: 136 total, 21 running, 115 sleeping, 0 stopped, 0 zombie
Cpu(s): 96.8%us, 2.1%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.2%hi, 0.9%si, 0.0%st
Mem: 4063160k total, 1212044k used, 2851116k free, 134872k buffers
Swap: 1740792k total, 0k used, 1740792k free, 389924k cached
Когда считаем что достаточно, останавливаем выполнение – Run -> Stop и идём в View results in Table:
На Graph results можно посмотреть графики “отзывчивости” сервера:
Значения предоставлены в миллисекундах:
Data — время отклика на каждый выполненный запрос.
Average — среднее время отклика сервера, объективный график нагрузки.
Median — значение медианы (используется в статистике, этими данными можно не пользоваться).
Deviation — погрешность, стандартное отклонение.
Throughput — скорость выполнения самого запроса.
На странице View results Tree наблюдаем такую картину:
Если завис сам jMeter (случается) – убиваем процесс, перезапускаем, правой кнопкой на Test Plan – Open:
Кстати, пока jMeter “висит” – процесс тестирования обычно продолжается, что чревато неприятными последствиями, если тестируете рабочий сервер.
Теперь выполним тестирование с помощью access.log файла с сервера, который мы предварительно скачали к себе на компьютер.
Отключим выполнение HTTP Request кликнув правой кнопкой на нём и выбрав Disable.
Добавляем Thread Group->Add->Sampler->Access Log Sampler.
Указываем сервер и путь к лог-файлу:
В Thread Group уменьшим Number of Trhreads (users).
Запускаем:
Что бы подробнее почитать что за ошибки – переходим на View Results Tree и выделяем нужную строку с ошибкой:
Среднее время отклика (Average) растет, а скорость обработки (Throughput) не меняется. Это значит, что где-то на сервере операции становятся в очередь и производительности не хватает, чтобы обслужить все запросы.
Вернёмся к HTTP Request – выполняем Access Log Sampler > Disable, HTTP Request > Enable.
Ещё один вариант работы Apache jMeter – повторять запросы, выполненные именно вами. Мы будем выполнять любые действия через браузер, и при этом все необходимые элементы HTTP Request будут создаваться без нашего участия.
Добавляем Recording Controller (Thread Group -> Add -> Logic Controller -> Recording Controller).
Далее добавим HTTP Cookie Manager (Thread Group -> Add -> Config Element -> HTTP Cookie Manager). С помощью этого элемента будет реализована работа с сессиями через cookie.
Добавляем элемент HTTP Proxy Server (UPD: в новом Apache JMeter он называется “HTTP(S) Test Script Recorder“) Добавлять его надо в раздел WorkBench (WorkBench -> Add -> Non-Test Elements -> HTTP Proxy Server), так как непосредственно в ходе тестирования этот элемент не будет принимать участия. Он нам нужен только, чтобы создать сценарии тестов.
По сути здесь достаточно только изменить номер порта прокси-сервера, если порт по умолчанию 8080 у вас уже занят, например, можно поставить 8089. Если оставить в графе Target Controller значение Use Recording Controller, то все запросы, проходящие через прокси, будут записываться в первый попавшийся Recording Controller в нашем тест-плане. Но так как на данный момент он там всего один, то нас этот вариант устроит.
Настраиваем браузер, в примере – Firefox: Edit -> Preferences -> Advanced, вкладка Network -> Settings.
Устанавливаем localhost 8080:.
В окне с настройками HTTP Proxy Server нажимаем на кнопку Start, что бы запустить сам proxy:
Идём тестировать – логинимся на какой-либо странице сервера, который тестируем:
Выполняем какие-либо действия – переходим по страницам, пользуемся поиском и прочее, после чего останавливаем прокси и идём в Recording Controller, что бы посмотреть что у нас записалось – тут все страницы и действия, которые выполнялись в браузере:
В Thread Group у нас уже всё настроено.
Ctrl+S что бы сохранить все действия и настройки.
Можно найти страницу login.php и посмотреть сформированный запрос:
Запускаем – Сtrl+R:
В целом – тестирование можно считать завершённым. Вообще, возможностей у Apache jMeter действительно много. Все они описаны на оф. странице.
Ссылки по теме: