Показаны сообщения с ярлыком JMeter. Показать все сообщения
Показаны сообщения с ярлыком JMeter. Показать все сообщения

среда, 23 октября 2013 г.

Простой нагрузочный тест с Apache JMeter

По моим наблюдениям, разработчики довольно редко делают нагрузочное тестирование сайтов и веб-приложений. И бывает так, что выставят проект в Интернет, а тут вдруг посетители начнут ходить (хабраэффект, к примеру, случился), и сайт в самый подходящий момент ложится или начинает не по-детски тормозить. 

Почему бы не избежать этих неприятностей, прогнав нагрузочный тест?

Наверное, кого-то останавливает неверное представление о том, что нагрузочное тестирование — это очень сложное дело, требующее специальных знаний. Однако не боги горшки обжигают. Если выбор — тестировать не слишком профессионально, или не тестировать вовсе, я бы выбрал первое. Тем более, что организовать примитивный тест производительности очень даже просто. Можно воспользоваться онлайн-средствами (см., например, Нагрузочное тестирование по-быстренькому), а можно замутить все своими руками, это ненамного сложнее.

Под катом рассказываю, как с нуля организовать незамысловатый нагрузочный тест сайта при помощи Apache JMeter. 

вторник, 22 октября 2013 г.

How to use "loop controller" in jmeter with example.

As you know, Apache jmeter has many logic controllers and loop controller is one of the mostly used controller in performance testing using jmeter. Apache jmeter's thread group is it self loop controller and you can read about 'Loop Count' property of thread group in my previous post. So now your question is 'If
thread group has ability to generate a loop then why require loop controller?'. Answer is - group's 'Loop Count' property forces all sub requests execution multiple time while loop controller will force only specified requests's execution multiple time. Another feature of loop controller is - Apache jmeter will force multiple execution of all sub requests of loop controller before going to next requests of thread group. Let we take one simple example.

Created sample test of apache jmeter using loop controller as bellow. If you don't know how to create test plan in jmeter then you have to read my post about apache jmeter sample test plan recording steps. Set Number of Threads (users) = 1 and Loop Count = 1 in thread group property. Added Loop Controller in between and moved 'My Account Page' HTTP request under loop controller as shown bellow.

вторник, 27 августа 2013 г.

JMeter Trouble shooting.

Бывает так, что JMeter работает некорректно и странно, при прогоне теста, а именно количество активных юзеров начинает уменьшаться хотя этого происходить не должно. Тогда необходимо посмотреть на системное окошко, которое открывается при запуске jmeterа. Если в нем написано java.lang.OutOfMemoryError: GC overhead limit exceeded, тогда необходимо поменять один параметр в файле jmeter.bat в папке /bin. Откройте его и найдите параметр set HEAP и увеличьте максимально возможное значение этого параметра, например set HEAP=-Xms512m -Xmx1512m.

JMeter Thread Group.

В JMeter исполняется то, что находится внутри Thread Group. В Test Plan может быть несколько Thread Group. И все они будут выполняться независимо и одновременно.
Рассмотрим какие параметры имеет Thread Group. 



Некоторые из них очевидные, а некоторые не очень :).

Name - имя группы пользователей.
Comments - думаю, что это поле для комментария.
Action to be taken after a Sampler error - этот пункт для выбора действий на случай появления ошибки в некотором сэмпле при выполнении теста. Возможно несколько вариантов: Continue - переходить к следующему элементу теста; Stop Thread - останавливать тест для текущей группы пользователей; Stop Test - останавливать тест полностью.
Number of Threads - количество пользователей или подключений к серверу.
Ramp-Up Period - определяет сколько времени понадобится JMeter для запуска всех пользователей. То есть если Number of Threads - 6,а Ramp-Up Period - 60, то каждые десять секунд к тесту будет добавляться по пользователю.
Loop Count - и ёжику понятно.
Выбрав Scheduler можно воспользоваться дополнительными настройками. Можно выставить время начала теста (Start time). Мы можем запустить тест заранее, но действия не начнутся пока не достигнется Start time. Закончиться тест может в двух случаях. Первый - достигнется End time, второй - пока количество прошедших итераций не превысит loop count. Startup delay определяет задержку перед началом теста и duration определяет длительность всего теста. Причем либо используется Start time и End time, либо Startup delay и duration. Они взаимно исключающие.

JMeter Logic Controllers.

1. Simple Controller - используется для группирования и установления порядка выполнения для Samplers и других Logic Controllers.
2. Loop Controller - выполнит все, что находится у него как child Count Loop раз.
3. Once Only Controller - исполняет свое содержимое только один раз и пропускает выполнение содержимого при последующих итерациях. Пример: Loop Controllerнастроен на пятикратное выполнение и содержит Once Only Controller, содержимое Once Only Controller выполнится только один раз.
4. Interleave Controller - если внутри него находятся Generative или Logic Controllers, то выполняется один из них по порядку для каждой итерации.
5. Random Controller - похож на Interleave Controller, только на каждой итерации выполняемая часть берется не по порядку, а в случайной последовательности.
6. Random Order Controller - больше похож на Simple Controller, выполняются все его "дети", только выполнение происходит в произвольном порядке.
7. Throughput Controller - регулирует как часто заданный блок будет выполняться. Может работать в режиме percent execution и в режиме total executions. При percent execution программа вычисляет процент от всех проведенных итераций и определяет выполнять или нет этот блок в следующий раз. При total executions выполнение блока прекращается после достижения количества разрешенных раз.

JMeter Assertions.

1. Response Assertion - позволяет добавить шаблон строки для сравнения с различными полями ответа от сервера. Шаблон может: совпадать или содержаться (Perl5-регулярные выражения), быть эквивалентным или подстрокой (простой текст с учетом регистра).
2. Duration Assertion - если ответ от сервера занял больше данного времени в миллисекундах, то он помечает его как неудачный.
3. Size Assertion - проверяет, что ответ от сервера имеет правильный размер.
4. XML Assertion - проверяет, что данные ответа от сервера составлены из корректного XML документа. Не проверяет на достоверность документы основанные на DTD или schema или какой-либо другом добавочном контроле данных TBD.
5. BeanShell Assertion - позволяет пользователю выполнять проверку используя BeanShell скрипт.
6. MD5Hex Assertion - позволяет пользователю проверять MD5 hash ответа.
7. HTML Assertion - позволяет пользователю проверять HTML синтаксис ответа используя JTidy.
8. XPath Assertion - проверяет документ на правильность, имеет опцию проверки согласно DTD, или ввод документа через JTidy и проверка посредством XPath. Если XPath присутствует, то приложение утверждение верно.
9. XML Schema Assertion - позволяет пользователю проверять ответ согласно с XML Schema.
10. BSF Assertion - позволяет BSF скриптовому коду быть использованным для проверки статуса предыдущего семпла.

Jmeter Listeners.

1. Sample Result Save Configuration - приемник может быть сконфигурирован для сохранения различных пунктов в результирующий лог файл, посредством конфигурационного всплывающегося окна. Опции по умолчанию определены как описано в Listener Default Configuration. Пункты с (CSV) влияют только на CSV формат; пункты с (XML) влияют только на XML формат. CSV формат не может использоваться для сохранения пунктов, которые включают разделители.
2. Graph Full Results - что-то не работает.