本主题解释如何使用 SOAtest 在 Java 应用程序上执行运行时错误检测。

本章包含:

需要安装 Parasoft Jtest

通过与 Parasoft Jtest 集成,SOAtest 提供了 Java 运行时错误检测和 Java 事件监视功能,从而为 Java 提供了广泛的测试和分析实践。

在使用 SOAtest 的运行时错误检测和/或 Java 事件监视功能之前,请确保 1) 在你的机器上安装了 Jtest 2)启用了 SOAtest 的“Jtest 连接”许可证选项。

若要获得 Jtest,请进入 http://www.parasoft.com/jtest,然后单击页面顶部的下载链接。

注意,此跨产品的功能需要 通过 p2 更新站点归档安装 Jtest 和 SOAtest(查阅 Eclipse p2 更新站点安装 以获得更多详情)。

运行时错误检测概要

SOAtest 可以在执行功能测试或渗透测试时执行运行时错误检测。

运行时错误检测暴露了在应用程序运行时发生的关键缺陷。缺陷报告具有空前的准确性。对于有效地识别仅在运行时才出现的缺陷(例如:文件覆盖)以及查明导致应用程序崩溃、性能下降和不可预测行为的根本原因,这一点非常关键。

SOAtest 将每个报告的错误与检测到错误时正在运行的功能测试关联起来。违规行为和功能测试之间的这种关联允许你跟踪每个报告的错误到针对应用程序的特定用例。

检测到的错误类别包括:

  • 应用程序崩溃
  • Eclipse 开发
  • 例外
  • 功能错误
  • 文件 I/O 流
  • 图形用户界面
  • 数据库
  • 网络
  • 最佳化
  • 移植性
  • 安全
  • Servlets
  • 线程 & 异步

准备服务器

在监视应用程序之前,必须将适当的 jar 文件复制到运行应用程序服务器的机器上,然后配置应用程序服务器以使用 jar。具体做法如下:

  1. insure.jarinsureimpl.jar[Jtest_install_dir]/plugins/com.parasoft.xtest.jtest_[version]/resources/ 复制到服务器上的一个目录,其中包含你希望检查的应用程序。
  2. 如果服务器正在运行,请停止它。
  3. 在启动脚本中,将 -javaagent 命令添加到现有 Java 参数。
    • 有关更多详情,请查阅 javaagent Command Details
    • 如果你还希望在执行功能测试时监视应用程序的内部行为,请保证添加可选的 trace_to_xml 参数。有关更多详情,请查阅以下框。
  4. 重启服务。

服务器将像往常一样启动,但是使用指定的包类进行检测。

在测试执行期间获得对应用程序内部行为的可见性。

在为运行时错误检测配置应用程序时,还需要为应用程序监视做好准备,以便在执行功能测试时查看应用程序的内部行为。这允许你更好地确定测试失败的原因,并在回归测试中丰富用例验证标准。例如,你可以验证 EJB 方法调用或对另一个系统的远程调用是否使用了预期的参数。

若要执行该监视:

  • 请在你的服务器启动脚本使用必需的 trace 和建议的 trace_to_xml 参数。
  • 在要监视的测试场景的开始部分添加一个正确配置的事件监视工具。

有关更多详情,请查阅 监视 Java 应用程序  。

javaagent 命令详情

基本命令

需要以下 invocation-time 参数:

参数说明
soatest需要配置运行时错误检测。
port=[port_number]指定应使用哪个端口与被监视程序通信。使用 5050 到 5099。
instrument= [class_name.method_name(jni_sig)]指定要检查的完全限定方法的前缀。例如,给定的 com.abc.util.IOUtil.method,它将执行 IOUtil.java 类中的所有方法,该类需以 method开头。如果给定的 com.abc.,那么它还将执行那些方法和类的所有方法,其完全限定名以 com.abc.开头。可以提供特定类名。Required

用于从 Eclipse 或应用程序服务器运行的应用程序

定义自己的类加载器(如 Eclipse、JBoss 和 Tomcat)的应用程序需要将 insure.jar 添加到引导类路径中。若要监视这些应用程序,请添加启动 VM 参数:
-javaagent:"<path_to_jar>\insure.jar=soatest,port=<port>",instrument=<my.package.prefix> -Xbootclasspath/a<path_to_jar>\insure.jar

