利用Web Application Stress Tool(WAS)做性能测试(2)
设置测试脚本
新录制的脚本还不能立即用来测试。还必须完成以下设置:
· 调节脚本项和他们的属性
· 调节测试脚本的测试
· 建立页面组和点击百份比
· 建立用户帐号
· 建立客户端
· 建立性能计数器
调节脚本项
在修改一个测试脚本的脚本项时需要考虑几点,我们将在下面介绍。
去掉不需要的脚本项
去掉冗余项以减少在测试中的噪声因素,或者去掉那些无效的URL。当要调整一项特殊的功能时,去掉所有指向图象,样式表单和其他辅助静态文件的脚本项。
为脚本项指定思考时间
脚本项表单的最后一项叫做“延迟”。这项允许你在执行脚本项之前指定特定的延迟时间(也叫思考时间)。
对于性能测试来说,如何定义思考时间并没有一个单独的标准。有些人使用零思考时间,有些人考虑使用30秒为思考时间。
主要取决于站点的内容和测试的目的。例如,有长页面内容的站点需要比简单页面的站点使用长一点的时间,因为用户需要使用多点的时间来读页面内容。
另外,如果你的目的是快速地决定一个只有少量客户端的Web服务器的吞吐量,你可以考虑零思考时间。没有思考时间的话,WAS的每个线程以最快速度对Web服务器施加压力。
为脚本项设置一系列的值
WAS允许你为一个脚本项的一对名字-值赋值,而不是对每一个请求都使用相同的值。这个特性对于模拟真实情形很重要,没有用户会不停的以相同的数据值请求同一页面吧?
例如,其中一项测试脚本是请求一个ASP页面展示一个产品的详细信息。我们可以设置WAS随机地从一列预先定义的产品ID选取不同的值,而不是每次都用相同的产品ID请求ASP页面。
为脚本项建立一列值
1. 在WAS窗口的脚本项,双击脚本项最前面的方型按钮(在表单的第一列)打开这项的详细菜单。
2. 在Querystring标签里(也叫Querystring Editor,如Figure 3所示),选定Format data to CGI standard。相应的名字-值对会出现在check box下的表单里。
Figure 3. Querystring Editor screen
3. 点选定的名字-值对的值,一个新的按钮会出现
4. 点这个按钮打开Field Values对话框
5. 在Field values对话框输入一串值,每一行一个值。你也可以通过剪切,粘贴一个电子表格的数据文件来输入。
6. 在Querystring Editor里,在表单中点有相同名字-值对的Distribution一列。在下拉菜单选择Random。
为脚本项设置SSL
为特定的脚本项激活SSL,需要作以下操作:
1. 在WAS窗口的脚本项,双击脚本项最前面的方型按钮(在表单的第一列)打开这项的详细菜单。
2. 在 SSL标签里,选Use SSL. (注意在你激活SSL时确保端口值应该在80到 443之间)。
调整脚本设置
为了您能满意地运行你的性能测试,你需要修改你的测试脚本的设置。通过双击左边的脚本名展开脚本的信息,你会找到一个Settings标签,在这里你可以为你的测试脚本指定很多设置。点击它将在右边窗口打开Settings视图,如Figure 4所示。
Figure 4. Settings view screen
指定目标Web服务器
默认地,目标服务器是“localhost”,应该替换为IP地址或目标服务器的域名。
改变设置
1. 在左边的窗口点测试脚本的名字
2. 在右边窗口顶部的Server输入目标服务器的IP地址或域名
注意 如果你想对有Network Load Balancing(网络负载均衡)的服务器群组进行测试,就像Duwamish Online一样,则需要输入IP地址群。
设置并发连接数
在设置里的Concurrent Connections部分,你可以指定Stress level (threads)的值和Stress multiplier (sockets per thread)来控制对目标服务器的压力/负载程度。Stress level是全部客户端所产生的Windows NT线程的总数。每个线程能产生多个socket而每个socket就是一个并发的请求。
以下公式解释了他们之间的关系:
Total Concurrent Requests = Stress level (threads) x Stress multiplier
(sockets per thread) = Total Number Sockets
在我们的实验室,我们使用不同的Stress层次来 性能测试。例如,我们使用过100, 200, 300, 400, 500, 750, 1000, 1500,和2000的值来连续测试以研究我们的服务器群组是如何对连续增长的负载作出反应的。
你应该在初步测试的结果基础上调整这些数值。通常来说,你需要在低负载度时收集更多的数据点,因为这时候系统的吞吐量会随线程的增长而线性增长。另一方面,你可以在高负载度时运行较少的测试以节省时间和精力,尤其是系统吞吐量已经高于峰值时。
注意我们的第一次测试将设定在1000个线程。目的是运行足够的请求以建立我们程序的数据缓冲。因为程序的性能会因为有没有缓冲而表现大不相同,这将帮助我们为负载测试保持一个一致的环境。
设定测试运行时间
在设置视图的Test Run Time部分,你可以以日,小时,分钟,秒来设定总的运行时间。取决于你的脚本项的预期反应时间,建议你运行测试脚本至少若干分钟以便产生足够的请求,避免变形的测试结果。你的程序的反应时间越高,测试进行的时间就应该越长,以便产生大量的数据。
你可以运行短而密集的测试以便监测你的站点的任何问题。另外,你需要运行更长的测试时间(例如,30天),看看你的站点的性能是否随时间而退化,尤其是在中级或高级的负载压力下。
在Duwamish Online这个站点,大多数的性能测试都运行7到10分钟,以便有足够时间来稳定测试结果。
设置随机延迟时间
在设置视图的Request Delay部分,你可以在执行测试前为每个脚本项选择加入随机延迟时间(或思考时间)。如果Use random delay选项框被选中,每个WAS线程会空转一段随机的时间(在最大值和最小值之间)加上为每个脚本项指定的固定的思考时间。
下面的公式解释了延迟时间的计算方法:
每项的延迟时间=随机延迟时间+每项的固定延迟时间
随机延迟时间的特性在固定延迟时间被指定给脚本项时尤为重要。如果没有使用随机延迟时间,所有的线程会在几乎相同的时间发送请求到Web服务器,然后等待几乎相同的固定延迟时间然后发送下一个请求。随机延迟时间在向Web服务器施加负载时有助于压平峰值和谷值,因此为所需的负载水平呈现一个更为精确的环境。
设定挂起时间
在设置视图的Suspend部分,你可以以日,小时,分钟,秒来设定warmup 和cooldown时间。Warmup时间就是初始化测试运行时间,在这段时间里不会收集和计算性能数据。类似地,cooldown时间就是指定结束阶段的测试时间,也不收集数据。Warmup 和 cooldown被用于最小化测试结果的失真。
通常,在一个新测试运行的初始化阶段,很多系统资源是被特定的活动所消耗,像组件或应用程序的缓冲初始化。Warmup时间有助于在任何测试数据被收集之前稳定系统的环境。
另一方面,cooldown时间有助于在测试运行的结束阶段避免数据的变形,这时额外的系统资源被用于停止测试和开始从客户端收集数据。另外,socket连接可能会过早地停止,造成大量的socket错误。
在Duwamish Online,我们使用30 到 60秒作为大多数性能测试的warmup 和 cooldown时间
指定带宽瓶颈
在设置视图里的Bandwidth部分,WAS允许你模拟从14.4 Kbps的modem连接到T1 (1.5 Mbps)的Local Area Network (LAN)连接的网络带宽。这个特性的最大好处是可以支撑大量的并发连接到目标服务器。这是大多数Web站点(用户使用低速modem连接)所体验的情形。
激活带宽瓶颈
1. 在设置视图里的Bandwidth部分,选择Throttle bandwidth选项框。
2. 在下拉菜单,选择一个代表大多数用户的连接吞吐量的带宽。
在Duwamish Online里,我们试过不同的带宽瓶颈的设置。初始化时。我们把用户连接设在56 Kbps,想明白我们的程序在大多数Web站点的情况下是如何表现的。我们也试过把用户连接设在ISDN Dual Channel (128 Kbps)以模拟未来宽带趋势下,我们的大多数用户通过快速的连接访问我们的站点。最后,我们以没有带宽瓶颈的情形测试我们的站点。有趣的是,我们发现这种设置产生的负载条件与用128 Kbps连接的一样。
不管你如何设置带宽瓶颈,务必要在你想比较测试结果的所有测试中保持一致性。
指定其他设置
在设置视图的其他部分,我们保持默认值,除HTTP重定向外。我们故意去掉Follow HTTP redirects选项。这在创建脚本过程中你录制脚本时已经录制了URL的重定向的时候是必须的。你不需要重复两次地运行那些URL。
设置页面组
在WAS里,你可以把一系列的脚本项组织成所谓的页面组。这个特性允许你把所有的页面元素(包括HTML文件,图象文件,样式表单等)或多个相连的页面组织成一个逻辑单元。你可以为每个页面组指定不同的点击率,那样就能控制哪个页面或相连的页面会访问更多或更少。如果你有你的网站的使用方法—像目录浏览或购物车—页面组允许你以你希望你的站点会获得的点击率来运行。
建立页面组
1. 展开左边窗口的脚本的信息
2. 点Page Groups节点在右边窗口打开相应的视图
你会看到默认的以100%分布率的页面组已经创建好了。所有的脚本项默认都初始化为这个组。
3. 在组表单的空白行,在Group列输入新的组名(像"Home"作为主页),在Distribution列输入数值。分布率会被用于计算这个页面组的点击率,见Percent列。重复这个步骤添加更多的页面组。
4. 点左边窗口的脚本名回到该脚本项的视图
5. 在脚本项表单的Group列,从下拉菜单选择其中一个页面组。为每个脚本项重复这个步骤。所有关联的页面都应该选同样的页面组。
Figure 5. Example of page groups definition
6. 点左边窗口的脚本名回到该脚本项的视图
7. 在脚本项的表单的Group一列,从下拉菜单选则其中一个页面组,见Figure 6。
Figure 6. Script Items view screen showing group selection
8. 重复6到7为每一个脚本项选择一个页面组。所有相关项(像ASP 页面,样式表单和图象文件)应该选择相同的页面组。
另一种创建和指定页面组的方法是在录制脚本时指定页面组。要使用这种方法,在浏览器跳到新的页面之前返回到WAS窗口(见Figure 2)。点Change Group按钮然后在New Group对话框输入组名。以后录制的脚本项都会被指定到这个新的组。
指定用户
测试需要署名登录的Web站点时,WAS提供一个特性叫做Users,可用于存储多个用户的用户名,密码和cookie信息。
当一个测试开始时,所有的用户被分配到给定压力系数设置的各线程中。当请求开始时,每个线程使用从与该线程连接的共享池中获得的用户名,密码,和cookie。如果WAS配置的用户数比线程少,一些线程就会没有用户—所有的署名登录页面会登录取失败,任何与cookies的交互会被禁止。所以,当测试需要个人认证的网站时,拥有的用户数比线程多是很重要的。
对于可以在WAS中创建的用户数没有硬性的规定和限制。然而,因为每个用户都会需要一定的内存和资源,所以如果使用大量的用户,将会使你的测试启动和停止时间更长些。
创建新用户
1. 在左边窗口展开脚本的信息
2. 点Users节点在右边窗口打开相应的视图
3. 双击Default用户组打开用户视图。
注意默认已经创建了200个用户。你可以简单地修改用户名和密码就行了。
你也可以做以下操作来创建一系列新的用户
1. 点Remove All清除所有的记录
2. 在Number of new users,输入你想创建的新用户的数量
3. 在User name prefix,你可以在用户编号的前面输入前缀值,例如“User.”
4. 在Password,输入密码。相同的密码会赋给所有用户。
5. 最后,点Create按钮。用户表单就会填满指定数量的用户
如果你想使用定制的用户名和密码列表,你可以从一个预定格式的文本文件导入它们。参考WAS帮助文件的“Importing user names and passwords”部分。