使用IBM Rational PurifyPlus测试J2EE应用程序

发表于:2008-08-18来源:作者:点击数: 标签:ibmIBMrationalRATIONALRational
本文主要解决如何在Java 应用程序的 服务器 端使用IBM Rational PurifyPlus的问题。 简介 这份白皮书主要解决如何在Java 应用程序的服务器端使用IBM Rational PurifyPlus的问题。 这些说明也许并不能完全满足每种可能的部署环境――例如一个托管并运行Java s
本文主要解决如何在Java 应用程序的服务器端使用IBM Rational PurifyPlus的问题。

简介
这份白皮书主要解决如何在Java 应用程序的服务器端使用IBM Rational PurifyPlus的问题。

这些说明也许并不能完全满足每种可能的部署环境――例如一个托管并运行Java server端组件的Java应用服务器。另外,现在市场上也有很多种Java 应用服务器。这份白皮书展示了一种经过验证的有效方法来使用Rational PurifyPlus测试运行在Apache Jakarta Tomcat Version 4 服务器上的 JSP(Java ServePages)和 Java Servlet应用程序。类似的方法可以应用在商业性的Java 应用服务器上;许多运行在BEA WebLogic(版本5.1、6.0、6.1)和IBM WebSphere( 版本3.5 和 4)的J2EE应用程序都因此得到了"净化"。

关于 Jakarta Tomcat
Jakarta是一个Sun公司支持的开源项目。它的最终目标是创造一个质量达到了那些商业解决方案要求的免费J2EE服务器端解决方案。Tomcat应用程序是整个项目的主要部分,并且在很多人看来,它几乎就等同于整个的 Jakarta 项目。Tomcat并不是一个完整的Java 应用服务器,它只是一个 Servlet+JSP 引擎,不过用它来部署和测试 JSP 和 Java Servlet 应用程序是绰绰有余的。它既可以独立运行,也可以集成在 Apache Web 服务器中运行。之所以选中 Tomcat 是因为它非常健壮、可靠,并可以免费获取。更多的关于Tomcat和Jakarta项目的信息可在文档末尾的参考文献列表中找到,在参考文献中列出的页面同时还包括一个到Tomcat安装程序和源代码的URL地址。

关于 IBM Rational PurifyPlus
PurifyPlus是一个测试Java应用程序的完整解决方案。它包括三个应用程序:

  • Rational Purify -- 一个内存分析工具(收集方法和对象层次的内存分析数据,并指出应用程序的内存热点所在)
  • Rational Quantify -- 一个应用程序执行时间分析工具(收集方法和线层次的分析数据并指出应用程序的性能瓶颈)
  • Rational PureCoverage -- 一个代码覆盖率分析工具(通过突出未执行的方法和代码行来收集没有测试到的部分的数据)

这三种工具不仅对Java,对Visual C/C++,Visual Basic和.Net应用也都提供了全面的支持。在这份白皮书中,Rational PurifyPlus指的是 Rational PurifyPlus 版本2001A。为了利用 Rational PurifyPlus来测试 Java Server端应用程序,您必须先在服务器上安装它。

关于 Servlets 和 JavaServePages
Servlets是运行在服务器端的 Java 应用程序;它们的主要作用是根据客户端的需要为Web页面创建内容。客户端通常是一个 Web 浏览器和一个用户用来输入数据的网页,这些数据将由运行在服务器端的Servlet处理。而 Servlet 处理的结果则将显示在客户端的网页上。

JavaServerPage(JSP) 基本上是一些 HTML 页面,它们带有一些特殊的标签可以用来将 Java代码包含进来或者访问服务器端运行的 Java beans 和servlet。Rational PurifyPlus并不能检查HTML语法,但它却可以通过监控从JVM(JAVA 虚拟机)上收集到的事件来测试JSP中包含的Java部分。

准备利用Rational PurifyPlus进行测试的Java servlets和JavaServer Pages

PurifyPlus提供了两种基本的数据收集级别: 方法级和行级。如果使用方法级来测试Java应用程序,您就不需要重编译测试的Java程序来获得所有和那些方法相关的数据。如果您对行级的信息感兴趣,那您就得用Symbolic调试信息来重编译Java代码。在Sun的Java编译器中用来得到Java类文件中的Symbols的开关是 '-g'。


clearcase/" target="_blank" >cccccc border=1>

>javac -g MyServlet.java

所有在兼容Sun Java2的虚拟机上运行的Java应用程序信息都可以通过JVMPI(Java Vitrul Machine Profiling Interface )收集。注意必须使用与Sun Java2 要求完全兼容的JAVA 虚拟机。Rational PurifyPlus 同时也完全支持 Microsoft Java 虚拟机。

