• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Eclipse Test and Performance Tools Platform 简介

发布: 2007-10-19 16:49 | 作者: 网络转载 | 来源: 网络转载 | 查看: 1115次 | 进入软件测试论坛讨论

领测软件测试网


运行分析会话
使用 Eclipse 和 TPTP 来运行并分析 “玩具工厂”。TPTP 可以显示活动对象的数量、执行时间等等。要使用 Eclipse 和 TPTP:
1.    启动 Agent Controller。
2.    进入 Agent Controller bin 目录,然后运行 RAStart.sh:
% cd $JAVA_DIR/tptpd/bin
% ./RAStart.sh
3.    在 Eclipse 中,进入工作台并通过点击 File > New > Project 创建一个新的 Java 项目。从选项列表中选择 Java Project,然后点击 Next。
4.    在下一个窗口中,输入 Toy Maker 作为 Project Name,然后点击 Finish。标题为 “Toy Maker” 的新项目应该会出现在 Package Explorer 面板中。
5.    在这个项目中,在 example 包中创建一个称为 SpaceShipToy 的 Java 类。点击 File > New > Class。
6.    在弹出的窗口中,在 Package 域中输入 example 并在 Name 域中输入 SpaceShipToy。窗口中的其他设置保持不变。
7.    点击 Finish。现在应该会看到新类的骨架。
8.    将清单 1 中的代码复制到 Eclipse 类编辑器中,一定要留下 package example 声明,但是要替换空的类定义。保存代码以使修改持久化,这还会使 Eclipse 自动地重新编译类的新版本。
9.    如果要运行这个应用程序,点击 Run > Run...,双击 Java Application,选择 SpaceShipToy,然后点击 Run。要与这个应用程序进行交互,点击 Windows > Show View...,然后选择 Console。
10.    输入 1(数字一)并按 Return。屏幕应该与图 2 相似。

图 2. 在 Eclipse 下运行的玩具工厂


对同一个应用程序进行分析
要对同一个应用程序进行分析:
1.    点击 TPTP Profile,然后选择 Profile...。
2.    展开 Java Application 以显示 SpaceShipToy。注意,Profile 窗口与点击 Run 时出现的 Run 窗口相似,但是多了一个称为 Profile 的选项卡。
3.    点击 Profile 在分析器下启动这个应用程序。如果透视图没有自动切换,那么点击 Window > Open Perspective > Other...,然后选择 Profiling and Logging。
4.    当 Profiling and Logging 透视图出现时,展开 Profiling Monitor 视图的内容,然后选择以 <monitoring> 开头的行。在选择这一行时,出现一个控制台视图。
5.    输入 0、1、2 和 9。屏幕应该与图 3 相似。

图 3. Profiling and Logging 透视图与正在运行的应用程序

6.    点击 Memory Statistics 视图,然后展开与 example 包相关联的行。这个视图应该与图 4 相似。这里有 4 个对象实例:三个代表 “构建的” 玩具,一个代表未被引用的玩具。

图 4. 在构建三个玩具对象和一个未被引用的玩具之后的内存消耗

Memory Statistics 视图中的列记录了实例和内存使用统计数据:
•    Total Instances 反映一个类的实例总数。
•    Live Instances 显示有多少个实例仍然被引用,还没有被垃圾收集器收集。
•    Collected 统计垃圾收集器已经收集了多少个类实例。
•    Total Size (bytes) 和 Active Size (bytes) 分别显示所有实例使用的累积内存总量(一种高水位标志)和活动实例当前使用的内存量。
结束试运行
要结束这一次试运行,切换回控制台视图,然后再次按 0、1 和 2 数字键。点击 Monitoring 视图中的 trash can 图标强迫实施垃圾收集。好的垃圾收集器会收集所有未被引用的对象。在任何时候,都可以通过点击 Refresh 刷新当前透视图中的所有视图,见图 5。
图 5. Refresh 按钮

寻找需要的数据
Profiling and Logging 透视图提供了许多视图,其中提供关于应用程序状态的大量数据。要查看视图列表,点击 Window > Show View > Other...,然后展开 Profiling and Logging 下面的列表。这个列表应该与图 6 相似。