例如,你可以使用:
-javaagent:"/home/user/parasoft/insure.jar=soatest,port=5060",instrument=com.mycompany.onlinestore -Xbootclasspath/a:/home/user/parasoft/insure.jar

关于其他(独立版)Java 应用程序

至于其他(独立版)Java 应用程序,你不需要将 insure.jar 添加到引导类路径。例如,你可以使用:
java -javaagent:"C:\Program Files\Parasoft\insure.jar=soatest,port=5050",instrument=com.mycompany.myapp

自定义测试配置

在执行运行时错误检测之前,需要自定义测试配置,以指定要检查的应用程序和要查找的错误。为此:

  1. 创建新的测试配置,如 配置策略的测试配置和规则中所述。
  2. Execution> Runtime Error Detection 选项卡中,请执行以下步骤:
    1. 启用 Perform runtime error detection
    2. 在  Server agent host 字段中,输入运行要检查的应用程序的服务器的主机。
    3. Server agent port 字段中,输入运行要检查的应用程序的服务器的端口。
    4. 启用/禁用规则来指定要检测的错误类型。

检测错误

要对应用程序执行运行时错误检测:

  1. 请选择要使用运行时错误检测执行的功能测试的节点。
  2. 运行自定义测试配置(在前一节中进行了描述)。

检测到的错误将报告如下:



报告中也提供了同样的细节。

注意,SOAtest 将每个报告的错误与检测到错误时正在运行的功能测试关联起来。违规行为和功能测试之间的这种关联允许你跟踪每个报告的错误到针对应用程序的特定用例。

为运行时错误检测配置特定 Web 服务器的技巧

本节提供有关配置流行 Web 应用程序服务器的详细说明,以便使用 SOAtest 的运行时错误检测。

JBoss App Server 3.0.4

  1. 备份 JBossInstallRoot/bin/run.bat (针对 Windows)或备份 run.sh (针对 UNIX)。
  2. 在原始文件中,将 JVM 参数添加到 JAVA_OPTS 变量。例如:
    set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig)] -Xbootclasspath/a:[eventmonitor directory]/insure.jar

Sun Java 系统应用程序服务器

  1. 登录到管理控制台(默认情况下,通过端口 4848 访问)。
  2. 单击 JVM Settings 链接。
  3. 单击 JVM Options 链接。
  4. 单击 Add JVM Options 链接。
  5. 在新建的文本字段中添加参数 "-javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor directory]/insure.jar"
  6. 单击 Save
  7. 重启服务。

WebSphere 6.1

  1. 在一台可以启动服务器/应用程序的机器上,将完整的 eventmonitor 目录从 SOAtest 安装复制到运行时要检查的应用程序机器(例如, c:\eventmonitor)。
  2. 进入 http://<HOST>:9060/ibm/console/ 以查看 WebSphere 应用程序服务器管理控制台。
  3. 在左窗格中,选择 Servers> Application Servers。将打开一个应用程序服务器列表。



  4. 在应用程序服务器列表中,单击要配置的服务器的名称。将打开所选服务器的 Configuration 选项卡。



  5. 单击 Process Definition 属性,该属性列在 Server Infrastructure> Java and Process Management下。将打开流程定义控件。



  6. 在 Additional Properties 区域,选择 Java Virtual Machine 属性。将打开 Java 虚拟机控件。



  7. 启用调试模式,并将 JVM 参数添加到当前调试参数的末尾。使用 -javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor directory]/insure.jar
  8. 滚动到页面底部并单击 Apply 将更改保存到本地配置。
  9. 单击 Save 将更改保存到主配置。

WebSphere 5.x

