среда, 10 февраля 2010 г.

JMeter 1st page

Привет всем! Это мой первый блог так, что прошу не судить строго. Многое из того, что вы увидите плагиат, но я пытался расставлять ссылки на оригиналы. Данный блог не претендует на абсолютную истину. Я надеюсь он просто поможет начинающим в JMeter.
И так..... Записки маленького тестировщика. Часть первая.

JMeter
- это проект Apache Jakarta, который может использоваться как инструмент нагрузочного тестирования для анализа и измерения быстродействия разнообразных служб, с акцентом на веб приложениях. JMeter так же может использоваться для регрессионного тестирования и стресс-тесрирования.

Содержание:
1. Скачать, установить, запустить
2. Запись скрипта
2.1. Ручной способ
2.2. "Прокси-сервер" способ
2.3. "Bad Boy" способ
3. Доработка скрипта
3.1. После записи через прокси
3.2. После записи через BadBoy
4. Нагрузка баз данных
5. Нагрузка веб-сервисов
6. JMeter для регрессии и стресс-тестирования
7. Полезные ссылки по литературе

1. Скачать, установить, запустить

JMeter - это бесплатный продукт. А это значит, что его можно свободно скачать ничего не опасаясь. Качаем 2.3.x.zip и распаковываем.
Специальной установки он не требует так, что JMeter готов к работе.
Двойной клик по файлу JMeter.bat в директории jmeter/bin запустит приложение. И вот ОНО работает. :)

2. Запись скрипта

Записывать скрипт можно тремя способами (т.е. я знаю только о трех).
Во-первых, составлять вручную из предложенных шаблонов и пользуясь всеми другими возможностями JMeter. Это высший пилотаж, и по этому поводу могу предложить только элементарный пример, расположенный ниже.
Во-вторых, можно использовать возможности для автоматической записи скрипта средствами самого JMeter с помощью прокси-сервера. Есть пример в оригинале и в моем переводе, смотрите ниже.
В-третьих, на некоторых форумах советуют использовать BadBoy для записи скрипта в Test Plan. Очень интересный способ и, думаю, перспективный.

2.1. Ручной способ

1. Запускаем JMeter. Перед собой видим рабочую область:
2. Добавляем Thread Group к Test Plan. Клик правой клавишей по Test Plan, выбрать Add -> Thread Group.

3. Добавляем Default HTTP Request к Thread Group. Клик правой клавишей по Thread Group, выбрать Add -> Config Element -> HTTP Request Defaults. Необходимо в поле Server Name or IP ввести URL приложения, которое вы собрались тестировать. Пусть это будет jakarta.apache.org. В поле Port введем 80 (отмечу, что Port специфичен для каждого приложения и зачастую указывать его просто не нужно).


4. Добавляем HTTP Requests к Thread Group. Клик правой клавишей по Thread Group, выбрать Add -> Sampler -> HTTP Request. В поле Path вводим (/jmeter/) путь, куда мы собираемся идти в приложении. И меняем имя (Name) на говорящее для нас - JMeter page.
5. Добавляем еще один HTTP Requests к Thread Group для перехода на другую страницу. Клик правой клавишей по Thread Group, выбрать Add -> Sampler -> HTTP Request. В поле Path вводим /jmeter/usermanual/index.html. И меняем имя (Name) на Usermanual page.
6. Добавляем Aggregate Report к Thread Group для получения данных о ходе и результатах теста. Клик правой клавишей по Thread Group, выбрать Add -> Listener -> Aggregate Report.
7. Вот скрипт готов для использования. Осталось только сохранить Test Plan и выбрать Run в меню Run.
8. Результат теста наблюдаем в Aggregate Report элементе

2.2. "Прокси-сервер" способ

Для автоматической записи скрипта в JMeter, используя прокси-сервер, необходимо проделать следующие действия:
1. В браузере (например IE6) кликаем Сервис -> Свойства обозревателя.
2. В свойствах обозревателя на вкладке Подключения кликаем Настройка LAN.
3. Выбираем использовать прокси-сервер ..., вводим Адрес: localhost и Порт: 808.
4. Запускаем JMeter.
5. Добавляем Thread Group к Test Plan.
6. Добавляем HTTP Request Defaults к Thread Group. Задаем в поле S erver Name or IP URL jakarta.apache.org (обратите внимание на поле Port Number, в данном случае оно не заполняется, но при необходимости заполните его).
7. Добавляем HTTP Proxy Server к WorkBrench. Клик правой клавишей по WorkBrench, выбрать Add -> Non-Test Elements -> HTTP Proxy Server.
8. Меняем порт (Port) в HTTP Proxy Server на 808.
9. В выпадающем меню Target Controller выбираем Test Plan -> Thread Group.
Теперь JMeter готов к записи скрипта.
10. Кликаем кнопку Start.
11. Открываем браузер. В адресную строку вводим http://jakarta.apache.org/jmeter/index.html.
выполняем те действия, которые нужны в тесте. Например:
12. Кликаем User Manual ссылку.
13. Кликаем Download Realeses ссылку.
14. Закрываем браузер.
15. Возвращаемся к JMeter.
16. Останавливаем прокси-сервер, кликая кнопку Stop.
17. Проверяем результат записи скрипта. Видим что записаны не только запросы на переходы между страничками, другие "полезные" запросы, но и запросы на загрузку картинок и стилей. Обычно запросы на загрузку картинок, стилей и т.п. излишни и сильно засоряют скрипт.