图 6. Profiling and Logging 视图的列表


收集数据来填充视图
根据您的目标和面对的问题,可以收集数据来填充所有这些视图或者其中一个视图。在前一节中,收集的惟一数据是内存统计数据,这些数据填充在 Memory Statistics 视图中。Monitoring 视图与图 7 相似。

图 7. Monitoring 视图中的基本统计数据

最下面的展开的列表表明,当前的分析配置只包含内存使用情况的统计数据。我们来创建一个收集尽可能多信息的新的分析配置,这样您就能够看到分析和性能工具提供的所有度量
1.    点击 TPTP Profile 按钮中的小箭头,然后选择 Profile...。
2.    在 Profile 窗口中,选择 SpaceShipToy,然后点击窗口底部左边的 New。
3.    在最右边面板的顶部,在 Name 域中输入 Lots of Data ,然后点击 Apply。
4.    点击 Profiling 选项卡,然后点击 Add...。
5.    在下一个窗口中,输入 All 作为 Profile set name 并在 Description 域中输入 All of the data that's available。点击 Next。
6.    下一个面板让您选择要收集的数据。展开所有选择,然后选中所有复选框,如图 8 所示。

图 8. 要选择的度量

7.    点击 Execution Time Analysis。
8.    选择 Collect method CPU time information 复选框,然后选择 Show execution flow graphical details 选项。再次点击 Next。下一个窗口(见图 9)允许过滤掉您不感兴趣的类。

图 9. 从分析中排除无关的类

9.    出于这个例子的目的,点击面板顶部的 Add... 来添加一个新的过滤器集。将这个过滤器集命名为 No Monkey Business 并点击 OK。
10.    点击规则列表右边的 Add... 在过滤器集中添加一个新规则。在 Class name 域中输入 example.SpaceShipToy 并在 Method name 域中输入 main(星号),选择 EXCLUDE 作为 Rule(见图 10),然后点击 OK。

图 10. 编辑过滤器规则

11.    在更大的窗口中,点击 Apply。
12.    现在已经定义了要分析的应用程序和要收集的度量。点击 Profile。
13.    在 Profiling and Logging 透视图中,点击 Memory Statistics 视图。应该会看到,根据刚才创建的规则,没有对方法 example.SpaceShipToy.main() 执行度量。
提示和技巧
TPTP 工具提供了丰富的特性,可以帮助您深入地了解应用程序。另外,因为 TPTP 与 Eclipse 的其余部分很好地集成在一起,您会发现许多方便之处。
为了帮助您,下面提供一些提示和技巧。

快速建立数据过滤器
启动一个分析会话并打开 Execution Statistics 视图。这个视图显示一个应用程序中的所有类和方法(至少是还没有在过滤器集中过滤掉的那些)。在这个视图中右击,打开图 11 所示的快捷菜单。

图 11. 快捷菜单

点击 Filter out...,选择 Profiling,然后点击 OK。在下一个窗口(见图 12)中,输入 Monkey Business 作为过滤器名并输入 build 作为过滤器字符串,然后选择 Filter by 下面的 Method name 选项。点击 OK 并再次点击 OK。
图 12. Edit Filter 窗口

视图应该会改为只显示 example.SpaceShipToy$Monkey.build() 方法的统计数据。
要想恢复视图,再次看到所有方法,可以点击 Filter(见图 13)并选择 No filter。要想编辑任何过滤器,可以点击同一个按钮并选择 Manage filters...。
图 13. Filter 按钮



跳到源代码
仍然留在 Execution Statistics 视图中。双击 SpaceShipToy$Booster 类。这时就会切换到 Java 透视图并直接跳到内部类 Booster 的定义。内存分析视图和 Eclipse 代码编辑器之间的这种连接是非常有价值的特性。

高级的复杂过滤器
可以使用 Edit Filter 窗口的 Advanced 选项卡来构建任意复杂的过滤器。高级过滤器 是一系列规则,其中每个规则列出一个属性、一个条件(比如 “equal”、“not equal” 和 “like”)和一个值。您想知道一个实例消耗了多少内存吗?这可以用高级过滤器来表达。