在编译 servlet 时您需要在 CLASSPATH 中包含 servlet 库"servlet.jar"。整个库文件是随 Tomcat 一起安装的,可以在目录 \common\lib 中找到它。下面是一个使用 symbolic 调试信息来编译 MyServlet.java 的命令行示例:



Javac -g -classpath <\common\lib\servlet.jar>
MyServlet.java

准备 Windows 环境以便利用 Rational PurifyPlus 测试 JSP 和 Java Servlets

环境变量:
JAVA_HOME

指明了默认 JVM 的 home 目录。它也是使用 Rational PurifyPlus 的JVM的默认选择。为了正确安装 Java 使得 PurifyPlus 可以运行,您必须在一个新的Java服务创建之后第一次profiling之前执行下面的命令行:



pstart -setup

这个命令会更新选中的Java实时环境(JRE:Java Runtime Enviroment)的Java Policy文件。现在来看另一个环境变量:



JAVA_OPTIONS(或者 IBM JVM 的 IBM_JAVA_OPTIONS )

Rational PurifyPlus 通过 Java 虚拟机假脱机接口(JVMPI)来收集所有关于Java应用程序的信息。因为JVM和Rational PurifyPlus是作为两个不同的进程运行的,Java进程需要载入一个名为PureJVMPI的PurifyPlus共享文件来侦听 JVM 事件,通过 JVMPI 收集运行数据。这个动态连接库是通过一个运行Java可执行文件时的附加选项:'-Xrun'来加载的。这里有一个关于PurifyPlus如何从命令行启动的例子:



>java -XrunPureJVMPI: Purify Java_App(或
>java -XrunPureJVMPI: Quantify Java_App(或
> java -XrunPureJVMPI: Coverage Java_App)

为了分析服务器端Java应用程序和服务,您需要手动创建一个特殊的包括"-Xrun"选项的系统参数,从而在每一次使用JAVA虚拟机时自动运行选中的PurifyPlus工具。对Sun JVM,整个变量的名称是_JAVA_OPTIONS,它的值应该是:



-XRunPureJVMPI: Purify (or  -XrunPureJVMPI:Quantify or  -XrunPureJVMPI:Coverage)

如果您使用的的是IBM JVM(在运行IBM WebSphere Java应用服务器时必须选择该JVM),那么整个环境变量的名字应该是 IBM_JAVA_OPTIONS.

在_JAVA_OPTIONS环境变量中设置的上述选项会使Tomcat应用程序运行时启动Rational Purify(或者Quantify和PureCoverage),而Purify(或者Quantify和PureCoverage)则会自动的开始收集该Java进程的数据。您可以使它的报告不包含与测试的JSPs和Servlets无关的数据,具体方式是通过预滤器(pre-filter)或PurifyPlus的过滤管理器来实现的。

准备Java 应用服务器环境来运行Rational PurifyPlus

为了使PurifyPlus和Java应用服务器一起运行,必须为服务器和PurifyPlus工具指定相同的JAVA_HOME 参数。对Apache Tomcat,您可以直接执行下列命令:



SET JAVA_HOME = < path to JRE installation directory>

如果是BEA WebLogic 服务器或者IBM WebSphere,可以修改您用来安装环境的批处理文件,只要根据如上所示改变参数JAVA_HOME的值就可以了。

准备PurifyPlus来收集在Apache Tomcat上运行的Java应用程序信息

为了使PurifyPlus可以收集在Apache Tomcat上运行的Java servlet或者JSP信息,您必须在开始测试之前创建一个自定义的预滤器(pre_filter)。

PurifyPlus过滤器。在PurifyPlus中有两种途径来过滤与测试无关的数据。第一种方法是为您要使用的工具(Rational PrufifyPlus、Quantify或PureCoverage)设定一个预滤器。

过滤器是一个列表,它包含了那些无需从中获取数据的Java包的名字。整个列表在Profile.ini文件的[Prefilter]节定义,您可以在PurifyPlus工具的主目录下找到该文件。

列表上的每个Java包都必须位于新行。请看一个演示预过滤在PurifyPlus中如何工作的例子:

图1: 一个Rational PurifyPlus 的 Profile.ini文件

假设我们想要过滤Java包com.sun 。如果我们将 "com.sun."(请注意这里字符串末尾的点号)作为一行放到Profile.ini的pre-filetering部分,那么这个文件和它的所有子包都将在PruifyPlus进行数据收集时被排除在外(请看图1)。如果要预过滤单个的类,您可以使用该类的全名(不需要结束的点号)。例如,com.rational.MyClass将预过滤com.rational包中的MyClass。如果您仅仅指明了类文件(e.g.MyClass),那么所有的包中的这个类都将被过滤掉。PurifyPlus不能过滤一个类的单个方法。

原文转自:http://www.ltesting.net