IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Rational  >

使用 IBM Rational Performance Tester v6.1 来产生动态需求

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Scott Snyder (shsnyder@us.ibm.com), Senior Performance Analyst, IBM

2005 年 12 月 20 日

对于测试Web应用的性能,您需要使您的测试记录有能够与这些应用软件高度动态交互的能力。这篇深入的文章向您展示了在IBM Rational Performance Tester中如何从事数据池和数据关联的工作。

测试一个Web应用程序的性能不是简单的记录情节并回放它来模拟众多不同的使用者点击这个应用程序。许多现代Web应用程序和Web应用构架建立了能够动态建立的包含复杂URL的页;因此他们不能在一个测试场景中被静态的记录。这意味着您必须能够创建一个灵活的测试场景足以产生适应任何种类的客户/服务器需求的结合,不论服务器的响应具有怎样的复杂性和动态特性。在 IBM® Rational® Performance Tester 6.1的帮助下,您能够通过使用数据池和数据关联来记录与高动态性Web应用程序之间的交互。这篇文章向您展示了如何通过Performance Tester在导航Web应用时记录基本的测试场景。

记录一个测试场景

Performance Tester 是建立在Eclipse framework 基础上的,使用基本Eclipse IDE 去性能测试情景,测试的执行是基于执行Java代码的。当您安装了IBM Rational Performance Tester 6.1后,一个完整的Eclipse 3.0也被安装好了。它同其它可能出现在您的测试机上的Eclipse的安装程序能够愉快的共存。当您第一次启动Performance Tester时,您将看到在一个新的称为 Test 的透视图和几个新视图的一个标准的Eclipse显示,这里最重要的是Test Navigator视图,如图1中所示。


图 1. Performance Tester 启动画面
Performance Tester 启动画面

你的测试的所有部件都包含在性能测试项目的环境中,你能够通过选择File > New > Performance Test Project来创建性能测试项目。这与一个Eclipse 项目不同。如果这些测试组成部件不会不被包含在一个性能测试项目中,它们将无法被识别。

一旦您创建一个性能测试项目,您就需要定义一个性能测试。您可以通过记录与您测试的服务器之间的交互或是创建一个空的测试并通过手工添加测试元素来构建它。如果您有一个有少量相关静态URL或是需要自定义请求码的简单的动态场景,完成后一个将更加有意义。这里,我将详细阐述执行一个记录的过程,这样您可以看清一个完整的测试是什么样子的。

在您创建了一个性能测试项目后,Performance Tester 启动HTTP记录器去记录新的性能测试。您可以接受请求并且立即记录一个性能测试,或是通过选择File > New > Record Performance Test 稍后再执行。

关于浏览器和记录的一个注意

在Microsoft® Windows®的机器上,默认时,Performance Tester 使用Internet Explorer (IE)来作为记录的浏览器。它自动的配置IE的代理设置使得HTTP记录能够正确产生。如果您想要使用Mozilla或是Firefox浏览器,您必须告知Performance Tester 不要使用IE。通过菜单,选择 Windows > Preferences > Test > HTTP Proxy Recorder 并将"Application to record"设置从Internet Explorer 改为None。(在Linux操作系统中,默认为空,因此这一步在该平台上不需要做。)

接下来,您需要手动启动浏览器并且正确设置代理配置,这样它才能通过IBM Rational Agent Controller发送信息。您可以在产品帮助文件中找到关于配置一个基于Mozilla 浏览器的详细说明并为任何浏览器进行改变。一旦浏览器被正确的配置了,您可以从Performance Tester中启动记录。

要记录一个性能测试,只需要在您的初始URL中输入URL并与服务器进行必要的交互来确定您的场景。一旦您完成了这些,关闭您工作的浏览器,这时Performance Tester将知道您已经完成了您的记录,并将创建性能测试。

图2展示了浏览一个运行在 IBM® WebSphere®Portal 5.1上的站点的性能测试的例子:


图2:一个性能测试的例子
一个性能测试的例子

这个测试包含在项目里,正如您在Test Navigator 视图中看到的一样。在性能测试中场景有单独的步骤,您可以在Test Contents 的区域中看到展开的测试元素。每个高级别的步骤都用返回页的名称(IBM WebSphere Portal, IBM WebSphere Portal {1}等等)来标注。如果您展开一个高级别的步骤,您将会看到这个步骤包所含网页的单独的HTTP请求,初始的一个是从客户端流出的URL,其余的是由客户端发起的用来完成建建请求页的图像和JavaScript™程序语言的请求。





