第二部分
软件测试基本工具篇
第7章 页面层--Microsoft Application
Center Test压力测试工具介绍
对Web应用程序进行压力测试是为了确定程序在执行中的负载瓶颈,减少和排除这些瓶颈能使程序达到和超越预期的流量。在确定瓶颈后,我们才能调整Web应用程序和服务器,使终端用户的响应时间达到最少从而获得好的应用效果。压力测试包括测试应用程序在负载的情况下的最高吞吐量,吞吐量和固定时间内处理客户端请求数量有关,压力测试一般也包括加载测试,执行测试,soak测试,峰值测试和Web服务器测试。特别要注意的的是执行请求根据应用程序不同而有所区别。
Web应用程序模拟负载用户,依靠程序处理事务的硬件和软件设施。基于硬件的测试方法需要很多专门的客户端,而且一个客户端作为一个用户,这种方法需要花费相当多的费用和时间,是既没有效果也没有效率的压力测试方法。但面对一个应用程序,基于硬件的压力测试方法可能是唯一的选择。基于软件的方法是用户处理事务被软件工具有代表性的记录和捕获,并在应用程序预排过程中修改。当执行测试时,一台计机器作为控制器有代表性地分配测试命令给大量客户端机器。测试执行过程中,控制器产生负载用于模拟多个虚拟用户。当测试结束时控制器从多个客户端总结测试数据,这些虚拟用户对服务器产生荷载,并测定Web应用的稳定性和响应速度。 基于软件的测试工具有很多,这些工具都是依靠多个虚拟用户产生负载,而各个工具产生负载所用的语法和加载器各不相同。本书讨论的压力测试工具是Microsoft Application Center Test (ACT),本章的目标不是要使你成为使用ACT的专家,只是提供该工具的概要,讨论其核心部分和经常要使用的部分,我们将举例和说明怎样创建和检验使用ACT模拟一个.Net的Web应用程序负载的动态测试脚本。
7.1 什么是ACT?
ACT是一个基于软件的压力测试工具,它给Web服务器提供负载,使用户能捕获执行规格,分析和判断执行中的问题,并提供Web应用程序的测试报告。用户依靠ACT向Web应用程序提供负载,记录和手动创建一个测试脚本,模拟同时间有多个用户提出连接请求。
ACT是包含在Visual Studio .NET Enterprise版和Enterprise版中,很多不同的部分组成了Visual Studio .NET,对于本书,我们将作为独立的客户选择必需的部分来使用ACT。
安装过程被分成3个主要步骤,第一步入图7-1。
选择第一步,安装Windows Component Update将更新部分系统,当你的系统需要更新时,这个选项在安装对话框中是可以使用的,否则是不能使用的。
提示: 如果在安装过程中开着防病毒软件,可能会提示安装正在执行存取文件系统对象的警告! 92
图7-1 Windows Component Update安装对话框
系统更行之后,安装对话框的第二步就可以使用,安装Visual Studio .NET,选择第二步安装。我们安装的内容很少,我们只安装运行ACT需要的部分。如果你想自定义安装,你可以从Visual Studio IDE中选择其他部分安装,Application Center Test在Enterprise Development Tools安装列表下,如图7-2所示。
7. 2 ACT的主要概念
这一部分的目的是要向读者详细解释ACT的主要概念并提供一些技巧,分享已有的经验。
1. 动态测试
动态测试是ACT非常强大的一个功能,让用户有能力记录或自己创建同时连接到Web服务器的HTTP请求列表。同时,你也可以修改请求标题作为提交者,用户代理和询问字符串。动态测试脚本可以用Visual Basic Script (VBScript), Jscript, PERL或其他可用COM脚本的语言编写,ACT只支持用VBScript记录测试脚本。
2. 并发用户和ACT并发浏览器连接 到Web应用程序的并发连接,将产生一个单一的请求或者一系列包含在ACT测试脚本的请求,这些是有规则的并发浏览器连接(SCBs,Simultancous Browser Connections)。其他工具使用诸如“压力线程”,“虚拟用户”这些术语,这些和ACT SBC(负载等级)同义。我们会经常问到“SBCs是如何和并发用户联系的?”,并发用户和SBC是难于相容的,因为
93
我们通常不知道用户连接到Web应用程序的页面请求速度。没有延迟时间(用户认为的预处理时间)的测试脚本播放时会比用户在浏览器上手动操作应用程序产生更快的处理速度和更大的Web服务器负载。因此,你可能需要包含延迟时间在你的脚本中来降低请求到达Web服务器的速度,使你更容易使SBCs和一个用户连接关联,并更好的模拟现实Web网络流量速度。
图7-2 选择安装选项
程序的页面请求速度。没有延迟时间(用户认为的预处理时间)的测试脚本播放时会比用户在浏览器上手动操作应用程序产生更快的处理速度和更大的Web服务器负载。因此,你可能需要包含延迟时间在你的脚本中来降低请求到达Web服务器的速度,使你更容易使SBCs和一个用户连接关联,并更好的模拟现实Web网络流量速度。
3. 用户延迟时间 在创建测试脚本时,有插入延迟时间的选项,这延迟时间将模拟现实用户使用应用程序时的使用时间。例如,插入一个5秒的延迟时间在脚本中,这个将模拟一个用户填写一个在线表格,你要重视用户填写表格的思考时间来模拟用户的典型动作。在ACT中,延迟是测试对象的方法之一,当一个ACT测试脚本被记录后,随后的代码才会插入:
fEnableDelays=False
If fEnableDelays =True then Test.Sleep(0)
在默认情况下,测试脚本顶端的fEnableDelays值被设置为false。如果要使用5秒或5000
94
毫秒的延迟,你需要修改下面的ACT测试代码:
fEnableDelays = True
If fEnableDelays = True then Test.Sleep (5000)
下面的代码段能产生随机延迟时间,可以在每2个请求间使用:
Function RandomSleep()
Dim lMinSleep, lMaxSleep, lSleep lMaxSleep = 5000 ' 5 seconds lMinSleep = 1000 ' 1 second
' create a random int within our range Call Randomize()
lSleep = Int((lMaxSleep - lMinSleep + 1) * Rnd(1) + lMinSleep) Call Test.Sleep(lSleep) ' return the delay time RandomSleep = lSleep End Function
使用延迟时间的一个缺点就是它们会减少一个客户所能提供的负载总量,这样会导致你无法确定最大的并发使用量,而且,如果没有足够的客户容量,你将很难完成检测运行瓶颈的任务,因为瓶颈往往出现在系统有最大负载的时候。一个没有延迟时间的测试脚本,模拟的是用户有一个立即服从用户的自填写表格在处理事务。正确利用延迟时间模拟产品的流量,能使你更正地估计并发使用量,在使用随机延迟时间时,要考虑一个SBC是否和现实情况等同。
4. 用户和组
默认的用户组中的用户都是通过提供唯一的用户名和密码动态登陆并在ACT中动态存在。每个用户和SBC间时一对一的关系,例如,当你设置SBC等级为25时,你将需要最少25个用户进行测试。如果你的Web应用程序匿名认证,在默认情况下使ACT自动产生用户请求。如果你的Web应用程序要求基本高级语言(BASIC)或者 Windows NT本地网络管理(Windows NT LAN Manager)认证时,你必须先确定用户名和密码。ACT可以既不通过用户接口手动产生用户数据也从单独文件输入数据来定制用户。在执行测试时,每个SBC都将有唯一的用户名和密码。通过使用ACT测试对象,这些数据将曝露在你的脚本中。下面例子是Test.GetCurrentUser的代码,可以用来找回用户名和密码:
Dim oUser, sUserName, sPassword Set oUser = Test.GetCurrentUser sUserName = oUser.Name sPassword = oUser.Password
5. Cookies
对于多数Web应用程序,允许ACT控制你的HTTP Cookies是操作Cookies的最佳的方法,无论如何,在测试开始时被安装,然后自动加载到ACT上。对于包含一个名字为
95