组织和排序
大多数数据视图可以按照包、类和方法对数据进行组织。通过点击大多数数据视图顶部的三个按钮之一(见图 14),可以快速地改变数据的组织方式。
图 14. 用于组织数据的三个按钮

从左到右,分别是按照包、类和方法进行组织的按钮。
还可以通过点击任何列标题,对所有数据进行排序。点击列标题一次,就对这个列按照升序进行排序;再次点击同一个列标题,就按照降序显示数据。

使用 UML2 序列图深入了解代码
TPTP 提供了另一个对了解正在运行的应用程序有帮助的特性:UML2 序列图。这个图不但显示类和方法之间的调用序列,还可以突出显示热点,也就是消耗了大部分应用程序执行时间的代码部分。

在序列图中查看代码
要使用 UML2 序列图查看代码:
1.    退出正在分析的所有玩具工厂应用程序实例。
2.    点击 TPTP Profiling 按钮中的小箭头。选择 Profile...,选择 SpaceShipToy,点击 Profiling 选项,然后选择 All。
3.    点击 Apply(如果需要的话),然后点击 Profile。
4.    当应用程序在 Profiling Monitor 视图中启动时,右击刚启动的进程并选择 Open With... > UML2 Thread Interactions 来打开 UML2 class Interactions 视图。因为这个应用程序刚刚启动,所以这个图只显示了对 main() 的调用,如图 15 所示。

图 15. 只显示 main() 调用的简单 UML 图

5.    切换到控制台视图并与应用程序进行交互,从而产生更多的方法调用。然后切换回 UML2 Trace Interactions 视图。UML 图应该已经增大了,可能与图 16 相似。

图 16. 示例应用程序的 UML2 视图

6.    将鼠标指针放在左边空白处中的红色条上,就会显示一个表示 CPU 时间消耗的刻度条(见图 17)。

图 17. CPU 消耗刻度条

7.    深红色表示最大。在这个应用程序中,SpaceShipToy 类的构造过程显然是瓶颈。
对对象引用进行编目
另一个对正在运行的应用程序进行分析的有用特性是 Object References 视图,这个视图显示应用程序中每种对象的引用数量。如果您的 Java 代码看起来消耗了过多的内存,那么收集并查看对象引用可以帮助您找到出问题的代码。

使用 Object References 视图
使用 Object References 视图与使用其他 TPTP 视图一样容易:
1.    终止正在分析的所有进程。
2.    在 Profiling Monitor 中右击并选择 Unload Profiling Data。按照提示删除到目前为止收集的所有数据。
3.    选择以前监视的所有进程并按 Delete。出现提示窗口时,选择 Do not delete contents,然后点击 Yes。
4.    对玩具工厂应用程序启动一个新的分析会话。切换到控制台视图,然后按 1 2 9 来创建两个玩具和未被引用的第三个 “玩具”。
5.    通过在 Profiling Monitor 视图中点击 Collect object references,收集正在使用的对象(见图 18)。

图 18. Collect Object References 按钮

6.    在 Eclipse 工具栏上,点击 Open Object References(见图 19)来打开 Object References 视图。Object References 视图列出应用程序中使用的每个对象和对应的引用数量。

图 19. Object References 按钮

7.    展开 SpaceShipToy。引用表应该与图 20 相似。已经创建了三个玩具,所以这个表是准确的,因为每个玩具包含一个推进器、一个太空仓(其中有两只猴子)和三级火箭。

图 20. 示例应用程序在某一时刻的 Object References 视图


对本地 Java 应用程序使用 TPTP
除了对通过 Eclipse 工作台构建和启动的 Java 应用程序进行分析之外,还可以分析本地计算机上已经在运行的 Java 应用程序(应用程序也可以在远程计算机上,但是这里不讨论分析远程应用程序的过程)。可以通过 TPTP 附着 到进程上。附着之后,就可以使用前面学习过的所有工具来探索和观察内存分配。