回页首


使用数据池

在记录性能测试期间,客户端发起的具体URL和请求参数也同时被记录。但是当您回放性能测试来模拟用户去产生装载时,您可能不希望使用相同的URL和请求参数来回放。例如,您可能需要将每个不同的登陆用户的用户名称和密码插入到系统日志中,或是一些用户特定的参数,例如会议标示服或是产品ID。为了提供这样的值,您可以创建一个被称为数据池的测试元素。

一个数据池是能够代替请求中字符串参数值的一个数值表。表1是数据池的一个例子;它提供了用户名和密码值并命名为"users"。您可以在一个特定的性能测试项目中创建任意多个数据池。然后,将数据池的入口同请求的具体部分结合起来即可。

表1:数据池的一个例子

Username Password
SMYTH11password11
SMYTH12password12
SMYTH13password13
SMYTH14password14
SMYTH15password15

一个数据池的内容可以从文件系统中的CSV格式的文件导入。CSV (comma-separated value)文件可以用标准的文本编辑来创建,或是用大多数电子数据表程序来保存成CSV格式的文件。为了创建一个数据池,右键点击项目并选择 New > Datapool, 为数据池起一个名字,并制定要导入的CSV文件。一个数据池名称加上扩展名.datapool 的文件在项目中被创建了;不再需要原始的CSV文件了。

创建好一个数据池后,您必须在数据池的内容可以被用作替代请求中的文本之前将它和测试联合在一起。操作这步,通过在Test Navigator中双击或在Test Navigator中右键点击并选择 Open来打开您想要使用数据池的测试。在打开测试中,点击 Add按钮并选择 Datapool。在结果对话框中,选择您想要的数据池(扩展名为.datapool 的文件,而不是CSV文件)。

既然您已经将数据池加入到测试中,在测试中您可以从中使用数值来代替记录内容。让我们来看一个例子。图3展示了之前记录的登陆WebSphere Portal 站点的性能测试。在 Request Attributes 窗格中,您可以看到在登录时提交的POST 请求。用户名和密码字符串是参数wps.portlets.useridpassword的值。Performance Tester 指出这些数值是代替数据池数值的很好的候选者,候选者是通过将文本颜色变成绿色来标识的。您从password参数中可以看到;userid参数的字符串被选中,这样您无法看见这里的绿色文本。(事实上,Performance Tester 在许多情况下改变显示文本的颜色作为一个形象的暗示来说明这里有比字符串本身更多的关于具体文本的信息。所有的这些指示器都能够被找到,也能够被编辑,在Eclipse中的Preferences窗口中:Window > Preferences > Test > Performance Test Editor。)


图3。在Request Attributes 中数据池候选者被突出的例子
在Request Attributes 中数据池候选者被突出的例子

当您决定想要替代数据池数值的文本后,选择该文本并右键点击它。(在图3中,是SMYTH1。)在菜单上点击Substitute From > Datapool Variable,您将看到图4中的对话框。选择包含您想要的数值的那一栏,使用username, 点击 Use Column 按钮。


图4. "Select datapool column" 对话框
"Select datapool column" 对话框

为了让登录能够正确地工作,您还需要用数据池的第二栏密码数值来代替 password参数的值。在性能测试中,每次登录请求发起时, usernamepassword的值将被从数据池下一行中获取。





回页首


执行手工数据关联

如果您在运行测试前知道每个请求中需要被替代的数值,您可以使用数据池。但是有时动态信息是由服务器产生的,并插入到请求中的。这可能包含会话标识符,数据库表引用号,以及其他有时加密的包含维持客户和服务器同步多请求事务所必须的状态信息的字符串。

另一个Web构架增长的需求特性是通过包含动态客户端处理去创建一个更丰富、更具响应能力的用户界面,这可能会使用像JavaScript或是Java applet的代码。当这些用户界面加起来使得用户的生活变得更加容易时,它们使得装载和性能测试者的生活更加困难,因为实际请求的URL被传递可能决定于客户端的一些动态操作,如果进行静态的记录,客户端也许无法重复。

如果您够幸运,以前的请求会提供给客户需要建造一个特殊请求的动态信息。接下来的事情就只是识别动态部分和在以前的响应中搜索它们的工作了。这个从以前的响应中获得内容的过程被用在后来的被称为数据关联的请求中。Performance Tester 能够帮助从以前的响应中关联请求数据,并且通过将文本颜色变成紫色来为关联标记候选者。然而,您对您的应用软件比Performance Tester 更为了解,因此您需要验证并可能手工的关联请求的内容。

