Начало работы
Описание программы Rational Performance Tester
Программа IBM Rational Performance Tester, здесь и далее называемая Performance Tester, представляет собой инструмент для создания, выполнения и анализа тестов производительности, помогающий группам разработчиков проверять масштабируемость и надежность их Web-приложений перед развертыванием. Многие из функциональных возможностей Performance Tester были специально разработаны для начинающих тестировщиков. Performance Tester позволяет использовать для тестирования Web-приложения один из нескольких Web-браузеров - Internet Explorer, Mozilla или Firefox. Результаты вашей работы собираются и записываются в выбранной вами операционной системе (Windows или Linux). Тест представляется в лаконичном древовидном редакторе, который способен отображать для эксперта подробности "по требованию".
Тестовые сценарии группируются в различные комбинации для отражения нескольких типов пользователей, составляющих прогнозируемую популяцию пользователей. Можно указать количество эмулируемых системой пользователей во время исполнения. Выполнение теста сопровождается легко читаемыми отчетами, обновляемыми в режиме реального времени во время работы теста. В этих отчетах выделяются узкие места на основе таких метрик как полезная производительность, скорость транзакций и системные диагностические показатели.
Кроме того, Performance Tester можно использовать для дальнейшей идентификации основной причины проблем плохой производительности на уровне аппаратных или программных компонентов посредством системы расширенного мониторинга ресурсов и наблюдения за временем реакции.
Хотя данное руководство концентрируется на тестировании J2EE Web-приложения, Performance Tester можно использовать для тестирования любого Web-приложения. Кроме того, можно расширить Performance Tester для тестирования производительности дополнительных типов приложений, таких как Siebel, SAP и Citrix (см. раздел "Ресурсы").
Настройка среды
Для выполнения шагов, описанных в данном руководстве, вы должны создать свою собственную среду, выполнив следующие действия:
- Загрузите и установите пробную версию Rational Performance Tester. Инструкции по установке приведены на странице загрузки пробной версии.
- Загрузите и установите WebSphere Application Server 6.0. Обратите внимание, что пример приложения Adventure Builder, используемый в данном руководстве, доступен только в WebSphere Application Server 6.0, но не 6.1 .
- Установите приложение Adventure Builder, поставляемое с WebSphere Application Server 6.0. Инструкции по установке приложения Adventure Builder можно получить, запустив после установки WAS приложение "First Steps" из меню Windows Start.
- Настройте сервер приложений так, чтобы Performance Tester мог получать от приложения информацию о времени реакции. Application Server Instrumenter можно запустить из меню Windows Start, выбрав IBM Software Development Platform > IBM Rational Data Collection Infrastructure > Application Server Instrumenter.
- П5. Прежде чем выполнить при помощи Performance Tester любой тест, использующий информацию о времени реакции, убедитесь, что запущена Data Collection Infrastructure (DCI). DCI можно запустить из меню Windows Start, выбрав IBM Software Development Platform > IBM Rational Data Collection Infrastructure > Start monitoring.
Создание проблемы производительности в Adventure Builder
Чтобы вызвать те интересные результаты, которые мы рассмотрим позднее, необходимо создать проблему производительности в приложении Adventure Builder.
- Остановите WebSphere Application Server. Выберите IBM WebSphere > Application Server v6 > Profiles > default.
- Откройте Windows Explorer: C:\Program Files\IBM\WebSphere\AppServer\profiles\default\installedApps\ machine-name Node01Cell\OPC.ear, где machine-name - имя машины, на которой запущен ваш WAS.
- Переименуйте
opc-ejb.jar
в opc-ejb-orig.jar
.
- Загрузите
opc-ejb.zip
в эту же папку и распакуйте .jar-файл.
- Перезапустите WebSphere Application Server.
Рабочее пространство и примеры проектов руководства
Performance Tester должен быть привязан к рабочему пространству. Рабочим пространством может быть любой каталог, в котором сохраняются результаты работы. В данном случае рабочее пространство содержит два проекта, которые вы импортируете из прикрепленного архивного файла.
- Загрузите файл RPTHelloWorldTutorialProjects.zip.
- Запустите Performance Tester, подтвердив (при запросе) рабочее пространство по умолчанию.
- Если появится представление Welcome, закройте его.
- Импортируйте проекты из загруженного вами zip-файла. В меню Performance Tester выберите File > Import > Other > Project Interchange. Выберите zip-файл. Нажмите Select All, а затем Finish.
Первый проект - это приложение Adventure Builder Application. Данный проект содержит исходный код примера приложения Adventure Builder, которое вы будете тестировать. В вашем рабочем пространстве находится только проект, для того чтобы Performance Tester в дальнейшем мог выполнять навигацию по коду при попытке найти основную причину ухудшения производительности. Не беспокойтесь, если появятся ошибки компиляции, причиной которых являются ссылки на ресурсы, отсутствующие на вашей машине. Это ни на что не влияет.
Второй проект, Adventure Builder Performance Tests, представляет собой тестовый проект, который вы будете использовать для хранения ваших тестов, пулов данных, расписаний и результатов. Если вы раскроете проект, то увидите несколько папок, используемых для организации тестовых средств. Вы можете добавлять, удалять и изменять папки по своему желанию. Пока в проекте нечего исследовать. Мы рассмотрим его более пристально после записи теста.
Рисунок 1. Рабочее пространство Performance Tester, просматриваемое в Test Navigator
Запись сценария теста
Тесты производительности чаще всего создаются путем записи ручных взаимодействий с тестируемой системой. В данном разделе руководства мы используем автоматизированный HTTP-рекордер для перехвата сценария взаимодействия с примером приложения Adventure Builder при формировании пакета туристической поездки и его покупке.
Приложение Adventure Builder уже выполняется в интерактивной испытательной среде. Все, что вам нужно сделать, - это подключиться к нему через Web-браузер при включенном рекордере.
Запуск рекордера
- Запустите рекордер путем нажатия кнопки Create a Test from Recording на инструментальной панели . При этом откроется окно Create New Test From Recording.
Рисунок 2. Окно Create New Test From Recording
- Выберите HTTP Recording и нажмите кнопку Next.
- На следующей странице мастера выберите Adventure Builder Performance Tests > Tests в качестве места для создания файла.
- Введите
PurchaseIslandAdventure
в качестве имени тестового файла и нажмите кнопку Finish.
Рисунок 3. Окно Create New Test From Recording, страница 2
- Рекордер начнет работу, и Internet Explorer откроет страницу "Welcome to Performance Testing". Очистите кэш с временными файлами: выберите Internet Explorer Tools > Internet Options .... Под Temporary Internet Files нажмите Delete Files. Отметьте Delete all offline content и нажмите OK для подтверждения.
- Нажмите кнопку OK, чтобы закрыть окно Internet Options.
- Запустите приложение Adventure Builder, введя
http://localhost:9080/ab/main.screen
в адресной строке Internet Explorer.
Навигация по приложению
Теперь, после начала записи рекордером, вы будете ходить по приложению так же, как обычно.
- В левой навигационной области страницы нажмите кнопку Island Adventures.
Рисунок 5. Ссылка Island Adventures
- Здесь отображается развернутый список поездок на острова. В подменю страницы Available Adventure Packages выберите Maui Survival Adventure.
Рисунок 6. Ссылка на Maui Survival Adventure
- На данной странице показаны варианты, доступные для выбранного вами пакета. Нажмите кнопку Select Package на странице Adventure Package Details справа.
- Отобразится страница Package Options. На ней вы можете персонализировать ваш пакет, изменяя количество человек, начальную дату, количество дней и т.д. Сейчас просто подтвердите значения по умолчанию, нажав Set Package Options.
- На странице Adventure Package Details нажмите I Will Provide My Own Transportation.
- На странице Adventure Package нажмите кнопку Checkout.
- Давайте пока упростим процесс: на странице Sign On нажмите Sign In (пользователь, пришедший повторно).
- На странице Enter Order Details прокрутите содержимое вверх и нажмите кнопку Submit.
- Через некоторое время отобразится страница Checkout. На ней вы должны увидеть ID вашего заказа.
Рисунок 7. Ссылка Order ID на странице Checkout
Обратите внимание: ваш заказ будет иметь уникальный ID, не похожий на тот, что показан на рисунке. После загрузки страницы Checkout подождите несколько секунд, а затем проверьте состояние вашего заказа, нажав ссылку Order ID.
- После загрузки страницы Order Tracking Results закройте браузер . Это заставит программу Performance Tester начать генерирование теста на базе перехваченного им трафика.
Описание и настройка теста
Performance Tester генерирует тест на базе перехваченного им во время записи HTTP-трафика. Однако тест - это нечто намного большее, чем простая регистрация HTTP-трафика. За кулисами процесса Performance Tester выполняет значительный объем работы для создания надежного, расширяемого и простого в обслуживании теста. В данном разделе мы исследуем сгенерированный тест более детально и настроим его на использование специфичных данных.
Исследование теста
Тест представляется в древовидном формате в левой части представления Test Editor. Каждый узел верхнего уровня в дереве представляет Web-страницу, которая была посещена во время записываемой сессии. Имя узла основано на имени Web-страницы.
Рисунок 8. Древовидное представление Test Contents
- Раскройте узел Welcome to the Adventure Builder Reference application. Здесь разработчик расширенного теста производительности может увидеть все детали транзакций для данной страницы. Первый элемент выделен синим цветом, указывающим на то, что это первичный запрос - запрос HTML-содержимого страницы.
Рисунок 9. Развернутая страница в виде Test Contents
- Выберите представление Protocol Data в нижней части окна, а затем выберите первичный запрос, выделенный в дереве синим цветом. Подробная информация о запросе и соответствующем ответе отображается в закладках Request, Response Headers и Response Content представления Protocol Data. Закладка Browser даже визуализирует содержимое выбранного элемента.
Рисунок 10. Закладка Browser в виде Protocol Data
- Подробная информация о выбранном элементе также предоставляется в правой части представления Test Editor. Вы можете отредактировать эти данные, если нужно изменить хост, URL, заголовок запроса или любое другое поле.
Автоматическая корреляция данных
Web-приложения становятся все более динамичными. Например, в записанном сценарии вы поместили заказ на пакет поездки, и вам был возвращен уникальный ID заказа. Затем вы использовали этот ID для проверки состояния вашего платежа. Если воспроизвести данный тест, то он разместит другой заказ, и вам будет предоставлен другой ID заказа. Мы хотели бы, чтобы Performance Tester проверял состояние этого нового ID заказа, а не ранее записанного.
По этой причине Performance Tester выполняет автоматическую корреляцию данных. То есть, он просматривает параметры данных, передаваемых на сервер, и ищет соответствия с данными, полученными от сервера в предыдущем ответе. Обратиться к коррелированным данным просто.
- Выделите узел Order Tracking Results в области Test Contents представления Performance Test. Теперь щелкните правой кнопкой мыши внутри области Test Data справа и выберите Show References. Обратите внимание на то, что поле orderId замещается данными из предыдущего ответа.
Рисунок 11. Отображение ссылок для корреляции данных
- Выполните двойной щелчок кнопкой мыши на orderId. Вы получите URL реального запроса для этой страницы.
Рисунок 12. Коррелированные данные в URL запроса
- Щелкните правой кнопкой мыши на выделенной строке и выберите Go To. Это вызовет переход прямо к значению orderId в тексте ответа на запрос Checkout. Во время воспроизведения теста Performance Tester будет замещать значением ordered, получаемым в данном ответе, значение orderId в запросе для отслеживания заказа.
Рисунок 13. Коррелированные данные в предыдущем запросе
Да, теперь вы знаете о корреляции данных намного больше, чем, возможно, хотели бы знать, но красота программы Performance Tester состоит в том, что она все это делает за вас без какого-либо ручного кодирования или других усилий с вашей стороны.
Рандомизация данных
При тестировании производительности важно уметь рандомизировать данные, передаваемые на сервер. Современные Web-приложения имеют много уровней кэширования. Если эмулируется тысяча пользователей, которые используют приложение, делая одно и то же, вы не сможете увидеть производительность при типичном поведении. После выполнения транзакции первым пользователем все следующие могут получать информацию из кэша. Поэтому инженеры по тестированию производительности часто тратят значительное количество времени, настраивая тесты на передачу случайных данных из "пула данных" (datapool), чтобы каждый эмулированный пользователь использовал уникальную информацию.
Программа Performance Tester автоматически идентифицирует вероятных кандидатов на доступ к пулу данных и дает возможность связать эти поля с предоставляемыми вами источниками данных.
- Выберите узел страницы Enter Adventure Package Details в содержимом теста. В области Test Data обратите внимание на параметры
start_month
, start_year
и start_day
. Они были значениями по умолчанию на странице Options, которые передавались последовательно на сервер при нажатии кнопки Set Package Options.
Рисунок 14. Кандидаты на доступ к пулу данных
- Установите datapool на рандомизацию значений, используемых вашими виртуальными пользователями при воспроизведении данного теста. Выберите start_month в области Test Data.
- Нажмите Substitute From ниже области Test Data.
- Выберите Datapool Value....
Рисунок 15. Замена start_month из переменной datapool
- Нажмите Add Datapool в окне столбца "Select datapool". Вы добавите связь данного теста с существующим пулом данных.
- Выберите существующий пул данных VacationStartDates и нажмите Select.
- Вернитесь в окно столбца "Select datapool", выберите start_month и нажмите кнопку Use Column. Обратите внимание на то, что столбец "Substituted with" рядом с переменной start_month теперь имеет ссылку на столбец datapool.
- Выберите start_year в области Test Data. Повторите процесс. В данное время нет необходимости добавлять ссылку на пул данных; просто выберите start_year и нажмите Use Column.
- Повторите описанную выше процедуру для start_day. Строки трех переменных должны быть выделены зеленым цветом для индикации того, что они заменяются значениями из пула данных и должны отображать ссылки в столбце "Substituted with".
Рисунок 16. Переменные, замещаемые переменными пула данных
- Нажмите Ctrl-S для сохранения теста.
Планирование рабочей нагрузки
Одной из основ успешного теста производительности является способность точно смоделировать предполагаемую рабочую нагрузку системы. Программные системы обычно работают с несколькими типами пользователей, выполняющими различные задачи. Performance Tester предоставляет графический интерфейс для моделирования пользовательской активности.
Создание плана
Раскройте папку Schedules и выполните двойной щелчок кнопкой мыши на плане AdventureBuilderLoadTest, чтобы открыть его в представлении Schedule Editor. Это план, который был частично заполнен за вас.
Рисунок 17. План AdventureBuilderLoadTest в представлении Test Navigator
В этом плане уже определены две группы пользователей. Как видно из пояснений к Schedule Contents, browsers (посетители, просматривающие сайт) составляют 20% эмулированных пользователей, в то время как buyers (покупатели) - 80%.
Рисунок 18. Schedule Contents отображает определенные группы пользователей
Разверните группу пользователей Browsers и все элементы, содержащиеся в Schedule Contents.
Рисунок 19. Детали группы пользователей Browsers
Performance Tester предлагает много функциональных конструкций, помогающих сформировать реалистичную нагрузку на вашу систему. Иерархия группы пользователей Browsers может быть интерпретирована следующим образом: каждый посетитель внимательно просмотрит три пакета поездок. Посетители случайным образом выбирают для просмотра либо горные путешествия, либо путешествия на запад, но в два раза вероятнее просмотрят горные путешествия. Действие по просмотру категории путешествия эмулируется тестом почти в полном соответствии с действием во время записи теста. После просмотра каждой категории посетитель подождет 1000 миллисекунд перед просмотром другой категории.
Группа Buyers не заполнена. Используйте записанный ранее тест в качестве реализации для теста Buyers. Нажмите на группу пользователей Buyers.
Нажмите Add > Test и выберите PurchaseIslandAdventure в окне Select Performance Tests. Сохраните план AdventureBuilderLoadTest.
Выполнение автоматизированного теста производительности
В данном разделе вы протестируете приложение Adventure Builder и проследите за результатами тестирования.
Запуск теста
Выберите самый верхний узел в Schedule Contents, то есть, узел AdventureBuilderLoadTest. В закладке в правой части вида Performance Schedule Editor доступно большое количество параметров выполнения. В поле Number of users закладки General можно указать число пользователей, которое вы хотите эмулировать. Поскольку группы пользователей в данном плане были определены в процентном соотношении, Performance Tester выполняет за вас все настройки каждый раз, когда вы меняете размер вашего плана. Оставьте значение поля Number of users установленным в 5. Пробная версия Performance Tester допускает тесты максимум с пятью эмулированными пользователями. Попытка работы с большим числом пользователей приведет к ошибке нарушения лицензии.
Выполните щелчок правой кнопкой мыши на плане AdventureBuilderLoadTest
в Test Navigator. Выберите Run As > Performance Schedule. Запустится тест производительности.
Рисунок 20. Кнопка Run на панели инструментов
Мониторинг теста
Во время выполнения теста вы можете следить за ходом его работы практически в реальном времени. На закладке Overall вида Performance Report вверху в прямоугольной полоске будет отображаться ход тестирования. Гистограмма покажет степень успешности кода состояния для страниц и элементов (должно быть 100% для обоих). Во время работы теста вы можете просматривать различные закладки в отчете и видеть, что происходит.
- Выберите закладку Summary в нижней части отчета. Здесь отображается общая статистика выполнения теста, страниц и элементов страниц. Обратите внимание на то, что эта статистика будет постоянно обновляться до завершения теста.
- Выберите закладку Page Performance. Данная закладка отображает гистограмму среднего времени реакции 10 страниц с самыми большими значениями времени.
- Походите по остальным страницам отчета. Представленная на них (по умолчанию) информация относительно легко читается и позволяет быстро оценить производительность приложения Adventure Builder. Обратите внимание на то, что диаграмма в закладке Resources будет пустой: это так задумано.
- После завершения теста (обратите внимание на индикатор хода выполнения теста в закладке Overall) вернитесь в закладку Page Performance. Вы должны увидеть, что страница Checkout работает значительно медленнее всех остальных страниц.
Анализ главного источника проблемы
На данный момент вы успешно применили Performance Tester для обнаружения проблем производительности в вашем приложении. Следующий вопрос, который вы себе зададите: "Что вызывает проблему?". Для ответа на этот вопрос вы будете использовать возможности Root Cause Analysis программы Performance Tester. В данном разделе вы повторно выполните ваш тест с подключением дополнительных инструментальных средств сбора данных. Дополнительная информация поможет определить, что явилось источником снижения производительности (аппаратная или программная часть), а также выявить этот источник.
Подключение функциональности Resource Monitoring
- Выполните двойной щелчок кнопкой мыши на плане AdventureBuilderLoadTest в представлении Test Navigator.
- Возвратитесь к некоторым дополнительным элементами контроля за выполнением плана - снова начните с верхнего узла Schedule Contents.
- Выберите закладку Resource Monitoring в области Schedule Element Details. Система мониторинга ресурсов позволяет программе Performance Tester вести журнал регистрации (log) любого системного параметра в Windows
perfmon
, Unix или Linux rstatd
, а также Tivoli Monitoring.
- Отметьте флажок Enable resource monitoring.
- Нажмите кнопку Add New... для определения нового сервера, на котором будет осуществляться мониторинг ресурсов. Вам, возможно, придется прокрутить правую часть представления Performance Schedule вниз, для того чтобы увидеть кнопку.
- В окне Resource Monitoring введите
localhost
в качестве имени хоста. Отметьте Windows Performance Monitor. Обратите внимание на то, что в данной испытательной среде Web-сервер, сервер приложений и система Performance Tester выполняются на одной машине localhost.. Эта ситуация далека от реальности. В настоящей среде тестирования производительности вы можете определить любые машины как часть вашего приложения или системы тестирования.
- Выберите закладку Resources. Через несколько секунд вы увидите полный список доступных счетчиков. Для простоты снимите отметки со всех счетчиков, за исключением Memory > Pages/sec и Processor > % Processor Time.
- Нажмите кнопку OK, чтобы закрыть окно Resource Monitoring.
Подключение функциональности Response Time Breakdown
- Выберите закладку Response Time Breakdown в области Schedule Element Details вида Performance Schedule.
- Отметьте флажок Enable collection of response time data. Это разрешит работу инфраструктуры сбора данных времени реакции в программе Performance Tester.
- Поскольку вы знаете, что единственным тестом, реально посещающим страницу Checkout, является PurchaseIslandAdventure, выберите только этот тест.
- В области Options установите поле Detail level в значение High.
- Сохраните план, нажав Ctrl-S.
- Выполните щелчок правой кнопкой мыши на плане
AdventureBuilderLoadTest
в Test Navigator. Выберите Run As > Performance Schedule. Программа Performance Tester запускает тест так же, как раньше, но в этот раз работают системы мониторинга ресурсов и анализа времени реакции.
Исследование данных об использовании ресурсов
- Во время выполнения плана проверки производительности выберите закладку Resources в Performance Report. На этот раз вы увидите данные ресурсов, выбранных для мониторинга.
Рисунок 21. Закладка Resources в Performance Report
- Отображаемые здесь данные не типичны для реального тестирования нагрузки, хотя и точны. В данной испытательной среде генератор нагрузки Performance Tester, Web-сервер, сервер приложений и сервер баз данных выполняются на одной машине. Обычно вы будете отслеживать ресурсы на каждом уровне вашего приложения. Кроме того, только что выполненный вами тест был очень кратковременным. Обычно тесты производительности будут намного продолжительнее, что позволяет системе достичь устойчивого состояния. Но пробная система позволяет оценить, насколько легко можно следить за использованием ресурсов во время теста производительности.
Если интересно, можете перейти в закладку Response vs. Time Detail, щелкнуть правой кнопкой мыши на графике и выбрать Add/Remove Performance Counters для добавления счетчиков ресурсов на страницу данных. Это поможет визуально сопоставлять любые всплески в графике использования ресурсов с активностью страниц.
- Поскольку не похоже, что данная проблема производительности Adventure Builder связана с аппаратным обеспечением, используйте анализ времени реакции для определения того, связана ли эта проблема с программным обеспечением.
Исследование данных анализа времени реакции
- Выберите закладку Page Performance в представлении Performance Report.
- Проанализируйте, что происходит за кулисами процесса для страницы Checkout. Щелкните правой кнопкой мыши на полоске в диаграмме для страницы Checkout и выберите Display Response Time Breakdown Statistics....
- Выберите URL /ab/checkout.do из мастера Selection Wizard и нажмите кнопку Finish. В представлении Response Time Breakdown Statistics перечислены методы, вызываемые на серверном уровне приложения Adventure Builder. Существуют различные способы исследования этой информации.
- Перейдите в представление Tree Layout, используя кнопку Layout в правом верхнем углу представления.
Рисунок 22. Вид Tree Layout
Теперь отсортируйте в порядке уменьшения общего времени , нажав дважды заголовок столбца Cumulative Time.
Поиск основной причины проблемы
Верхний узел представляет машину, на которой выполняются программные компоненты. В нашем случае это сетевое имя или ваша машина. В данном пробном тесте все компоненты system-under-test (тестируемая система) и test-harness (средства тестирования) выполняются на одной машине. В реальных тестах будет, вероятнее всего, перечислено несколько машин.
Узел второго уровня J2EE/WebSphere... представляет собой компонент сервера приложений WebSphere. Из этой информации сразу ясно, что элементом J2EE, который затрачивает наибольшую часть общего времени, является Servlet.
- Разверните узел Servlet и пакет com.sun.j2ee.blueprints.waf.controller.web, а также узлы класса
MainServlet
. Видно, что четыре вызова метода doPost
в классе MainServlet
длились 42.113 секунды. Обратите внимание на то, что ваши реальные значения будут, возможно, другими.
Рисунок 23. Время реакции метода doPost класса MainServlet
- Щелкните правой кнопкой мыши на методе
doPost
и выберите Open Source. Вот вы и нашли источник проблемы производительности!
Рисунок 24. Оператор sleep в исходном коде
Резюме
В данном руководстве вы познакомились с программой IBM Rational Performance Tester. За очень короткое время вы смогли создать набор тестов, записав тест производительности для Web-приложения, настроив тест на рандомизацию данных при воспроизведении и использовав его как часть реалистичного плана тестирования производительности. Вы выполнили этот план и использовали отчеты практически в режиме реального времени для определения медленной страницы. После этого вы собрали данные по использованию ресурсов и статистику времени реакции, которые затем использовали для исследования возможных аппаратных и программных источников проблем. Затем вы нашли конкретный метод исходного кода, вызвавший проблему.
Многое узнав из данного руководства, вы, тем не менее, лишь поверхностно коснулись возможностей программы Performance Tester. При дальнейшем исследовании Performance Tester вы обнаружите значительно больше функциональных возможностей, помогающих тестировать производительность приложений и выпускать приложения с уверенностью в их корректной работе. Дополнительную информацию по Performance Tester и другим программным продуктам IBM, описываемым в серии статей Hello World, можно найти в разделе "Ресурсы".