本主题解释如何为任何 Java 应用程序配置监视。当一个适当配置的事件监控工具被放置在测试套件的开始部分(其中包括调用 Java 应用程序的测试(直接或间接地))时,它将接收并可视化所发生的 Java 事件。
本章包含:
为什么监视 Java 应用程序?
通过监视仪表化的 Java 应用程序,你可以在执行功能测试时获得对应用程序内部行为的可见性。这允许你更好地确定测试失败的原因,并在回归测试中丰富用例验证标准。除了验证系统返回的消息和通过 ESB 监视的中间消息/步骤之外,还可以验证正在调用的 Java 应用程序中的事件。例如,你可以验证 EJB 方法调用或对另一个系统的远程调用是否使用了预期的参数。
应用程序配置
若要配置用于监视的应用程序,那么需要使用 Parasoft 的监视代理对其进行测试。为此:
- 将
insure.jar
和insureimpl.jar
从[Jtest_install_dir]/plugins/com.parasoft.xtest.jtest_[version]/resources/
复制到服务器上的一个目录,其中包含你希望测试的应用程序。 - 如果服务器正在运行,请停止它。
- 在启动脚本中,将
-javaagent command
添加到现有 Java 参数。有关更多详情,请查阅 javaagent Command Details。 - 重启服务。
服务器将像往常一样启动,但是使用指定的包类进行检测。现在,每当创建对象实例或调用指定包前缀中的方法时,SOAtest(可以从另一个开发人员/QA 桌面机器上运行)将能够在事件监视器中接收事件通知。
Javaagent 命令详情
基本命令
在所有情况下都需要以下 invocation-time 参数:
指定应使用哪个端口与被监视程序通信。使用 5050 到 5099。
参数 | 说明 |
---|---|
soatest | 要求配置监视。 |
port=[port_number] | 指定应使用哪个端口与被监视程序通信。使用 5050 到 5099。 |
instrument= [class_name.method_name(jni _sig)] | 指定要检查的完全限定方法的前缀。例如,给定的 有关更多详情,请查阅下面的注意事项。 |
trace=[class_name.method_na me(jni_sig)] | 指定要跟踪的方法调用的筛选器。有关更多详情,请查阅下面的注意事项。 |
注意事项 - 执行和跟踪
类的仪表装置应用于类的所有方法体;它提供了可见性,例如,调用类的什么方法以及这些方法返回什么值。
跟踪还通过检测希望可见的代码的调用者来实现。被调用的代码没有被仪表化。
例如,假设你希望跟踪代码中调用的第三方方法,而不是从其他第三方代码中调用的第三方方法。在本例中,你将编写自己的代码,并跟踪对第三方代码的调用。
更具体地说....
instrument=com.acme.util
配置匹配 com.acme.util
所有类的仪表装置。这些类的所有方法都是仪表化了的。在下面的代码中, writeData
方法将被仪表化:
package com.acme.util; class IOUtil { int writeData(DataOutputStream dos, Data data) { dos.write(data._int); dos.write(data._float); } }
instrument=com.acme.util,trace=
java.io 提供可见的 java.io
调用,该调用由 com.acme.util code
发起。仪表装置将调用添加到 writeData()
方法,以便检查哪些由被监视的代码生成的调用调用了 java.io
。
以下参数是可选的:
参数 | 说明 |
---|---|
trace_to_xml | 告诉监视器将复杂的 Java 对象序列化为 XML 表示形式。如果省略此选项,则只返回基元和对象的“toString()”值。 强烈建议将此参数用于事件监视器。如果只执行运行时错误检测,则不适用。 |
xmlsizelimit=[integer_value] | 确定以字节为单位的最大 XML 大小限制。如果未指定此选项,则默认大小为 100000。 仅当使用 trace_to_xml 时才适用。 |
xmlcolsizelimit=[integer_value] | 在生成 Java 对象的 XML 表示形式时,确定集合、映射、数组显示的元素的最大数量。默认情况下显示前 100 个元素。 仅当使用 trace_to_xml 时才适用。 |
xmldeeplimit=[integer_value] | 在生成 Java 对象的 XML 表示形式时,确定数据结构包含的最大字段深度。默认情况下包含深度为 8 的字段。 仅当使用 trace_to_xml 时才适用。 |
xmlexcl=[classes_or_fields] | ':' 从 xml 序列化中排除的分离类或字段(例如, xmlexcl=com.acme.A:com.acme.B._field)。 |
xmlinc=[classes_or_fields] | ':' 在 xml 序列化中始终包含分离的类或字段 (例如,xmlinc=com.acme.A:com.acme.B._field) xmlinc 的匹配优先于 xmlexcl 的匹配:如果有匹配 xmlinc 的内容,它总是会显示出来(即使 xmlexcl 也匹配它)。 当模式与类名匹配时,1) 该类类型或派生类型的字段将被排除在序列化之外,2) 该类型或派生类型的方法参数和返回值将不会序列化为 xml。 默认情况下,监视器不包括以下类型的类: .......................... 仅当使用 trace_to_xml 时才适用。 |
xmlsecondslimit=[seconds] | 默认情况下,如果你使用 trace_to_xml,那么监视将只花费 10 秒的时间将被监视的复杂 Java 对象转换为 XML 表示。这是为了防止监视代理在监视非常大的对象时出现显著的慢速。如果达到这个限制,那么 SOAtest 事件将显示以下消息,而不是对象的 XML 表示: 跳过:转换成 XML 需要很长时间:10 秒 如果希望更改 10 秒阈值,请使用 xmlsecondslimit 标志。例如: xmlsecondslimit=20 对于大型对象,推荐的方法是首先避免达到阈值:通过排除不感兴趣的字段来减小 XML 大小(使用 xmlecl 选项)。 |
trace_exceptions[=exception_c lass_prefix] | 显示与创建、抛出或捕获的异常相关的事件的跟踪。
|
terse | 将简洁的输出配置到控制台(堆栈跟踪只有 1 个元素)。 |
用于从 Eclipse 或应用程序服务器运行的应用程序
定义自己的类加载器(如 Eclipse、JBoss 和 Tomcat)的应用程序需要将 insure.jar
添加到引导类路径中。若要监视这些应用程序,请添加启动 VM 参数:
-javaagent:"<path_to_jar>\insure.jar=soatest,port=<port>",trace_to_xml,instrument=<my.pack-age.prefix>,trace=<my.package.prefix> -Xbootclasspath/a<path_to_jar>\insure.jar
例如,你可以使用:
-javaagent:"/home/user/parasoft/insure.jar=soatest,port=5060",trace_to_xml,instru- ment=com.mycompany.onlinestore,trace=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",trace_to_xml,instru-ment=com.mycompany.myapp,trace=com.mycompany.myapp
SOAtest 配置
- 双击 Event Monitor 工具打开工具配置面板。
- 在 Event Source 选项卡中选择 Instrumented Java Application 作为平台,然后指定服务器所在的主机名以及 Parasoft 代理运行时的端口号(默认为 5050)。
提示
- 当你的应用程序第一次使用监视代理启动时,我们建议你在开始检查所报告的事件之前,先对所需的测试或场景进行一次初始运行。这确保了各种检测和初始化过程的发生。它还可以帮助你获得更真实的数据。第一次运行的执行时间可能明显高于后续运行,可能会导致超时或其他副作用。后续运行将更好地反映被监视系统的真实行为。
- 从远程代理异步接收事件;接收到的事件与触发这些事件的测试操作之间没有直接的关联。由于 SOAtest 事件监控器按时间顺序显示它接收到的所有事件,因此测试事件和 Java 监视事件有时可能会显示顺序错误。为了降低这种风险,你可以 在每次测试完成执行设置后 增加事件轮询延迟的值。但是,这将导致测试执行时间增加(因为事件监视器将在每次调用之后暂停测试执行)。确保 Maximum monitor execution duration 值对于整个测试套件执行时间来说是足够的。对于这些参数,不同的系统和环境可能有不同的理想阈值,因此常常需要根据具体情况对它们进行调优。
- 一个最佳实践是开始检测和跟踪更广泛的包集合和类集合,然后逐渐减少这个集合。更多的检测会导致应用程序执行速度变慢,更多的包和类被跟踪会导致返回太多的事件。你可以调整这两个参数,并对它们进行调优,以获得你感兴趣的事件的确切类型。
- 当使用 trace_to_xml 选项时,你可能会在事件监视器中得到表示对象的非常大型的 XML 内容。其可能以 Mb 为单位,有时会达到 100,000 字节的大小限制(
xmlsizelimit
可调)。在这些情况下,可以考虑使用上面的各种 xml* 参数来控制感兴趣的内容,并限制数据量。