Apache JMeter
JMeter - программа тестирования, написанная на java, Сначала он был предназначен для тестирования веб-приложений,
в частности Apache Tomcat, потом его функциональность расширилась. C 2011 года JMeter входит в первую десятку
проектов Apache Foundation.
JMeter может быть использован для тестирования производительности как статических, так и динамических ресурсов.
С его помощью можно имитировать высокую нагрузку на сервер или группу серверов и делать последующий анализ.
Доступны следующие протоколы:
HTTP, HTTPS
SOAP
FTP
Database / JDBC
LDAP
Mail
TCP
JMeter использует многопоточность, специальный гуй, кеширует результаты тестов и потом анализирует их.
В него встроен свой специальный скриптовый язык BeanShell
В качестве xml-парсера по умолчанию используется Xerces XML parser,
Скачать последнюю версию JMeter можно по адресу http://jmeter.apache.org/download_jmeter.cgi
После скачивания архива его нужно просто распаковать и положить в нужное место.
На машине уже должна стоять java версии не ниже 1.4. Проверьте также вывод команды:
echo $JAVA_HOME
Запускаем из под-каталога bin исполняемый файл:
jmeter
Откроется приложение с оконным интерфейсом:
Кроме этой команды, можно запустить другие:
jmeter-server - запускает JMeter в серверном режиме - фактически он запускает все ту же команду jmeter, только с определенными параметрами
jmeter.sh - простой базовый скрипт
Если вы разработали новый компонент или плагин, его нужно с расширением jar положить в под-каталог lib/ext.
В под-каталоге bin лежит основной конфигурационный файл jmeter.properties. В нем есть несколько специальных атрибутов,
закомментированных по умолчанию - search_paths, user.classpath, plugin_dependency_paths -
их можно прописать для каких-то дополнительных плагинов. JMeter понимает jar-файлы, но не понимает zip-файлы.
JMeter можно запустить в интерактивном режиме, не используя гуй, в качестве параметра нужно передать имя файла -
т.н. Test Plan, можно также передать имя лог-файла:
jmeter -n -t my_test.jmx -l log.jtl
Для распределенного тестирования JMeter можно выполнять в серверном режиме - для этого его нужно установить на удаленной
тестируемой машине, затем запустить его там с помощью команды
jmeter-server
после чего к нему можно приконнектиться с помощью гуя либо из командной строки.
Конфигурационные настройки, прописанные в jmeter.properties, можно менять, не внося в него изменений, прямо из командной строки
-D[prop_name]=[value]
Когда JMeter выполняется из гуя, во время тестирования могут возникать ошибки, но вы не увидите их в виде каких-то всплывающих окон.
Сообщения будут положены в лог, при этом в правом верхнем углу гуя возле желтой иконки вы увидите число этих сообщений.
Когда JMeter выполняется в командном режиме, сообщения об ошибках будут складываться в лог-файл, имя которого будет совпадать
с именем файла Test Plan, который передается при запуске JMeter в качестве параметра, т.е. например если имя файла - Test27.jmx,
то лог будет с именем Test27.log.
Test Plan
Test Plan - это сценарий, описывающий последовательность шагов.
В нем может быть: один или более Thread Groups, логические контролеры, слушатели, таймеры, предупреждения
и другие конфигурационные элементы. В гуевом варианте, когда тест выполняется, справа загорится зеленый индикатор,
в котором будет прописано число выполняемых потоков.
Сценарий Test Plan имеет атрибут под названием Functional Testing. Если он установлен(по умолчанию он выключен),
все данные, возвращаемые с тестируемого сервера, будут сохраняться на диск, В случае стрессового тестирования
этот атрибут рекомендуется отключать.
Thread group - стартовая точка для любого тестового плана. Все контролеры находятся внутри этой группы.
Слушатели - или Listeners - могут не входить в эту группу, в этом случае они будут применяться ко всем потокам.
В этой секции прописывается число потоков, время тестирования, число повторов.
Допустим, мы определили время теста в 100 секунд, число потоков в 10. JMeter в течение этих 100 секунд
запустит 10 потоков каждый с интервалом в 10 секунд. Соответственно для 30 потоков и 120 секунд
каждый новый поток будет запускаться с интервалом в 4 секунды.
Что касается числа повторов всего сценария, по умолчанию сценарий выполняется один раз.
JMeter имеет 2 типа контролеров - Samplers и Logical Controllers. Самплеры отвечают за посылку запросов на тестируемый сервер.
Логические контролеры позволяют управлять этими запросами, например регулируют их число.
Самплеры включают следующие виды запросов:
FTP Request
HTTP Request
JDBC Request
Java object request
LDAP Request
SOAP/XML-RPC Request
WebService (SOAP) Request
Самплеры имеют свои собственные настроечные атрибуты.
Если нужно валидировать ответ сервера, в самплер можно добавлять т.н. Assertion, которые используют регулярные выражения.
Логические контролеры могут менять логику работы теста, последовательность запросов.
Рассмотрим следующий сценарий:
Test Plan
Thread Group
Once Only Controller
Login Request (an HTTP Request )
Load Search Page (HTTP Sampler)
Interleave Controller
Search "A" (HTTP Sampler)
Search "B" (HTTP Sampler)
HTTP default request (Configuration Element)
HTTP default request (Configuration Element)
Cookie Manager (Configuration Element)
В этом сценарии запрос на аутентификацию будет выполнен 1 раз - за это отвечает Once Only Controller.
После чего идет простая загрузка поисковой страницы. После чего мы хотим сделать 2 разных поиска.
Для того, чтобы перед каждым запросом А и В не загружать по 2 раза поисковую страницу, а делать это 1 раз,
используется Interleave Controller. Configuration Element используется для того, чтобы проинициализировать значения,
которые будут вставляться в конкретные поля поисковой формы. Если менеджер куков не будет включен в сценарий,
JMeter будет игнорировать куки.
Слушатели - Listeners - обрабатывают информацию от серверов. Слушатель Graph Results рисует граф.
Слушатель View Results Tree показывает детали запроса и ответа и может выводить на экран HTML.
Слушатели могут перенаправлять ответы и писать их на диск для последующего контроля.
Слушатель может быть добавлен в любое место дерева.
По умолчанию поток в JMeter посылает запрос без пауз. И можно легко положить сервер такими запросами.
Чтобы этого не произошло, рекомендуется в Thread Group добавлять таймер. Таймер может входить в самплер или в контролер.
Валидацию ответов от сервера можно выполнять с помощью Assertions. Например. для проверки текста в ассерт можно добавить
валидацию с помощью регулярных выражений. Ассерт может быть добавлен в любой самплер как дочерний элемент в дерево.
В дерево запроса могут входить пре-процессоры - Pre-Processor. Они могут прописываться внутри самплера и выполнять
какие-то действия перед выполнением запроса. Post-Processor прописываются аналогично и выполняются
обычно для обработки ответов от сервера.
Общий порядок выполнения для компонентов дерева:
Configuration elements
Pre-Processors
Timers
Sampler
Post-Processors (unless SampleResult is null)
Assertions (unless SampleResult is null)
Listeners (unless SampleResult is null)
Например, имеется следующий тестовый план:
Controller
Post-Processor 1
Sampler 1
Sampler 2
Timer 1
Assertion 1
Pre-Processor 1
Timer 2
Post-Processor 2
Он будет выполняться в следующем порядке:
Pre-Processor 1
Timer 1
Timer 2
Sampler 1
Post-Processor 1
Post-Processor 2
Assertion 1
В дереве тестового плана существует иерархия, когда одни элементы вкладываются в другие
(Listeners, Config Elements, Post-Procesors, Pre-Processors, Assertions, Timers).
Также в дереве существует порядок выполнения, который выполняется для контролеров и самплеров в том порядке,
в котором они прописаны. При создании сценария создается упорядоченный список самплеров.
Несколько самплеров могут группироваться внутри контролера.
Что касается аасерта, то он управляется иерархически. Если его родителем является запрос, он будет обрабатывать
только этот запрос. Если его родителем является контролер, то он будет обрабатывать все запросы, входящие в контролер.
То же самое относится и к таймерам.
Атрибуты, хранимые в jmeter.properties, имеют глобальную видимость внутри тестового плана.
В атрибуте remote_hosts прописываются адреса тестируемых серверов. На атрибуты можно ссылаться внутри дерева.
Для установки атрибута используется функция setProperty.
Для каждого потока можно заводить свои переменные, например:
HOST www.example.com
THREADS 10
LOOPS 20
Внутри сценария на них можно ссылаться как ${HOST}, ${THREADS}
Переменные можно определить как проперти:
HOST ${__P(host,www.example.com)}
THREADS ${__P(threads,10)}
LOOPS ${__P(loops,20)}
а потом сослаться на них из командной строки:
jmeter ... -Jhost=www3.example.org -Jloops=13
Web Test Plan
Теперь настало время написать сценарий для тестирования какого-нибудь сайта.
Мы создадим 5 пользователей, которые будут посылать запросы на 2 страницы по адресу jmeter.apache.org.
тест будет выполнен 2 раза. Т.е. суммарно получаем 5 * 2 * 2 = 20 запросов.
Для генерации тестового плана нам понадобятся Thread Group , HTTP Request , HTTP Request Defaults , Graph Results.
Скриншоты можно посмотреть по адресу: http://jmeter.apache.org/usermanual/build-web-test-plan.html
Запускаем гуй. Ставим мышь в левом верхнем углу на Test Plan, жмем правую кнопку и выбираем -> Add Thread Group.
В открывшейся форме меняем число потоков на 5 и число повторов на 2.
Затем в дереве слева-вверху ставим курсор на добавленной Thread Group, жмем правую кнопку и добавляем
Http Request Default. У него в поле Server Name or IP прописываем адрес удаленного сервера.
Затем с помощью (Add --> Sampler --> HTTP Request) добавляем 2 страницы - Home Page и Changes.
В конце добавляем слушателя - Add --> Listener --> Graph Results.
И сохраняем результаты работы в xml-файл с расширением .jmx.
|
Моё имя | Мой комментарий 2018-08-08 12:11:59 | |
|