一
介绍
IBM Rational Performance Tester(简称RPT)是IBM基于Eclipse平台及开源的测试及监控框架Hyades,开发出来的最新性能测试解决方案。
它可以有效地帮助测试人员和性能工程师验证系统的性能,识别和解决各种性能问题。
它适用于性能测试人员和性能优化人员,用于开发团队在部署基于HTTP和Https通信协议的Web应用程序前,验证其可扩展性、性能和可靠性。在为性能测试员和性能优化人员提供了前面所提到的各种性能测试能力以外,它还提供了可视化编辑器,一方面可以使新的测试人员可以在无需培训和编程的情况下,即可快速上手完成性能测试;另一方面,也为需要高级分析和自定义选项的专家级测试人员,提供了对丰富的测试信息的访问和定制能力、自定义
Java 代码插入执行能力、自动检测和处理可变数据的能力。
在安装RPT时会比较长时间,尤其是后面的更新程序步骤,一定要耐心等待。等待更新完毕后,会提示安装完成的。
使用RPT对系统性能进行分析的过程包括四个步骤:
- 测试记录
- 测试调度
- 测试运行
- 测试结果分析
下面对这四个步骤进行详细介绍。
二 测试记录
测试记录的过程如下:
1.创建性能测试项目
在菜单选择“文件”-“新建”-“性能测试项目”,在弹出的“新建性能测试项目”对话框中输入项目名称,点击《完成》键。
2.记录性能测试
- 在菜单选择“文件”-“新建”-“记录性能测试”,在弹出的“HTTP代理记录器”对话框中选择项目名称对应的文件夹,输入文件名,点击《完成》键。记录器开始工作。
- 在记录时,RPT会打开一个浏览器,提醒你在记录之前删除临时文件和cookie文件。
- 在浏览器输入要测试系统的路径,这里输入http://172.16.109.201/Cms/Login.aspx
- 录制完后,点击“记录控制器”的《停止记录》键或者关闭浏览器来停止脚本录制。记录器停止工作,“记录控制器”视图的内容显示如下:
![](images/200608012_1.jpg)
【注意】在记录结束后,如果“记录的千字节数”为0,那么说明本次录制失败了,得重新录制。
3.测试脚本回放
验证脚本记录的是否成功,这一步骤也适用于“优化测试脚本”步骤。
在“测试导航器”中选择需要回放的测试,右键菜单选择“运行”-“性能测试”,弹出“启动测试”的对话框。你也可以点击《详细信息》键来查看启动测试的详细信息。在第一次启动测试时,会自动生成测试代码。
如果回放后,在“性能报告”界面的“总体”TAB页中显示“完成”,并且界面中的柱状图都到达100,“错误日志”视图内没有错误提示,则说明本测试脚本回放成功了。
4.优化测试脚本
因为功能确认不是性能测试的首要目标时,我们需要谨慎的向测试中引入其他形式内容的确认以确保精确的回放。
a)插入检查点
右键点击页面/页面请求/页面响应,在右键菜单中选择启用相应的检查点。RPT提供了三种检查点:
●页面标题VP:对预期标题大小写敏感。
●响应代码VP:设置响应代码VP后,在每个页面请求的响应下面增加一个“响应代码验证点”的文件夹。如果匹配方法选择“模糊”,那么如果记录测试时的响应代码为200,在测试执行时,响应代码为201,202等均不会报错。
●响应大小VP:设置响应代码VP后,在每个页面请求的响应下面增加一个“响应大小验证点”的文件夹。
b)设置动态数据
在RPT里,可以通过数据池获得动态更新的数据。数据池把你在记录过程中所捕获的每个单独的数据以一组测试运行中的数据值做替换。数据池的目的是通过为每一次测试提供唯一的数值,以确保回放的真实性。
创建数据池的步骤如下:
1)在“测试导航器”中选择需要创建数据池的项目,右键菜单中选择“新建”-“数据池”,弹出“新建数据池”对话框
2)选择数据池所在的项目,输入文件名,如果想创建空的数据池,则直接点击《完成》键;如果需要将数据文件中的数据导入,那么就点击《下一步》键,选择需要导入数据的csv文件。如果欲导入的csv文件第一列是正常的数据,且第一行没有列名时,那么在导入csv文件的界面中,“第一行包含变量名和建议类型”和“第一列包含等价类”选项均取消选中。
打开数据池文件,“概述”Tab页显示数据池的一般信息,“数据表”Tab页显示导入的数据。这里,第一列是等价类信息,在性能测试中,这列的内容不需要考虑。可以通过右键菜单进行数据的维护操作。
替换数据的步骤如下:
1)选择需要使用数据池替换的页面(页面里的页面请求会变绿色)
2)在“测试数据”部分点击《数据池变量》键,在弹出的“选择数据池列”对话框中点击《添加数据池》键,弹出“导入数据池”对话框
3)在“导入数据池”对话框中,在“匹配的资源”部分会显示所有目前打开工作空间中所有未被关联的数据池文件,选择需要关联的数据池文件,点击《选择》键,返回到“选择数据池列”对话框
【说明】
1)在“导入数据池”对话框中,数据池的“打开方式”有三种:
●共享(每台机器):每台机器的虚拟用户从数据池的公共视图上取数据,并按照first-come-first-served机制顺序把数据分配给虚拟用户。虚拟用户或者迭代将从不同的行取数据,他们取的数据不可预知。
●私有:每个虚拟用户从数据池的私有视图上取数据,并且使用相同的顺序将数据行分配给虚拟用户。
●分段(每台机器):每台机器的虚拟用户从数据池的分段视图上取数据,并按照first-come-first-served机制顺序把数据分配给虚拟用户。分段是根据性能调度如何根据机器分配虚拟用户来计算的。例如,如果一个调度分配25%的用户给用户组1,75%的用户给用户组2,并分别分配这些用户组在机器1和机器2上执行。为了防止虚拟用户取重复的数据时,这是一个比较好的办法。
2)如果想要在数据池数据用完后测试提示失败,那么可以将“到达最后一行时回绕”选项取消选中。
3)在“选择数据池列”对话框中,选择需要使用的列,点击《使用列》键,返回到工作台,此时会发现被数据池列替换的变量变成绿色。
【不用颜色文字表示的含义】![](images/200608012_2.jpg)
使用Performance Tester记录器,我们已经捕获了性能测试。我们的测试在编辑器中,以树型视图显示。通过两种方法,我们优化了我们的测试:首先,添加验证点以保证准确的回放。在回放过程中,如果任何包没有返回与在记录中被捕获的代码相同的响应代码,测试失败,我们将在事件日志中得到一个通知;第二,数据池中记录输入的不同的登录用户信息。这将保证一个更真实的,不同虚拟测试器为他们的登录使用不同账号的回放。
三 测试调度
我们将使用性能测试调度来表示我们要在服务器上运行的工作量。虽然测试记录占去了大部分时间,然而准确的性能测试对保重有效的负载来说是极为重要的。这部分的目的是精确的估计实际用户将向系统提交的工作量。
我们需要根据系统的性能需求来设计我们的测试实施工作。这就需要在性能测试调度中进行设置。
新建测试调度的步骤如下:
1.在“测试导航器”中选择需要新建测试调度的测试项目,右键菜单选择“新建”-“性能调度”,弹出“性能调度”对话框
2.在“性能调度”对话框中,选择性能测试项目对应的文件夹,并输入文件名,点击《完成》键即可。
新建测试调度后,还需要对测试调度做设置后,才可以运行。设置测试调度的内容如下:
- 根据需要创建用户组。
步骤:
1)在性能调度编辑界面,右键点击性能调度名,在右键菜单中选择“添加”-“用户组”
2)在用户组的调度元素详细信息界面中设置用户组名、组的大小(按照百分比或设置实际用户数)、运行用户组的位置
- 设置用户组运行的测试。
步骤:
1)右键点击用户组,在右键菜单中选择“添加”-“测试”,弹出“选择性能测试”对话框。“选择性能测试”对话框中列出了所有当前工作空间中打开的性能测试项目。
2)选择用户组需要执行的测试,点击《确定》键。这里可以通过shift和ctrl键来进行多选。
- 设置延迟时间。
设置了延迟时间后,表示每个测试都会延迟设置的时间,可以方便你更好的控制用户的动作。
步骤:
1)右键点击用户组,在右键菜单中选择“添加”-“延迟”,在延迟的调度元素详细信息中设置延迟的时间。
- 设置循环次数,即设置脚本的迭代次数。
性能调度只包含了用户组和测试,用户组中的每个测试会按顺序的执行。循环提供了比简单的顺序运行复杂的多的控制。增加循环让你按照一定的迭代重复测试,并且设置测试运行的频度。
步骤:
1)右键点击用户组,在右键菜单中选择“添加”-“循环”,在循环的调度元素详细信息中设置迭代次数。
2)(可选)如果需要的话,也可以设置迭代速率。迭代率是指设置测试运行的速率,如每分钟4次迭代。
3)设置了循环次数后,需要为循环添加测试,步骤如2.设置用户组运行的测试。所设置的迭代次数是针对循环内的所有测试起作用。
- 设置随机选择器。
增加一个随机选择器,可以让你随机的重复一系列的测试,模拟真实用户的不同活动。假设一个随机选择器包括两个测试:浏览和下订单。你分配“浏览”测试权重
7,“下订单”3的权重。每次执行循环时,“浏览”测试有70%的机会被选中,“下订单”测试有30%的机会被选中。
步骤:
1)右键点击用户组,在右键菜单中选择“添加”-“随机选择器”,在随机选择器的调度元素详细信息中设置迭代次数。
2)按《添加》键,添加加权块,并输入加权块的权重。设置的加权块的权重之和最好等于1的倍数。
3)设置了随机选择器后,需要为加权块添加测试,步骤如2.设置用户组运行的测试。
- 设置调度选项
你已经定义好你的工作负载。你已经在你的系统上指定了用户类型,以及他们所要执行的操作。现在,按照下列步骤在运行你的调度之前指定一些调度层次的选项:
1)在性能调度编辑界面,右键点击性能调度名,在性能调度的“调度元素详细信息”界面,在“用户负载”部分输入“用户数量”。刚才在设置用户调度的详细信息时,我们还没有指定对于这个测试你想要运行的用户数量,这是因为调度和虚拟测试者的数量无关。这使得我们可以对不同数量的测试者使用相同的调度,在我们尝试找出系统在最大并发用户数量上,我们只需要该并发用户数量,而不需要修改调度内容。
2)RPT假设系统的所有用户是在到达系统后同时开始向服务器提交请求,在有些情况下,为了模拟更实际的启动,所以我们需要为每个用户增加延迟时间,可以通过在“用户负载”部分,选中“在启动每个用户之间添加延迟”,并设置延迟时间。
3)如果想要让测试调度在运行了一定时间后,自动停止测试,那么可以选中“在经过一段时间之后停止运行调度”,并设置停止前经过的时间。
4)在我们记录测试时,我们在每一页上所花费的时间都会被记录下来,英文称为Think Time。在回放过程中,我们也可以令所有用户使用这个时间,也可以改变它。如果要修改Think
Time,我们可以在“报文延迟时间”部分,修改报文延迟时间延迟的持续时间。
5)执行历史记录设置影响着“执行历史记录报告”中的细节程度级别。接受默认的“页面”级别的报告,以及用户数量数据采样值5。注意,当你运行一个大型测试时,一般来说更典型的使用“用户百分比”采用,一般在20%至30%。
6)统计区与执行历史记录非常相似,因为在这里我们可以设置为我们的报告数据采样所使用的用户数量。接受默认的所有用户,以及为我们的目的所采用的5秒。对一个更大型的测试来说,我们也许会减小我们的采样率为用户总数的20%至30%。
四 测试运行
在完成了测试记录和测试调度后,我们可以开始运行整个测试。
步骤:
- 在“测试导航器”中选择测试调度文件,在右键菜单中选择“运行”-“性能调度”,系统会弹出“启动调度”对话框,RPT运行一些初始化任务并启动测试。你可以点击《详细信息》键查看初始化的详细信息
- 一旦你的测试运行,“性能报告”界面打开,在测试运行过程中,你可以看到关于你所运行测试的活动反馈。当测试由于一些原因而失败时,我们可以在任何时间取消测试,修正这个问题并重新启动测试调度,而无需等待测试完成后才能够意识到发生了问题。
五 测试结果分析
在测试执行后,获取测试结果数据的步骤如下:
1.打开“性能测试运行”选项卡
2.选择需要分析测试运行结果对应的目录(RPT为每次性能测试运行创建了一个文件夹)
3.在右键菜单中选择需要打开的测试报告。执行测试完后,只能查看到6个报告,只有在运行性能调度时,可以查看到更多的报告。在6个报告里,百分点报告和历史记录报告,只能在运行结束后才能看到。
在查看反馈数据前,我们需要首先确认已经有了一个比较好的测试运行。采用以下步骤确认已经有了很好的数据。
1.检查“总体”报告,如果两个或三个柱条的数值都是100,那么证明运行很健壮。
2.第一个柱条说明页面代码100%的返回了期望值。在记录过程中,RPT为我们所点击的每一页记录下服务器的应对代码。在回放过程中,RPT将所有虚拟用户所得到的结果与这些数值作比较。任何不匹配的部分将在这里反映出来,如500-Sever
too busy响应而不是典型的200-OK响应。
3.第二个柱条在页面组件级别上提供了同样的信息。记住页面组件包括实际的页面html以及所有图像和其他页面上的对象。
4.第三个柱条是我们在编辑测试脚本时所设置的验证点的结果摘要。如果100%说明所有的验证点都已全部通过。
5.通常来说,我们希望所看到的柱条都在90%以上。如果没有的话,可以检查“服务器运行状况摘要”和“服务器运行状况详细信息”报告,以确认我们的测试是否有问题。
6.如果需要查看附加的问题信息,可以查看“执行历史记录报告”。
如果确认测试没有问题,那么就可以阅读数据以查看其所表现的系统性能的时候了。我么可以通过查看各个报告来分析数据。
1.在“页面吞吐量报告”有两个图:页面点击率和用户负载。页面点击率提供了常规服务器响应。如果看到界面上大部分点上页面尝试速率等于页面点击率,那么可以知道服务器向所有的请求都可以快速的做出应答。如果有比较多的不匹配的地方,说明服务器有时很困难跟上响应。用户负载图向我们显示出在任何给定时间点上的用户数量。我们首先应该查看报告以确认用户是否如期望的方式在运行。然后,我们返回这个报告以确认在这个测试中我们所经历的瓶颈在给定点处活跃的用户数量。
2.“页面性能报告”是我们可用报告最重要的一个,它显示了测试流量中所有页面的平均响应时间。
3.“页面性能报告”是有欺骗性的,平均时间可以掩盖掉突发性的过快或过慢的响应周期,特别是在一个很长周期的测试中。因此,查看“响应与详细时间报告”
检查整个测试流量中的响应时间是极为重要的。如果有部分脉冲,那么需要看一下这些最高点的响应时间,如果没有超过8秒,就不需要特别关注,如果超过的很多,那么需要进行分析。还需要注意有一个典型的模式是大多数页面的初始响应时间都要比后续的响应时间要慢。这反映出了服务器的高速缓存机制。当服务器对一个页面提供了初始服务,一般情况这个页面会被保存在服务器缓存中。后续的响应可以从这个缓存中得到,使得这个动作会比初始阶段从磁盘获取快得多。在这里你可以通过测试起始阶段中从高至低的斜线中查看这个模式。
我们也可以通过在报告中添加计数器来定制测试报告,添加计数器的步骤如下:
1.在“性能测试运行”选项卡中选择不同类型的文件夹下选择需要的计数器
2.将选中的计数器拖到打开的性能测试报告界面,此时可以看到界面上增加了一个指标
删除计数器的步骤如下:
1.在“性能测试运行”选项卡中,选择需要删除计数器的测试运行结果对应的目录
2.打开“所有主机”目录,打开所选报告对应的目录,找到需要删除的计数器
3.选择需要删除的计数器,右键菜单选择“除去计数器”,如下图所示
![](images/200608012_3.jpg)
我们还可以需要对报告进行管理。步骤如下:
1.在“性能测试运行”选项卡中,选择需要管理报告的测试运行结果对应的目录
2.在任何节点选择右键菜单的“管理报告”,弹出“选择报告”对话框,可以在这个对话框中进行创建、编辑、删除报告的操作。
六 FAQ
Q:在执行性能测试时,出现如下错误提示信息:RPTI0009W 由于错误,导致测试运行异常终止。
A:这是由于RPT不支持DHCP导致。
Q:在测试中意外的破坏了测试文件,该怎么办?
A:如果在编辑测试时,意外的破坏了测试文件,那么可以从录制过程文件中重新生成一个新的测试文件。步骤如下:
选择“资源”透视图,选择所破坏脚本名且后缀名为recmodel的文件,在右键菜单中选择“生成测试”,在弹出的对话框中根据操作提示进行操作。
Q:我想和数据池关联的字符已经被指派为数据池候选者时,我该怎么处理?
A:如果你想和数据池关联的字符已经被指派为数据池候选者时,你需要先取消关联。右键点击数据池候选者,执行“清除引用”操作。例如,如果在脚本中,你输入“joe,john”作为查询条件,在脚本的数据池候选者中显示为“doe%2C+john”。如果你不想将“joe,john”作为单独的候选数据列进行关联,而是想将“doe”和“john”作为单独的数据列,那么你必须先将关联取消。
Q:页面的测试数据中文用十六进制表示,我该如何让其显示为中文?
A:右键选中用十六进制表示的测试数据,在右键菜单中选择“对名称和值进行解码”。
Q:在性能调度中,如何将用户组分配给某台机器?
A:在用户组的调度元素详细信息界面中,有两个单选项:在本地计算机上运行此组和在以下位置运行此组。选择“在以下位置运行此组”,然后执行添加新的位置操作,或者是添加现有的位置。
七 参考资料
1.IBM Rational Software Development Platform 试用版帮助
2.分析系统性能 使用IBM Rational Performance Tester V6.1验证系统的可测量 |