测试 Web 应用程序
如果您对 IBM® Rational® Performance Tester 非常了解,那么您可以跳过此部分,如果您对它不了解,那么下面是一些介绍。Rational Performance Tester 是一个为测试 Web 应用程序设计的软件,它的功能是在部署之前捕获并更正性能问题。Rational Performance Tester 通过模拟并发用户的数量,产生一系列报告,这些报告被清晰的标志出来显示 Web 页面的性能、URL 和事务等信息,来帮助您在部署之前查明系统的瓶颈。
高级的特性包括在每一个用户组的行为和使用方式层面的详细测试调度安排。Rational Performance Tester 同时还提供了一种自动化的"数据池"特性,它可以改变每一个模拟用户使用的测试数据设置。使用一个集成了测试编辑器的浏览器窗口,您可以回顾在测试记录期间访问过的 Web 页面。除此之外,高级测试人员可以选择将自定义的 Java 代码插入到性能测试中,用来执行类似于高级数据分析和请求解析的操作。
这篇文章将会介绍一些 Rational Performance Tester V7.0 的特性。为了展示新特性,我们将会记录并执行一个简单的测试。
核心特性
下面是 IBM Rational Performance Tester V7.0 中一些可用的特性概括介绍。它拥有很多的特性,我们将会详细的讨论其中的一些,剩余的将会概括性的介绍。这些特性在 Rational Performance Tester Help 中有概括性介绍。
Citrix Presentation Server 扩展允许您装载运行在 Citrix Metaframe Presentation Servers 上的测试窗口应用程序。您可以使用带有可选图形识别技术的窗口创建和改变事件来完成这个工作,从而同步用户输入数据和服务器输出数据。当您使用 Citrix 应用程序记录一个会话前,这个应用程序的行为必须是完全可复制的。应用程序必须经常在相同目录下以相同的顺序建立窗口和 GUI 元素。鼠标或者键盘事件必须显示相同的输出结果。
由于 Citrix 性能测试和 Citrix Presentation Server 客户端在一个非常低的层级(鼠标移动和点击)上进行交互,所以在记录后(例如移动测试元素,添加循环或者条件,或者插入新的序列)您对测试做的任何更改,都可以改变用户行为仿真的环境以及引起同步超时。当您编辑测试时,需要特别注意用户行为的环境。
除了 Citrix 之外,还有一些对 SAP 测试的支持。您可以在一个测试中使用类似于循环,条件和事务等的测试元素。您还可以在一个测试套件的选择点中插入一项记录。SAP 的确认点被增强为可以捕获任何 SAP GUI 的属性,并可以随意的针对一个预期数值做检查。此外,您还可以从一个 Web 接口(通过生成 SAP Web 构建)记录和回放 SAP 应用程序。
问题分析工具做以下三件事情。他们是:
- 收集响应时间分解数据
- 收集资源监控器数据
- 为分析收集的数据提供视图和工具,以便找出引起性能问题的原因。
您可以通过使用数据收集代理完成这个工作,这些代理存在于来自产品或者开发环境的用于捕获跟踪、监视或者日志数据的数据收集框架中。您还可以使用基于 Eclipse 的工具进行检视和代码及运行数据的分析,以及关联数据。
性能和问题分析工具可以帮助您找到并修复代码问题,这些问题可能引起分布式性能问题。它包含一些您熟悉的类似于 IBM® Performance Optimization Toolkit 等的工具,它们被封装在 Rational Performance Tester 中。下面描述的一些特性(例如,资源监控和响应时间分解)在这些工具中有详细的介绍。
资源监控数据由一序列在特定间隔期间的观察组成。您可以实时收集数据,或者您可以从 IBM® Tivoli Enterprise™ Monitoring Server 找回这些数据。除了响应时间分解数据之外,资源监控数据为您提供了一种更加完善的系统视图,它可以帮助您确定问题。下面是一些数据范例,您可以收集并分析它们:
- CPU 使用状况(总体,对于单个处理器,甚至是单个进程)
- 可用内存
- 硬盘使用状况
- TCP/IP 以及网络吞吐量
这个特性提供了一种更加完善的系统视图,它可以帮助您隔离问题。您可以在测试(或者代理)时使用 IBM® Tivoli® Monitoring、Windows Performance Monitor 或者 UNIX® rstatd 监视器监控系统。您既可以使用 Eclipse Test & Performance Tools Platform (TPTP)阅读器,又可以使用 Rational Performance Tester performance 报告来观察资源监控器数据。
响应时间分解为您显示了系统的每一个部分在测试期间的时间所占用系统运行总时间的比重。响应时间分解视图和一个测试或者时间表的页面元素(URL)相关。这样您可以在任意 HTTP 页面元素的响应时间统计表中,察看在测试下系统每一个部分所花费的时间。您可以使用响应时间分解来做下列事情:
- 识别代码问题
- 察看哪一个服务器上的哪一个应用程序是整个系统的瓶颈
- 进一步决定哪一个包、类或者方法引起了这个问题
为了捕获响应时间分解数据,您必须在一个测试或者调度中启动它,然后配置将要捕获的数据的信息。数据收集框架(当您安装 Rational Performance Tester 工具时您应该会看到)收集响应时间分解数据。应用程序运行时的每一个您想要收集数据的主机,必须拥有数据收集框架并且将其运行)。除此之外,您还必须配置(或者工具)每一个应用程序服务器以便使用数据收集框架。
注释:启动响应时间分解收集功能,让整个性能日指标可以请求所需的内存数量,因此我们可以设定在何时何地启动它。
期待已久的特性
下面介绍的两个特性是我从 Rational Performance Tester 发布以来一直期待的特性。缺少 IP 混淆和对客户端数字证书的支持,限制了我使 用Rational Performance Tester 为一些类型应用程序类型进行性能测试。现在这两个特性已经包含在其中了。
Rational Performance Tester 现在拥有了 IP 混淆,一项我急需的特性。默认情况下,当您运行一个调度时,每一个虚拟用户都会拥有相同的 IP 地址。但是这在真实的生活中是不存在的。对于特定类型的应用程序来说,它可以影响负载如何分布,甚至影响应用程序的详细功能。拥有了这个特性后,您可以让每一个虚拟用户感受到好像只有他一人在使用主机。
要实现这个功能,您需要在主机上配置 IP 混淆,然后在调度中启动 IP 混淆功能。当您运行调度时,多个主机的网络流量会被显示。IP 混淆使您可以配置一个代理,在 HTTP 测试运行期间就好像负载是来自不同的 IP 地址。
数字证书是一个文件,它绑定了一个带识别码的公用密钥(一个用户或者一个组织)。可信的证书权威机构发布数字证书,它们被用来鉴别用户和组织访问 Web 站点,e-mail 服务器和其他安全系统的权限。一个证书存储是一个存档文件,它包含绝大部分数字证书,或者是由不同证书权威机构发布的证书。
使用Rational Performance Tester V7.0,您可以做:
- 建立数字证书
- 通过数据池访问它们
- 将这些数据池与测试相关联
它可以通过使用代理KeyTool命令行程序来建立数字证书存储及实现。数字证书让您针对服务器使用基于 SSL 的 HTTP 记录和运行测试,对于应用程序来说,它需要客户端的数字证书来验证用户身份。
其它特性
最后,在 V7.0 中还有一些其它新特性:
- 当您使用 Firefox 或者 Mozilla 浏览器记录 HTTP 应用程序时,您不再需要配置它们。
- 目录认证点支持预期和未预期的结果。
- 在 Help 文档中包含了如何在测试中替换主机名称。
- 测试执行服务文档包含更多的范例。
- Performance Testing SDK(软件开发工具包)在安装过程中可以作为可选安装项目。
建立一个性能测试脚本
让我们察看一个性能测试的简单的范例。您将会针对 BookPool.com 运行一个小型的负载程序(这个负载非常的小)。随着对范例的学习,您将会对新特性的细节有所了解。其余的特性将会一带而过。
按照下列步骤建立这个测试脚本。
- 打开 Create New Test From Recording 向导。
- 选择 HTTP Recording,如图1所示,点击 Next 按钮。
图1:Create New Test From Recording 向导
- 为脚本输入一个名称,如图2所示。这个测试执行了一个简单的查询操作,并在购物车中添加一本书籍,在这个范例中(
bookpool
)反映了它的基本流程。
图2:为测试输入一个名称
- 点击 Finish 按钮。
打开 Recorder,如图3所示。这个过程可能要花费几分钟时间。
图3:打开 Recorder
- 如果您回到 Rational Performance Tester,如图4所示,您可以看到 Recorder Control 正将您在记录期间执行的行为记录入日志。
图4:Rational Performance Tester Recorder Control
Recorder 运行之后,Rational Performance Tester 会打开浏览器到 ReadMe 页面,如图5所示。这个页面概要了一些性能测试的公共实践。(注释:这取决于您的浏览器默认主页的设置。)
图5:Firefox 中的 Rational Performance Tester ReadMe 页面
- 这是您的测试的正式运行面板。在 Address 栏,输入 URL www.BookPool.com 然后开始记录测试。
- 在搜索对话框中,输入
Software Testing
然后点击 Search 按钮,如图6所示。
图6:搜索对话框
- 当结果页面被装载后,点击 Add to Basket 按钮来还第一本书。当我建立这个测试时,第一本书的书名为How to Break Software: Functional and Security Testing of Web Applications and Web Services(顺便说一下,这是一本极好的书!)。如图7所示:
图7:还第一本书的范例
- 在 Shopping Cart 页面加载之后,请关闭浏览器。关闭浏览器意味着 Rational Performance Tester 将停止记录。Rational Performance Tester 将会产生您的脚本,然后再测试编辑器中打开它,如图8所示:
图8:Performance Test:测试编辑器
测试编辑器列出了测试的 HTTP 页面的标题。当您展开它们时,您会在每一个页面中看到请求和响应数据。您可以使用编辑器来检查或者定制一个测试,这个测试会根据一个已记录的会话自动的产生,当然如果您愿意也可以先为其编制一段测试代码。注意在 V7.0 中的 Common Options 和 HTTP Options 都被标志在了 Test Element Details 区域,但是它们经常在同一场景下使用。您同时还会在视图的顶部看到 Enable response time breakdown 的检查框。
- 如果您点击 Common Options 标签,如图9所示,您会看到在哪里为您的测试指定数字证书。
图9:Common Options 标签上的 Digital Certificates
在这篇文章中不涉及任何数字证书的设置,但是您可以察看响应时间分解。 - 为了查看它们之间的不同,请不要选择
AddToCart
元素上的 Enable response time breakdown 选项。您需要在 Shopping Basket 页面启动这个选项,如图10所示。
图10:为 Shopping Basket 选择 Enable response time breakdown 选项
现在您已经为建立一个调度做好了准备,下面您可以运行您的测试程序了。
建立一个调度
调度允许您在远程聚合测试,排序测试和运行测试。一个调度可以简单到就像一个用户在运行一个测试,或者复杂到不同组的成百个用户,每一个人在不同的时间运行一个不同的测试。根据您所了解的内容,我们可以定制一个调度:
- 聚合测试来模拟不同用户的行为
- 设置测试运行的顺序:顺序地、随机地或者加权顺序
- 每次测试运行时设置时间
- 以确定的速率运行测试
- 在远程终端运行一个测试,或者一组测试
在您建立了一个描述系统行为的调度后,您既可以使用正在测试的应用程序的连续构建,或者使用一个不断增加数量的虚拟用户来运行这个调度。
建立一个调度:
- 右键点击您的项目,然后选择 New > Performance Schedule。
- 在 Performance Schedule 向导中,输入调度的名称,然后点击 Finish 按钮,如图11所示:
图11:Performance Schedule 向导
- 这位一个用户组建立了一个新的调度,如图12所示:
图12:New Performance Schedule
用户组让您使用多种特性来表达您系统上的各种类型的用户,在逻辑顺序下分组测试。图12显示了执行期间一组包含100%的用户。您现在所拥有的结果可以100%产生用户搜索,在他的购物车中添加购买项,在最后更改它们的想法,或者在另一个 Web 站点察看价钱。对于更现实的用户来说,您可以将浏览人员、购买人员、店主或者查看订单的用户分组。您可以为每一个行为建立一个脚本。
同时,您还要注意这个视图中拥有一连串新的标签。在这篇文章中虽然您不会看到所有的标签,但是您还是会看到它们中的一些。首先,将您的测试添加到用户组。
- 右键点击用户组,然后点击 Add > Test 按钮。
- 在 Select Performance Tests 对话框中,选择 AddToCart 然后点击 OK,如图13所示:
图13:在调度中添加测试
在继续之前,请快速的查看您在哪里可以找到 IP 混淆。 - 如果您点击用户组,您将会在 Schedule Element Details 部分下的表格中看到 IP 混淆。当您配置远程执行路径时,您需要设置它的 IP 混淆选项。对于这个测试来说,我们只需要选择 Run this group on the local computer ,如图14所示:
图14:User Group 1 元素下的 IP 混淆
- 下一步,您需要为用户改变开始时间。选择 ScheduleOne 选项,调度的根节点。
- 在 Schedule Element Details 部分的 General 标签上,选择 Add a delay between starting each user 框体,如图15所示:
图15:设置用户数量和每一个运行的用户的延迟
- 在延迟设置中,输入
100
milliseconds,如图15所示。除此之外,将 Number of users 数值设置成5。注意: 请不要将用户的数值设置成大于5或者10的数值。我想 BookPool.com 不希望遭受服务拒绝攻击。
- 选择 Think Time 标签,清除 Limit think times to a maximum value 检查栏,如图16所示。我对认为限制思索时间并不感兴趣。注意这里有几个不同的选项,其中包含 Vary the think time by a random percentage。
图16:设置思索时间
- 最后,选择 Response Time Breakdown 标签,然后同时选择Enable collection of response time data 窗框和 AddToCart 测试用例。
- 一旦您选择了测试,设置了选项之后,请将 Detail level 设置成 High(让我们看看这个工具能够做什么)。
- 由于 detail level 被设置成了 high (它可以使您慢下来),在这个测试中我们要限制它为一个用户使用。
当您完成设置后,您的 Response Time Breakdown 标签应该和图17所示类似:
图17:设置 Response Time Breakdown 选项
您的调度已经准备好可以运行。
运行您的调度
难理解的部分已经结束!按照下列步骤运行调度:
- 在 Test Navigator 中,选择 ScheduleOne。
- 右键点击调度,然后选择 Run > Run Performance Schedule。
这个过程启动了您的测试和报告的生成程序。您将会看到先前版本中所有的报告,不过其中添加了一些新的选项和特性。例如,报告中包含平均响应时间,并提供了时间的标准偏移量。除此之外,您现在可以为特定的时间范围建立报告。这篇文章不会涉及所有的报告,但是我们会涉及一些有特色的响应时间分解。
- 右键点击任意一个默认报告的页面,您可以查看很多报告,如图18所示:
图18:右键点击页面查看报告选项
现在您有很多选项可选,它们是:- Display Response Time Breakdown Statistics
- Display Host Response Time Breakdown
- Display Page Element Responses
- 如果您选择 Display Page Element Responses,您会看到每一个页面元素的平均时间,如图19所示:
图19:Display Page Element Responses
- 如果您选择 Display Response Time Breakdown Statistics,您将会看到 Selection Wizard,如图20所示: 您可以选择一个单独的元素。
图20:运行时间分解 Selection Wizard
在这里您可以切换到其他页面,并查看每一个 URL 详细的响应时间。 - 选择一个 URL 然后点击 Finish 来查看页面的 Methods 细节,如图21所示:
图21:Method-level 响应时间
- 如果您选择 Display Host Response Time Breakdown,您会看到不同报告选项弹出,如图22所示。这在真实测试项目中没有任何实用价值,您可能会从您的测试中的各种服务器上收集数据(Web 服务器、应用程序服务器、数据库服务器等等)。这样的话,系统中正在测试的每一个服务器的 Response Time Breakdown 的数据都会显示在报告中。
图22:Host Response Time Breakdown 选项
- 选择 Average Base Time (seconds) 选项。您应该会看到和图23类似的视图:
图23:正常状况下主机分解时间
这里还有其他报告选项,但是您只要运行这些报告选项就需要至少花费1周的时间。其他的报告选项请查看 Help 文档。
下一步
这篇文章介绍了在 Rational Performance Tester V7.0 下运行负载测试的基础知识。您也可以使用这些工具做其他类型的性能测试。当您已非常熟练掌握基本性能测试特性时,您可以尝试使用其它的特性。
一条基本规则,如果您每次打开工具时都研究一项新的特性,那么您永远也不能精通它们。Rational Performance Tester Help 是个很好的帮手,您还可以到 IBM® developerWorks® Web 网站查看性能测试的相关资料。我推荐您看一些深入的介绍文章,或者是浏览 Performance 和 VU Testing 论坛。
文章来源于领测软件测试网 https://www.ltesting.net/