让我们再来看看我们的性能测试例子。在图5中场景中的第三个步骤被展开以显示在用户登录到portal后发起的第一个请求:


图5。我们性能测试例子中的原始关联的请求
我们性能测试例子中的原始关联的请求

记录的URL如下:

/wps/myportal/!ut/p/kcxml/04_Sj9SPykssy0xPLMnMz0vM0Y_QjzKLN4h3dAPJgFiWrvqRqCbLGpugijnABb31fj_zcVP0A_YLc0NCIckdFAGQEfGM!/
delta/base64xml/L3dJdyEvUUd3QndNQSEvNElVRS82XzBfOUo!

好长呀!您不可能能预见到URL为脚本中的每个用户和每次叠代作出的改变。但是用户需要获得这个信息去与之交流。如何使浏览器得知哪些请求要被发布呢?因此您必须在以前的产生于登录的响应数据中寻找这些信息。

通过下列步骤来执行手动数据关联:

  1. 清除任何Performance Tester执行的自动关联。选择关联(紫色)文本,右键点击它,在显示的菜单上选择 Remove Substitution。这会打破替代文本和它在以前响应中的源文件之间的联系。在我们的例子中,Performance Tester 关联了URL的开始, /wps/myportal/!ut/p/kcxml, 但不是整个的URL, 因此这个字符串的关联必须被打破。
  2. 选择要关联的文本,右键点击它,在显示的菜单中选择 Substitute From > Find More。这将为所选择的文本搜索所有以前的响应,并在右边面板的Classic Search可见视图中产生联系的列表。见图6,IBM WebSphere Portal {2}步骤也被展开以显示匹配内容的合适的源文件,也就是从以前请求中得到的响应。

图6。寻找响应引用字符串
寻找响应引用字符串
  1. 在您认为具有以前适当响应的Classic Search 视图中点击链接(在我们的例子中只有一个链接),测试中登录步骤中合适的响应也将会被打开,同时选中搜索文本。如果这就是内容正确的源,右键点击选择的文本并在显示菜单上选择 Create Reference 。一个引用是某一个被在测试的其他地方重用大的文本片断的唯一标识。引用可以被用来作为在测试场景中条件(if/then)运行的测试参数,也可以被传递给定制的代码。见图7。

图7. 创建一个新的引用
创建一个新的引用
  1. 既然文本的引用已经建立,您需要回到您已经建立的请求中,并在请求中替代新建引用。在测试的第三步中选择URL(您刚搜索的文本),右键点击,并在显示菜单中选择Substitute From 。在结果菜单中您将看到引用列表,其中一个是您刚刚创建的。选择它,文本会变成紫色,显示它现在已经被关联上。见图8。如果您想要寻找用在该文本下的引用,重新选择它并选择 Go To. 将会出现一个菜单选项,显示替代的引用;选择它将会跳回到适当的在我们的场景中第二步中的响应。


图8。 代替请求中的引用
代替请求中的引用

在我们的例子中,对于登录后的请求我们需要的URL是一个标准HTML href 并且能够作为一个完整文本串。但并不总是这样。有时请求必须从许多引用中拼凑,从许多以前的响应中获得。这时您必须对每个文本构架搜索并创建引用,同时在您的请求中的正确的位置替代它们。

并且有时您必须在您替代它之前处理引用数据。引用文本可能拥有特征实体编码,这是在HTML中显示一些特征所必须的(例如,< for <,?> for >,以及 & for &),这些必须被解码才能用在请求中。客户端编码可以使用响应中的信息来创建后面更为复杂的文本替代请求。这种类型的修正需要您在性能测试中增加定制的代码,这些我将在以后的文章中进行解释。





回页首


总结

IBM Rational Performance Tester 6.1能够让您在基于Web的应用程序的性能和负载测试中使用Eclipse构架的全部功能。如同您在本文中读到的,您可以通过使用数据池和数据关联记录与高动态的Web应用程序之间的交互,而不需要直接的编程。如果需要对场景的定制有更多的扩展,您可以在行业标准Java语言中做这些。在将来的文章中我希望解释在已有的用户接口不能满足你的需求时,如何开发Performance Tester 的自定义代码。



参考资料



关于作者

Scott Snyder 是IBM Lotus Performance Team中的一位高级性能分析师。他致力于在WebSphere Application Server、WebSphere Portal Server和IBM Lotus Workplace 应用上的性能度量和分析的工作。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款