Тестирование приложений J2EE с помощью Rational PurifyPlusГоран Бегик (Goran Begic), Rational Software
Ранее, значительное количество пользователей спрашивали меня, как использовать Rational PurifyPlus для приложений на Java, выполняемых на стороне сервера. Некоторые советы общего характера можно получить из оперативной справки, поставляемой вместе с PurifyPlus, или же поискать ответ в базе данных Rational Technical Support. Однако этих советов может оказаться явно недостаточно при работе со всеми возможными средами развертывания - например, такими, как сервер приложений Java, хостирующий и выполняющий серверные компоненты Java.И, кроме того, появление на рынке большого числа серверов приложений Java еще больше усложняет эту задачу.В этой статье я представлю проверенный и надежный способ использования PurifyPlus для тестирования сервлетов и серверных страниц Java (JSP), выполняющихся на сервере Apache Jakarta Tomcat, версия 4. Это же решение можно применить для коммерческих серверов приложений Java; я успешно «вычистил» самые разные приложения J2EE, выполняемые на сервере WebLogic компании BEA, версии 5.1, 6.0 и 6.1, а также на сервере WebSphere компании IBM, версии 3.5 и 4. О сервере Tomcat проекта Jakarta Jakarta представляет собой проект разработки ПО с открытым исходным кодом, поддерживаемый компанией Sun. Главной целью этого проекта является создание свободно распространяемого серверного решения J2EE, с качеством, не уступающим коммерческим разработкам. Приложение Tomcat составляет главную часть этого проекта, и многие люди зачастую воспринимают это название как синоним всего проекта Jakarta. Tomcat не является полномасштабным сервером приложений Java, а всего лишь машиной обработки сервлетов и серверных страниц JSP, чего, впрочем, более чем достаточно для развертывания и тестирования JSP и приложений сервлетов Java. Tomcat может выполняться как самостоятельное приложение, так и интегрироваться в web-сервер Apache. Лично я решил использовать Tomcat потому, что он очень устойчив, надежен и, что немаловажно, бесплатно доступен. Дополнительную информацию о Tomcat и проекте Jakarta можно найти в списке ссылок в конце этой статьи. Web-страница, указанная в разделе ссылок, также содержит ссылку, по которой можно загрузить исполняемые файлы Tomcat и исходный код. СОВЕТ: Я рекомендую установить Tomcat в каталог, имя которого не содержит пробелов. Потом будет проще включить каталоги Tomcat в переменную classpath, например, при компиляции сервлетов. О Rational PurifyPlus
PurifyPlus представляет собой законченное решение, предназначенное для тестирования программных средств, в том числе и Java-приложений. Этот пакет состоит из трех модулей:
Эти три инструментальные средства обеспечивают не только полную поддержку для Java, но также поддерживают и Visual C/C++, Visual Basic, и приложения .NET. В этой статье, при упоминании PurifyPlus, я имею в виду версию 2001А Rational PurifyPlus. Конечно же, для тестирования Java-приложений на стороне сервера с помощью Rational PurifyPlus, вы должны инсталлировать эти приложения на серверной машине.
О сервлетах и серверных страницах Java Сервлеты и приложения Java выполняются на стороне сервера, и их основным предназначением служит создание контента для web-страниц в соответствии с запросом клиента. Сторона клиента обычно представлена web-браузером с загруженной web-страницей, на которой пользователь вводит данные, которые далее будут обработаны сервлетом, запущенным на стороне сервера. Результат работы сервлета отображается на web-странице, загруженной в браузер на клиентской стороне. Серверные страницы Java (JSP) представляют собой в основном HTML-страницы, содержащие специальные теги, позволяющие либо встраивать код Java в страницу, либо предоставлять доступ к JavaBean и сервлетам, запущенным на стороне сервера. Rational PurifyPlus не может проверять синтаксис HTML, но способна тестировать код Java из серверных страниц, следя за событиями, поступающими от виртуальной машины Java (JVM).
Подготовка сервлетов и серверных страниц Java к тестированию с помощью Rational PurifyPlus PurifyPlus имеет два основных уровня сбора данных: уровень методов и уровень строк. Для тестирования приложений Java на уровне методов, вам не нужно проводить перекомпиляцию тестируемого Java-приложения для сбора всей информации, относящейся к методам. Если вам нужно собрать информацию по строкам, то тогда придется перекомпилировать код Java для включения в него символьной отладочной информации. Для включения символьной информации в файлы классов Java, их следует перекомпилировать с параметром - g (компилятор компании Sun).
Вся информация о Java-приложениях, выполняемых на Sun Java 2-совместимых виртуальных машинах, будет собираться с помощью JVMPI (Java Virtual Machine Profiling Interface - интерфейс профилирования виртуальной машины Java). Обязательным условием является использования виртуальной машины Java, полностью совместимой со спецификациями Sun Java 2. Кроме того, Rational PurifyPlus также поддерживает JVM компании Microsoft. При компиляции сервлетов вам следует включить библиотеку сервлетов servlet.jar в переменную среды classpath. Эта библиотека инсталлируется вместе с Tomcat и находится в каталоге <Tomcat home>\common\lib. В качестве примера ниже представлена командная строка для компиляции MyServlet.java для создания файла с символьной отладочной информацией:
Подготовка среды Windows для тестирования серверных страниц и сервлетов Java с помощью Rational PurifyPlus Переменная среды
указывает домашний каталог для виртуальной машины Java, принятой по умолчанию. Таким образом, также указывается виртуальная машина Java, с которой будет работать Rational PurifyPlus. Для правильной настройки выполнения программы на Java и возможности использования PurifyPlus, вам следует выполнить следующую команду, перед тем как вы в первый раз начнете профилирование нового сеанса Java:
Этой командой будет обновлен файл политик Java для выбора среды выполнения Java (JRE - Java Run-time Environment). Ну а теперь давайте посмотрим на еще одну переменную среды:
Как уже говорилось ранее, Rational PurifyPlus собирает всю информацию о приложении Java, используя интерфейс профилирования виртуальной машины Java (JVMPI). Так как PurifyPlus и JVM выполняются в качестве двух различных процессов, Java-процесс требует загрузки совместно используемой библиотеки PurifyPlus, называемой PureJVMPI. Эта библиотека прослушивает события JVM, собирает информацию о выполнении программы, выдаваемую JVMPI, и отсылает эту информацию PurifyPlus. Эта динамически связываемая библиотека загружается при помощи указания дополнительной опции при запуске выполнимого файла Java: -Xrun. Ниже приведен пример того, как PurifyPlus может быть запущена из командной строки:
Для профилирования Java-приложений, выполняемых на стороне сервера, вам потребуется создать вручную специальную системную переменную среды, с использованием опции -Xrun, которая будет запускать PurifyPlus каждый раз при активизации JVM. Для Sun JVM имя переменной будет _JAVA_OPTIONS и значение этой переменной должно быть:
Если вы используете JVM компании IBM (что необходимо при работе на сервере приложений Java WebSphere), то в этом случае имя переменной среды должно быть IBM_JAVA_OPTIONS. Вышеупомянутая опция, указанная в переменной среды _JAVA_OPTIONS , будет запускать Rational Purify (или Quantify, или PureCoverage) каждый раз при запуске Tomcat, и Purify (или Quantify, или PureCoverage) будет автоматически начинать сбор данных для процесса Java. Вы можете не включать в отчет данные, собранные от тех частей Java-процесса, которые не относятся к тестированию сервлетов и JSP, с использованием как предопределенных фильтров, так и PurifyPlus Filter Manager. Подготовка среды сервера приложений Java к работе с Rational PurifyPlus Для работы Rational PurifyPlus с сервером приложений Java, крайне важно указать одну и ту же переменную среды JAVA_HOME как для сервера, так и инструмента PurifyPlus. Для Apache Tomcat, вы можете непосредственно установить эту переменную, выполнив команду:
Для серверов BEA WebLogic и IBM WebSphere, вы можете модифицировать командные файлы, используемые для установки переменных среды выполнения сервера, изменив значение переменной JAVA_HOME так, как показано ниже. Подготовка PurifyPlus к сбору данных по приложению Java, выполнямом на сервере Apache Tomcat Для того, чтобы запустить сбор информации Rational PurifyPlus о вашем сервлете или серверной странице Java, выполняющихся на Apache Tomcat, перед тестированием вы должны создать собственный набор предопределенных фильтров. Фильтры PurifyPlus В PurifyPlus предусмотрены две возможности фильтрации неотносящихся к тестированию данных. Первая возможность заключается в установке предопределенных фильтров для того инструмента, который вы планируете использовать (Rational PurifyPlus, Quantify или PureCoverage). Фильтр представляет собой список пакетов Java, для которых не нужно собирать данные. Этот список приводится в разделе [Prefilter] файла Profile.ini, который находится в родительском каталоге каждого из приложений PurifyPlus. Каждый пакет Java, указанный в списке, должен быть с новой строки. Давайте изучим пример, показывающий, как предварительная фильтрация работает с функциями PurifyPlus. Рис. 1. Файл Profile.ini для Rational Purify Допустим, что мы хотим отключить филирование пакета Java com.sun. Если мы указали com.sun. (обратите внимание на точку в конце строки) в качестве строки в разделе фильтрации Profile.ini, тогда этот файл и все входящие пакеты будут исключены при выполнении сбора данных PurifyPlus во время тестирования (см. рис. 1). Для предварительной фильтрации индивидуальных классов вы можете указать их полные имена (сначала, как обычно, идет имя пакета) без заключительной точки. Например, com.rational.MyClass будет фильтровать класс MyClass пакета com.rational . Если вы укажете только имя класса (например, MyClass ), тогда этот класс будет фильтроваться во всех пакетах. PurifyPlus не поддерживает фильтрацию по индивидуальным методам класса. PurifyPlus Filter Manager Второй способ фильтрации данных заключается в использовании Filter Manager, доступ к которому можно получить с помощью графического интерфейса пользователя каждого из инструментов (см. рис. 2A и 2B). Filter Manager создает специальный двоичный файл фильтрации для тестирования приложения Java. Он может быть использован только после проведения профилирования или сбора данных. Рис. 2A. Основное окно PurifyPlus Filter Manager в Rational Quantify Файлы классов, проверяемые в списке, будут исключены из отчетов, но данные, собранные для них, будут сохранены в итоговых результатах (т.е., в ячейке "Time", находящейся в нижнем правом углу окна Filter Manager, показанного на рис. 2A).
Рис. 2B. Использование PurifyPlus Filter Manager в Rational PureCoverage При запуске Tomcat в PurifyPlus, я рекомендую следующий список фильтров, находящийся в файле Profile.ini для каждого из средств PurifyPlus (Purify, Quantify, PureCoverage):
Для других серверных приложений Java, вам понадобится создать другие фильтры. См. мои СОВЕТЫ по поводу того, как применять Rational PurifyPlus с серверами Java-приложений BEA WebLogic и IBM WebSphere. Демо-приложение Демо-приложение, используемое в этой статье, представляет собой электронный книжный магазин, называющийся "Duke's Bookstore." Это web-приложение может быть загружено с web-сайта компании Sun. Первоначально оно было создано как часть учебного пособия по созданию и выполнению сервлетов Java. Приложение состоит из ряда web-страниц и сервлетов, создающих контент для этих страниц. PurifyPlus может применяться для тестирования либо всего Web-приложения, либо любой его части (например, индивидуальных сервлетов). Тестирование сервлетов и серверных страниц Java во время их выполнения с помощью Rational PurifyPlus После компиляции Java-компонента с помещением в результирующий файл отладочной информации, и установки необходимых фильтров для инструментов PurifyPlus, можно начинать сбор информации по профилированию строк кода и покрытию кода, поступающую от сервлетов и серверных страниц Java. В качестве первого шага, я советую запустить Rational Quantify и собрать информацию по анализу времени выполнения. Профилирование времени выполнения приложения с помощью Rational Quantify Присвоение значения -XrunPureJVMPI:Quantify переменной среды _JAVA_OPTIONS приведет к запуску Quantify при старте сервера Tomcat. По мере того, как вы работаете с демо-приложением, Quantify будет фиксировать время, затрачиваемое на выполнение каждого метода и строки кода, которые будут вызываться на web-странице. После того, как Tomcat инициализирован и запущен, доступ к тестовому приложению можно получить, указав в браузере следующий URL:
После того, как вы завершили тестовое приложение, закройте браузер и остановите сервер Tomcat. В Quantify результаты профилирования будут отображены в виде нескольких различных представлений. Первым является представление CallGraph, показанное на рис. 3.
|