附着到本地 Java 应用程序
要附着到本地 Java 应用程序:
1.    退出和删除 Profiling Monitor 视图中所有正在运行的进程。
2.    打开一个命令窗口并确认 PATH 和 JAVA_HOME 环境变量指向 JRE。
3.    确保 LD_LIBRARY_PATH 包含 TPTP 库。在测试系统上,这些变量如下所示(根据您的系统配置,路径名和目录名可能不一样):

% printenv
.
PATH=/bin:/usr/bin:/usr/X11R6/bin:/home/mstreicher/java/jdk/bin
JAVA_HOME=/home/mstreicher/java/jdk
JAVA_DIR=/home/mstreicher/java
LD_LIBRARY_PATH=/home/mstreicher/java/tptpd/lib:

4.    确保 TPTP Agent Controller 正在运行。进入包含 Agent Controller 的目录,然后停止并重新启动这个守护进程:

% cd $JAVA_DIR/tptpd/bin
% ./RAStop.sh
RAServer stopped, pid = 3163
RAServer stopped, pid = 3164
.
RAServer stopped, pid = 18108
% ./RAStart.sh
Starting Agent Controller
RAServer started successfully

5.    将玩具工厂应用程序作为单独的独立 Java 应用程序运行:
o    进入包含示例应用程序的工作空间目录,可能是 $HOME/workspace/Toy Maker。在这个目录中,应该会看到一个称为 example 的目录,其中包含 SpaceShipToy.java 的代码和相关联的 .class 文件。
o    将当前工作目录(.(点号))添加到 CLASSPATH:

% cd $HOME/workspace/Toy Maker
% ls -F
example
% export CLASSPATH=.:$CLASSPATH

6.    用 -XrunpiAgent:server=enabled 选项通过 TPTP Agent Controller 启动应用程序。enabled 模式以普通方式启动 Java 应用程序并在后台运行控制器。(如果在附着到应用程序之前不想执行它,那么使用 controlled 模式。)

% java -XrunpiAgent:server=enabled example/SpaceShipToy

7.    返回到 Eclipse,然后点击 TPTP Profile 按钮中的小箭头。选择 Profile...。在左边的列表中,双击 Attach - Java Process。
8.    在下一个窗口中,在 Name 域中输入 Toys,然后选择 localhost 作为主机。点击 Apply。
9.    通过点击 Agents 选项卡选择一个代理,如图 21 所示。

图 21. 选择要附着的代理

点击显示的代理(如果当前没有在分析其他应用程序或进程,那么应该有一个代理),然后点击 >。为了保存这一修改,再次点击 Apply。
10.    通过点击 Profiling 选项卡并选择一个分析集,从而选择要收集什么数据。可以选择 All,就会采用前面创建的分析集。
11.    点击 Apply,然后点击 Profile。Eclipse 应该会切换到 Profiling and Logging 透视图。
12.    在大多数系统上,这时会出现与图 22 相似的窗口。

图 22. Profiling 提示

这个警告是正常的,它提醒您尽管已经附着到了这个进程,但是必须手工启动监视。为了启动监视,右击刚启动的分析进程,然后选择 Start monitoring。
13.    切换回命令窗口,与应用程序进行交互。再返回 Eclipse 查看正在运行的应用程序的分析数据。完成之后,点击 Terminate Process 按钮(见图 23)。

图 23. Terminate Process 按钮

将在命令窗口中杀死进程:

% java -XrunpiAgent:server=enabled example/SpaceShipToy
.
Stage complete.
Start stage...
Stage complete.
Start stage...
Stage complete.
zsh: killed   java -XrunpiAgent:server=enabled example/SpaceShipToy
%

结束语
本教程演示了如何通过分析代码来调整和改进 Java 应用程序。通过使用 Eclipse TPTP,可以运行代码并探测哪些代码段浪费了内存并导致性能降低。TPTP 还提供了其他工具,可以从大型日志文件中提取信息,以及自动地获取和分析测试结果。
TPTP 中的其他工具包括一个记录-回放设施(可以测试在 Eclipse 下运行的应用程序的 GUI)和一个称为 XRay 的特殊分析器(专门用于分析源自 Eclipse 平台的应用程序)。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

44/4<1234

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网