18. Значит необходимо отфильтровать нужные нам запросы. Зададим шаблоны, по которым они будут отбираться.
Шаблоны бывают следующие:
.* - все
.*\.png – png картинки
.*\.gif – gif картинки
.*\.jpg – jpeg картинки
.*\.php
.*\.jsp
.*\.html
.*\.htm
.*\.js
!!!Не забывайте о точке перед звездочкой!!!
Я перечислил не все шаблоны и вообще я думаю, что их можно придумывать самому. Так, например, в следующих шагах я применю .*\.ico шаблон, который успешно отработает.
19. Добавим к URL Patterns to Include шаблон .*.
20. Добавим к URL Patterns to Exclude шаблоны .*\.jpg, .*\.gif, .*\.ico и .*\.css.
21. Кликаем кнопку Start.
22. Открываем браузер. В адресную строку вводим http://jakarta.apache.org/jmeter/index.html.
выполняем те действия, которые нужны в тесте. На пример:
23. Кликаем User Manual ссылку.
24. Кликаем Download Realeses сс ылку.
25. Закрываем браузер.
26. Возвращаемся к JMeter.
27. Останавливаем прокси-сервер, кликая кнопку Stop.
28. Проверяем результат записи скрипта. Видим что записаны только "полезные" запросы на сервер.


2.3. "BadBoy" способ

Для того, что бы воспользоваться этим удобным способом, необходимо скачать и установить саму программу "BadBoy".
1. Скачиваем последнюю версию "BadBoy" из интернета (я пользуюсь 2.0.7).

2. Устанавливаем.
3. Запускаем Start >> Programs >> BadBoy.
4. Вводим в адресную строку http://jakarta.apache.org/jmeter/index.html.
выполняем те действия, которые нужны в тесте. Например:
5. Кликаем User Manual ссылку.
6. Кликаем Download Realeses ссылку.
7. Нажимаем Record off кнопку и изучаем записанный скрипт.
8. Нажав три раза на Play, видим как проигрывается скипт.
9. Теперь сохраним скипт для использования в JMeter. Кликаем File >> Export to JMeter...
10. Открываем JMeter.
11. В JMeter кликаем File >> Open и открываем сохраненный на 9 шагу скрипт.
12. Badboy Test Plan готов к модификации и использованию. Хочу обратить внимание, что в подавляющем большинстве случаев скрипт требует доработки до полной готовности.

3. Доработка скрипта



3.1. После записи через прокси

1. Записываем скрипт используя прокси-методов, предложенных в пункте "Запись скрипта".
2. Часто для корректной работы записанного скрипта необходимо использовать cookie. Для этого в JMeter предусмотрен HTTP Cookie Manager. Его добавяем после HTTP Request Defaults. Клик правой клавишей по Thread Group, выбрать A
dd -> Config Element -> HTTP Cookie Manager.

3. Так же добавим HTTP Header Manager.
4. Теперь добавим пару Listener. В View Results Tree можно наблюдать какое место скрипта сейчас выполняется, все ли запросы посланы корректно и получены ли корректные ответы. В Aggregate Report можно увидеть много интересного, но об этом позже.

3.2. После записи через BadBoy

смотрите в следующем сообщении

4. Нагрузка баз данных

Оригинал - User's Manual_Building a Database Test Plan - сейчас почему то ссылка не работает. Я поищу ее потом.

5. Нагрузка веб-сервисов

Создать нагрузку для веб сервисов довольно быстро и просто. Пожалуйста вам ссылочка на оригинал.
А вот мой вариант по-русски:
1. Добавляем Thread Group в наш Test Plan.
2. Добавляем WebService(SOAP) Request в Thread Group. Правой клавишей по Thread Group , далее Add --> Sampler --> WebService(SOAP) Request
3. Еще добавим парочку листенеров, таких как, например, Summary Report и View Results Tree.


NOTE!!! Заметьте, что JMeter поддерживает только SOAP 1.1, а SOAP 1.2 - нет!
NOTE!!! Для того, что бы заработал WebService(SOAP) Request необходимо скачать две jar-ки activation.jar и mail.jar (к сожалению под рукой ссылки нет) и перезагрузить JMeter.
NOTE!!! Необходимо отослать смс на номер 454526567953 для активации услуги (шутка).
4. Узнайте WSDL URL (вот пример http://ws1.example.com/yyy/LWebService?wsdl) и вставьте ее/его в поле WSDL URL в WebService(SOAP) Request.
5. Нажмите кнопку Load WSDL. --> В поле Web Wethods должны подгрузиться все доступные методы для этого веб-сервиса. Если этого не произошло то, что-то пошло не так.
6. Теперь жмем кнопку Configure --> Автоматически должны заполнится поля Protocol, Server Name or IP, Port Number, Path и SOAPAction.
7. Осталось совсем не много. Теперь необходимо составить сам запрос. Если не разбираетесь в этом, то попросите это сделать того человека кто писал этот веб сервис.
8. Если чекнуть галочку Read SOAP response, то в View Results Tree листенере можно будет увидеть ответы от веб сервисов, что довольно полезно.
9. Получаем примерно следующий sample:

10. Все готово к работе. Теперь можно комбинировать разные запросы на веб сервис и выстраивать логику.

6. JMeter для регрессии и стресс-тестирования

При использовании JMeter для регрессии, необходимо использовать Response Assertion элементы в Test Plan.


При использовании JMeter для стресс-тестирования, необходимо отключить все опции в используюмых Listener, так как это может повлиять на результат.

7. Полезные ссылки и литература по теме:

1. Официальный сайт JMeter
2. User's Manual

2 комментария:

  1. Спасибо огромное :)! Кратко и понятно, максимум информации! То что нужно!

    ОтветитьУдалить
  2. Здравствуйте, спасибо большое за информацию!! всё объяснено доступно, я начинаю самостоятельно осваивать нагрузочное тестирование, не понятно каким образом узнать WSDL URL - это конфиденциальная информация владельцев конкретного ресурса? можно ли без этого потренироваться в нагрузочном тестировании?

    ОтветитьУдалить