SOAtest 将自动为 WebSphere 5.1 本地测试环境服务器配置额外的 JVM 参数,这些服务器是从 WSAD 5.1 IDE 中启动的。若要配置所有其他 WebSphere 5.x 服务器来执行执行时错误侦测时,请使用以下程序:

  1. 进入 http://<Host>:9090/admin (默认端口为 9090)以查看 WebSphere 应用程序服务器管理控制台。
  2. 在左窗格中,选择 Servers> Application Servers



  3. 在应用程序服务器列表中,单击要配置的服务器的名称。将打开所选服务器的 Configuration 选项卡。



  4. 单击 Process Definition 属性,其列在 Additional Properties 区域。将打开流程定义控件。



  5. 在 Additional Properties 区域,选择 Java Virtual Machine 属性。将打开 Java 虚拟机控件。



  6. 启用调试模式并将 JVM 参数添加到调试参数中。使用
    -javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor directory]/insure.jar
    • 版本 5 的 Websphere 应用程序服务器还可能要求 -Xnoagent JVM 参数来使用 SOAtest 进行操作。-Xnoagent 将修复 java.lang.NoClassDefFoundError: sun/tools/agent/Agent WAS 5.x 启用问题。
  7. 滚动到页面底部并单击 Apply 将更改保存到本地配置。
  8. 单击 Save 将更改保存到主配置。

WebLogic 8.1 (使用 Sun JVM)

  1. 备份用于启动服务器的启动脚本。
    • 若要发现路径,请右键单击启动菜单,然后从快捷菜单选择 Properties 。路径通常是 C:\bea\user_projects\domains\mydomain\startWebLogic.cmd (Windows) 或 .sh (UNIX)。
  2. 在原始脚本中,将 JVM 参数附加到 set JAVA_OPTIONS  行(如果该行还未添加,则现在就添加)。例如:
    set JAVA_OPTIONS=-javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor directory]/insure.jar

JBossService

如果通过命令行来使用 JBossService.exe 以启动 JBoss:

  1. 下载 JavaService-2.0.7.zip ,该文件来自 http://forge.objectweb.org/project/show-files.php?group_id=137&release_id=1267
  2. 将文件解压到任何目录。
  3. JavaService.exe 复制并粘贴到应用程序的 bin 目录,然后将其重命名为 JBossService.exe
  4. 修改 run.bat ,如下所示:
    1. 添加以下行来设置 Java 选项,包括运行时错误检测参数(可以通过设置全局变量来清除这些参数)。
      • 连接到正在运行的应用程序的示例:
        set JAVA_OPTS=-Dprogram.name=%PROGNAME% -Xms128m -Xmx512m "-Djava.endorsed.dirs=%JBOSS_ENDORSED_DIRS%" -javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_ name.method_name(jni_sig)] -Xbootclasspath/a:[eventmonitor directory]/insure.jar
    2. 将脚本配置为使用监视调用 JBossService.exe
      • 例如,对于名为 Showcase 的应用程序,不要调用 "%JAVA%" %JAVA_OPTS% "-Djava.endorsed.dirs=%JBOSS_ENDORSED_DIRS%" -classpath "%JBOSS_CLASSPATH%" org.jboss.Main %*,添加以下行:

        rem install Showcase (routes system.out and system.err to the runtimeerrordetection directory)
        JBossService.exe -install Showcase 
        "%JAVA_HOME%\jre\bin\server\jvm.dll" 
        "-Djava.class.path=%JBOSS_CLASSPATH%" %JAVA_OPTS% -start org.jboss.Main -stop org.jboss.Main -params %* -method systemExit -out C:\runtimeerrordetection\stdoutJBOSS.log -err 
        C:\runtimeerrordetection\stderrJBOSS.log -overwrite
         
        rem start the Showcase service 
        net start Showcase

        注意

        此安装只应执行一次。理想情况下, run.bat 文件应该只包含 start 命令;安装可以通过命令行完成。如果已经安装了服务,则需要使用适当的 VM 参数重新安装它。你可使用以下命令停止或卸载服务:
        net stop Showcase
        JBossService.exe –uninstall Showcase
  5. 正常执行 run.bat 文件。打开的命令提示符应该显示以下打印输出:

    **********
    Showcase 服务正在启动。
    Showcase 服务成功启动。
    **********

    请注意,当打印输出完成时和 Jboss 实际启动时存在延迟。 
  6. 像往常一样执行一些应用程序事务,然后验证监视是否正常工作。

    注意

    startstopinstalluninstall 命令还可通过命令行以及 run.bat来执行。

  • No labels