Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

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