软件测试Part7

更新时间:2024-05-10 02:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第二部分

软件测试基本工具篇

第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

“Cookies“的HTTP标题,ACT将再Web服务器作出准确的响应,当一个测试被记录时,它将被加上默认注释。脚本的下一行代码将引导值为(Automatic)的相同请求,再更多细节上ACT利用语法读取文件并修改cookies信息。

6. 标题

标题是自动加载的,但是它们也可以通过改变你的测试脚本来修改信息成为提交者,用户代理,主机,HTTP版本和其他标题允许的信息。

提示: 如果你创建一个只包含下面语句的测试脚本: “Test.SendRequest(“http://localhost/samples/browser.asp”)” ACT将添加一个默认标题\Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\给用户代理。 例如,如果应用程序包含依赖区别于Web浏览器的用户代理,你可以修改一个请求的HTTP标题,从而动态改变通过一个混合的用户代理。

Dim sUserAgent, sArray(3), sSeed

sArray(1) = \Windows NT 5.1)\sArray(2) = \

sArray(3) = \Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0\Randomize()

sSeed = Int((3 * Rnd ) + 1) sUserAgent = sArray(mySeed)

7. 认证和加密

在测试执行中ACT可以支持应用程序使用很多通用的认证模式和加密方法,包括Windows NT LAN Manager (NTLM)认证,Windows 综合认证,Basic认证,匿名存取,分类认证和护照认证。然而,ACT记录器并不记录所有的认证信息认证技术,有专门用于整合和口令验证的工作区这些在它们的介绍部分有说明,下面的表格列出了ACT记录器和ACT执行时提供的认证方法:

表7-1 支持的认证方法

Authentication Method

Test Recorder Test Execution

YES YES YES YES YES

Anonymous Authentication YES Basic

Integrated Windows Passport Digest

YES NO NO YES

8. Windows 综合认证

ACT支持回放Windows综合认证,尽管不能记录包含有IIS配置的综合认证选项的应用程序,但一些Web应用程序可能仍然有IIS功能去接受匿名认证或Basic认证,对于这些引用程序,你可以用下面的工作区去记录ACT的测试脚本:

96

1.授权Basic认证和Windows综合认证,当其他用户自动使用Windows综合认证浏览Web应用程序时ACT能够记录起来。

2.记录ACT测试脚本,你将被要求给你的Web应用填写适当的领域\\用户名和密码。 3.改变Web应用的配置支持Windows综合认证。 4.用下面一行注释每个请求来修改ACT测试脚本:

oHeaders.Add \

5.用适当的领域\\用户名和密码建立你想要模拟的ACT用户。 6.执行ACT测试脚本。

9.Basic和分类认证

ACT能够记录和执行使用Basic和分类认证的应用程序创建的测试脚本,ACT能够自动包含下面的代码到你的脚本中来使用Basic和分类认证:

Basic and Digest Authentication.cs 'Basic Authentication Code

oHeaders.Add \'Digest Authentication Code

oHeaders.Add \ chr(34)+\ chr(34)+\ \ nc=00000001, cnonce=\ +chr(34)+\

10.匿名认证

匿名认证是Web应用程序最常见的认证方法,ACT完全自动的支持匿名认证去记录和执行测试脚本。

11.护照认证

Microsoft.Net Passport是一套基于Web的服务,它通过提供用户单一的标记和快速的购物能力使得使用因特网网上购物更加容易和快捷。单一得用户名或标记服务原来是计划提供一套集中的安全快捷的服务,使终端用户能够全部办理。由于Web应用程序使用SSL护照,当使用这种认证配置时ACT记录器不能记录。你必须手动建立ACT测试脚本的注册部分或者在测试阶段移除护照。还有应用程序可能有多种方式执行,所以测试脚本根据应用程序的不同而不同。当一个新的护照结构被办理,你可能因此需要修改你的测试脚本。在随书的CD里我们提供一个用ACT写的护照认证测试脚本的例子。

12.Secure Sockets Layer (SSL)

ACT完全支持执行使用了40位或128位SSL加密的测试脚本,尽管如此,还是不能支持记录一个为使用了SSL的Web应用程序写的测试脚本,因为ACT通过代理记录,数据到达代理时已经加密了。在记录阶段,工作区是不支持SSL的。修改测试脚本中Test.CreateConnection方法,用443端口代理80端口就能够使Web服务器支持SSL。下面的代码是Test.CreateConnection方法使用80端口和443端口的语句的例子。

97

Syntax oConnect = Test.CreateConnection(strServer, lPort, bUseSSL)

Without SSL oConnect = Test.CreateConnection(\With SSL

oConnect = Test.CreateConnection(\

如果还不可能使你的Web应用程序消除SSL,你可以用上面的语句手动把证书提交到加密页面地址。

13.ACT中使用SOAP协议

SOAP是用来在分布式体系结构中分享信息的基于XML的协议,要获取更多关于SOAP的信息可以访问http://msdn.microsoft.com/vstudio/。ACT本身不支持SQAP请求,但包含了封装的SOAP的工作区是可用的。下面的代码是这个方法的一个例子:

SOAP Workaround Code Sample

set con = Test.CreateConnection(YourServerName, 80, false) set req = Test.CreateRequest set headers = req.Headers req.Path = \req.Verb = \

req.HTTPVersion = \headers.RemoveAll

headers.Add \headers.Add \Action\

\headers.Add \headers.Add \

body = \ & chr(QUOTE) & \

body = body & \

\

xmlns:xsd=\ xmlns:soap=\ &chr(QUOTE)&\

body = body & \

body = body & \ &chr(QUOTE)&\

body = body & \body = body & \body = body & \body = body & \

body = body & \ chr(QUOTE)&\

body = body & \body = body & \act\

body = body & \act123\98

body = body & \body = body & \body = body & \req.Body = body

set res = con.Send(req)

14.分解ACT中的视图

视图是ASP.Net中通过在页面中使用隐藏窗口的原理用来维持状态的一部分,ACT本身并不支持ASP.NET视图,尽管如此,下面的例子是一个通过分解和手动编码视图的工作区:

Do Viewstate.cs 'Do VIEWSTATE parsing

If InStr(oResponse.Body, \

Pos1 = InStr(InStr(oResponse.Body, \ oResponse.Body, \

Pos2 = InStr(Pos1, oResponse.Body, \

res = Mid(oResponse.Body, Pos1 + 7, Pos2 - Pos1 - 8) viewst = res End If

' Manually encode viewstates:

' Replace all occurrences of \ viewst = Replace(viewst, \' Replace all occurrences of \ viewst = Replace(viewst, \

通过设置下面的属性能够消除手工编码视图(或者常规的邮件数据):

oRequest.EncodeBody = True

15.从疏忽的压力测试中保护你的网站

ACT支持机器人执行开发者使用自动代理(\的标准方法,网站管理者可以决定特定的用户代理以及Web应用程序达到的区域。为防止ACT发送请求到Web服务器,你能够在服务器根目录下创建或编辑一个名字为\的文件,并把下面的代码添加到文件中:

# Stress Agent is the user-agent string ACT sends when identifying itself

User-agent: Stress-Agent

# / excludes ACT from all parts of the Web site Disallow: /

当一个有robots.txt文件保护的网站在执行测试时,ACT可能出现在运行但不产生请求的状况。可是,状态提示框将提示\拒绝访问Web服务器。\

提示: 有检测这个执行协议的阶段能防止测试的运行,就像测试护照。所以,ACT允许在方案属性对话框中禁止检测(右键点击方案名并选择属性)。

99

7.3 运行ACT

本节开始熟悉ACT的压力测试工具,简要介绍如何在用户界面上创建一个测试脚本。本节提供了许多用于记录测试脚本的例子,包括使用ACT的准备和创建直接对SQL等级荷载的测试。最后,这部分还包含用ACT运行测试脚本的指导方针,还有其他目标就是讨论创建理想的脚本数,使用适当的客户数目,还有能产生的最理想压力总量(用SBC衡量)

1. 用户接口的概述

ACT的用户接口是很直观的,在打开ACT后,你将看到如图7-3的界面。

图7-3 ACT的开始界面

窗口被分成左右2部分,左边的方框是导航目录,右边显示的是详细资料。在左边的方框中,树目录显示一个名字为ACTSamples的根节点表示一个ACT工程。同时只能打开一个ACT工程,在默认情况下,工程时被存储在C:\\Documents and Settings\\\\My Documents\\ACT Projects的相同工程目录下,扩展名为.act的文件在这个目录下并包含指向该测试和报告工程中所有子项的指示器。

提示: 如果你使用共享部分去保存文档,ACT用户帐号必须能够读写该部分,否则,ACT将步允许运行测试,状态框将提示“ACT用户不能使用该目录”。 在下来的等级里,有3个节点在下面被叙述,分别是测试,结果和用户。

100

2. 测试

这个节点列举了用户创建的所有测试脚本,选择下面节点的一个测试脚本使得它得代码在右边得方框中显示,以便可以修改脚本。每个测试脚本都有多个属性,诸如控制测试脚本运行得持续时间,要知道一个测试的属性,你只需右键点击一个测试并选择属性项,就有一个如图3-4的属性页面出现:

图7-4 测试的属性界面

你可以通过右键点击Tests这个节点并选择下拉菜单里的新测试项来创建一个新的测试脚本,你也可以通过一个测试的下拉菜单来开始和结束一个测试,一个ACT客户只在任何给予的时间内只能运行一个测试。

3. 结果

这个节点将每个测试的每个阶段的情况显示在右边的方框中,点击【Results】节点的结果如图3-5所示。

101

图7-5 显示测试结果

右边的方框被分成3个区域,顶部部分的左边区域列举了先前运行过的测试,在每个测试下,按时间顺序列举的是每次运行后的结果。要看测试的结果,你只需简单地选择一个测试去运行,在报告的下拉列表中选择报告类型,并从列表中选择种类,所有报告的详细资料将被列举在右边的方框的中间区域里。

ACT提供不同种类的报告,有概述,图表和请求,在报告中你可以看到的信息有,每秒请求数(RPS,Requests per Second),字节持续的时间(TTLB,Time to Last Byte)),页面统计表的详细信息和执行计数器,这些信息都用XML文档保存为系统文件,参考ACT帮助文件以获得更多详细信息。

4. 用户

这个节点列举了测试可以访问的用户组,点击一个用户组,在右边的方框中显示在该组中的用户,可以在右边的方框中选择一个空白行来添加输入用户名和相应的密码,这些值也可以通过选择并按删除键来删除。其他ACT支持的有用功能是从文本文件输入用户名/密码,可以选择一个用户组,然后用手工方式添加用户。

ACT开始每个浏览器连接需要一个用户名和密码来登陆Web应用程序,如果Web应用程序正在访问Basic或NTLM认证的请求,这里用户或用户名就可以被创建。

提示: 为了容易管理不同测试的运行,你可以创建一个用户组再在用户组中创建必需的用户数。用户组中的用户数必须大于或等于SBCs的数目。作为选择,如果Web应用程序被设置为匿名登陆,你可以通过属性页面(用户表)让ACT自动产生用户。 102

5. 创建测试脚本

为了证明ACT是一个压力测试工具,我们创建了一些测试脚本例子,演示浏览IBuySpy网站。IBuySpy是一个在线存储应用程序,用来说明.NET平台和技术。本章及后面的章节使用的都是IbuySpy这个.NET应用程序,在http://www.ibuyspystore.com/上有这个应用程序的副本可以看,你也可以从http://www.ibuyspy.com/downloads.htm下载和安装这个应用程序。

为了更好管理测试脚本,我们建议你为每个测试创建一个新的工程。通过给每个工程独立的目录,在测试周期结束后你可以保存整个目录,知道所有测试脚本和数据已经被保存。选择文件菜单里的新工程可以创建一个工程,在新工程对话框中写入工程名,这里我们使用工程名为IBuySpy并把所在目录设置在C:\\Project\\下,使得C:\\Project\\目录下创建一个名字为IBuySpy得空文件夹,当你保存了工程时,将有一个名字为IBuySpy.act得文件和其他一些工程文件保存到这个文件夹中。ACT将为每次运行测试创建一个包含测试属性,工程属性,用户组和客户组的XML格式的报告文件。

6. 记录测试脚本

一个简单创建测试脚本的方法是通过记录用户预编动作,右键点击节点Tests并从下拉菜单中选择新测试项来弹出新测试向导从而开始记录,点击下一步然后从向导中选择记录新测试,继续点击下一步,然后点击【Start Recording】按钮,默认浏览器将运行而你将逐步执行下面查找用户的部分。

1.浏览http:///

2.在Web页面顶部右边的搜索文本框中键入搜索内容 3.点击执行搜索

完成这一步之后,点击【Stop Recording】钮,所有在会话期间捕捉到的请求都被列举在列表框中,但是不能被修改。点击下一步并为这个脚本指定一个名称,再点击一次下一步,然后点击完成,这个最新的记录的测试将出现在左边方框的控制树上。

下面引用了一个演示搜索IBuySpy的脚本:

Search.vbs Option Explicit Dim fEnableDelays fEnableDelays = False

Sub SendRequest1()

Dim oConnection, oRequest, oResponse, oHeaders, strStatusCode If fEnableDelays = True then Test.Sleep (0)

Set oConnection = Test.CreateConnection(\ If (oConnection is Nothing) Then

Test.Trace \ Else

Set oRequest = Test.CreateRequest oRequest.Path = \ oRequest.Verb = \

oRequest.HTTPVersion = \

103

set oHeaders = oRequest.Headers oHeaders.RemoveAll

oHeaders.Add \ image/pjpeg, application/vnd.ms-excel,_

application/vnd.ms-powerpoint, application/msword, */*\ oHeaders.Add \

oHeaders.Add \ Windows NT 5.1)\

'oHeaders.Add \ oHeaders.Add \ oHeaders.Add \ Set oResponse = oConnection.Send(oRequest) If (oResponse is Nothing) Then

Test.Trace \ \ Else

strStatusCode = oResponse.ResultCode End If

oConnection.Close End If End Sub

Sub SendRequest2()

Dim oConnection, oRequest, oResponse, oHeaders, strStatusCode If fEnableDelays = True then Test.Sleep (130)

Set oConnection = Test.CreateConnection(\ If (oConnection is Nothing) Then

Test.Trace \ Else

Set oRequest = Test.CreateRequest oRequest.Path = \ oRequest.Verb = \

oRequest.HTTPVersion = \ set oHeaders = oRequest.Headers oHeaders.RemoveAll

oHeaders.Add \

oHeaders.Add \ oHeaders.Add \

oHeaders.Add \ Windows NT 5.1)\

'oHeaders.Add \ oHeaders.Add \ oHeaders.Add \ Set oResponse = oConnection.Send(oRequest)

104

If (oResponse is Nothing) Then

Test.Trace \ \ Else

strStatusCode = oResponse.ResultCode End If

oConnection.Close End If End Sub

Sub SendRequest3()

Dim oConnection, oRequest, oResponse, oHeaders, strStatusCode If fEnableDelays = True then Test.Sleep (20)

Set oConnection = Test.CreateConnection(\ If (oConnection is Nothing) Then

Test.Trace \ Else

Set oRequest = Test.CreateRequest

oRequest.Path = \ oRequest.Verb = \

oRequest.HTTPVersion = \ set oHeaders = oRequest.Headers oHeaders.RemoveAll

oHeaders.Add \

oHeaders.Add \ oHeaders.Add \

oHeaders.Add \ Windows NT 5.1)\

'oHeaders.Add \ oHeaders.Add \ oHeaders.Add \ Set oResponse = oConnection.Send(oRequest) If (oResponse is Nothing) Then

Test.Trace \ \ Else

strStatusCode = oResponse.ResultCode End If

oConnection.Close End If End Sub ?

Sub SendRequest17()

Dim oConnection, oRequest, oResponse, oHeaders, strStatusCode

105

If fEnableDelays = True then Test.Sleep (6910)

Set oConnection = Test.CreateConnection(\ If (oConnection is Nothing) Then

Test.Trace \ Else

Set oRequest = Test.CreateRequest

oRequest.Path = \ oRequest.Verb = \

oRequest.HTTPVersion = \ oRequest.EncodeBody = False set oHeaders = oRequest.Headers oHeaders.RemoveAll

oHeaders.Add \ image/jpeg, image/pjpeg, application/vnd.ms-excel,_ application/vnd.ms-powerpoint, application/msword, */*\

oHeaders.Add \ oHeaders.Add \

oHeaders.Add \ oHeaders.Add \

\Windows NT 5.1)\ 'oHeaders.Add \ oHeaders.Add \ oHeaders.Add \ oHeaders.Add \

oHeaders.Add \

oRequest.Body = \ Set oResponse = oConnection.Send(oRequest) If (oResponse is Nothing) Then

Test.Trace \ \ Else

strStatusCode = oResponse.ResultCode End If

oConnection.Close End If End Sub

Sub Main()

call SendRequest1() call SendRequest2() call SendRequest3()

call SendRequest17()

106

End Sub Main

7. 分析已记录的测试脚本

你能看到每个请求都被装到一个标记为SendRequest#()的子程序,其中#是一个有序的队列,所有这些子程序的调用都被装入一个Main()的子程序。测试脚本的开始点是在其顶部变量被声明和定义的地方,在这里,执行跳到最后一行调用Main()的地方,在Main()程序里,每个请求都被调用直到脚本结束。后面的请求重复上面所描叙的步骤。

这些代码利用ACT对象更容易的连接到一个Web服务器并发送请求,这些对象都是有大家知道的测试对象模式,在这些对象模式的根部的是测试对象。这个详细的测试脚本使用测试,标头,和请求对象。ACT也支持能用来运行测试程序的应用模式。关于这2中对象模式的详细信息可以在ACT的帮助文件中找到。

我们已记录的测试脚本说明了如何发送GET(SendRequest1子程序和POST(SendRequest17子程序),而且你也知道如何指定请求标头。例如,要在脚本播放时自动获得ACT的cookies句柄,你可以把下面的代码插入添加到先前已记录的测试脚本中:

oHeaders.Add \

要像POST请求的情形一样发送请求的内容,ACT将使用下面一行插入到以记录的测试脚本中的代码自动确定内容的长度:

oHeaders.Add \

通过检查查找用的测试脚本和ACTSamples工程包含的测试脚本,作为Visual Studio .Net的一部分,你能熟悉你可以有效用来创建和修改测试对象的模式。

8. 手动创建测试脚本

新测试向导的第二步允许创建一个空的测试,向导能预先产生下面所示的一行代码:

Test.SendRequest(\

上面一行中的执行任务可以被修改为连接IBuySpy应用程序的默认页面,下面举例:

Test.SendRequest(\

IBuySp应用程序默认页面的左边包含每种产品的链接,把鼠标移到产品链接的上面将在状态栏显示URL。通过添加更多的行代码到测试脚本中,和一个用户访问默认页面一样,可以创建一个模拟浏览产品种类的测试脚本。可以添加其他逻辑用来在测试脚本间随机选择链接,下面就是一个这种测试脚本的例子。

Browse.vbs Option Explicit

'///////////////////////////////////////////////////////// ' Description: Browse different products in random order. ' Summary:

' Below is a sample ACT test script that simulates ' browsing through different product categories in ' random order.

'/////////////////////////////////////////////////////////

Dim i, sParams, sServerName, oUser

107

'///////////////////////////////////////////////////////// ' TODO: -Enable Integrated security only, via the Security ' -tab in IIS

' -Replace these sample values with your site values ' -Set the username (domain\%username\sServerName = \

'Get a reference to the current ACT generated user Set oUser = Test.GetCurrentUser

oUser.Name = sServerName & \oUser.Password = \

'/////////////////////////////////////////////////////////

'Generate a new seed for random numbers Randomize()

'Generate a random number between 0 and 6 i = Cint(7 * Rnd())

'Output the random number to the trace file Test.Trace \

Select Case i Case 0

sParams = \ Case 1

sParams = \ Case 2

sParams = \ Case 3

sParams = \ Case 4

sParams = \ Case 5

sParams = \ Case 6

108

sParams = \

End Select

'Request the default page

Test.SendRequest(\

'Request a product category

Test.SendRequest(\ \

'This Request has been added to mark the end of a user scenario Test.SendRequest(\ \

这个测试脚本是用来自动产生用户的,把Web应用程序设置成需要综合安全模式。为了允许测试脚本成功的登陆,将获得ACT产生的一个涉及用户的对象,然后把一个用户名和密码列入用户对象属性里。你将创建一个在运行ACT测试脚本时优先的Web服务器本地帐号。

提示: 测试脚本的最后一个请求说明了如何在IIS日志(W3SVC格式)里添加标记。我们在例子里选择“test=count”,因为它在Web应用程序的逻辑里没有说明,你可以使用这个来计算测试运行后已完成设定情节的用户数,这种技术的另一个有用场合就是用来确定在有不同描绘事务的参数时Web应用程序的吞吐量 9. 创建测试SQL等级的脚本

ACT也可以用来处理SQL调用ActiveX Data Objects (ADOs),ACT支持多线程从而模拟多个并发连接到数据库的功能是很有用的,另一个使用这种方法的原因是如果你在Web和数据还没有准备完整时有好的发展周期。

提示: 你必须确保SQL服务器用户选择权,也就是事务独立等级,确保测试脚本创建的SQL连接和这些应用所创建的连接。 通过一个空的测试脚本为开始点,你可以连接到一个SQL服务器,执行存储过程或其

它动态SQL语句。例如,查询功能可以调用下面的存储过程:

ProductSearch @Search = N'search string'

下面的测试脚本将说明使用脚本库和ADO连接到SQL服务器和直接执行由IBuySpy查找功能组成的数据库,这个脚本也将显示如何找回从外部文件输入的数据。

Search_SQL.vbs Option Explicit

109

'///////////////////////////////////////////////////////// ' Description: Directly Stress SQL Tier via ADO calls ' Summary:

' Below is a sample ACT test script that be used to ' make SQL calls via ADO. This script passes ' parameters from a text file to execute a search ' stored procedure.

'/////////////////////////////////////////////////////////

Dim oFso, oCsvFile, oSQLConn, sConnStr, sSearchStr, sServerName Dim sUserName, sPassword, sPath

'///////////////////////////////////////////////////////// ' TODO: - Set the Server Name

' - Create a SQL server account with dbo privileges ' to the Store database

' - Verify path to the input file search.txt sServerName = \sUserName = \sPassword = \

sPath = \ACT_Project\\search.txt\

'/////////////////////////////////////////////////////////

'Create an ADO Connection object

Set oSQLConn = CreateObject(\

sConnStr = \ ;Database=Store;uid=\oSQLConn.Open sConnStr

'///////////////////////////////////////////////////////// ' Open a text file containing search sConnStrings Set oFso = CreateObject(\Set oCsvFile = oFso.OpenTextFile(sPath ,1)

'/////////////////////////////////////////////////////////

'Repeat until end of file is reached Do While oCsvFile.AtEndOfStream <> True

'Read a sSearchString from the text file sSearchStr = oCsvFile.ReadLine

'Output the search sConnString to the ACT log file Test.Trace sSearchStr

110

'///////////////////////////////////////////////////////// ' Execute the ProductSearch stored procedure

oSQLConn.execute \ trim(sSearchStr) & \

'///////////////////////////////////////////////////////// Loop

'Close the text file oCsvFile.Close

Set oCsvFile = Nothing Set oFso = Nothing

'Close the database connection oSQLConn.Close

Set oSQLConn = Nothing

10.设置脚本播放的测试属性 在运行测试脚本前,有几个测试属性必须被设置为非默认配置。这些属性可以通过属性页面被设置:

(1) 测试加载等级

这个时通过给并发浏览器连接一个值来完成的,一个浏览器连接被看成一个虚拟用户访问应用程序,例如,如果你想要模拟10个到Web应用程序的并发连接,把这个值设为10,ACT将产生10个SBC,每个都将处理这个测试脚本。

(2) 测试时间

这里有2个选择,一个是可以设置任意值,一个是设置指定的重复次数数值,这个数值是所有连接的总和。如果并发浏览器连接被设置为10,而且重复次数设置为100,然后每个连接将执行这个脚本不超过这10个连接重复100次的总和。为了测试,我们特意把持续时间设置为一个允许有充分时间使加载热身达到稳定状态的数值,这个时间值由CPU利用时间或不同测试脚本例子每秒的请求数来决定。ACT允许将这些这些短暂的行为排除在报告外,让用户指定热身时间。

(3) 详细报告

ACT可以给每个页面请求概括出统计表,或者简单的总计所有请求的统计表。要获取更多报告的详细信息,检查框产生的测试结果设置位于高级设置对话框内,点击测试属性对话框上高级按钮来弹出高级设置窗口。

提示: 要减少报告的产生时间和长时间测试产生的“余额不足”的错误,我们推荐关掉这个产生大的请求数的测试设置。 (4) 用户

ACT可以自动产生用户,或者你可以指定一个预先确定了用户的用户组。因为许多应用需要输入用户和口令,可以先设置一个用户组,然后通过属性页面选择该用户组。在组中

111

定义的用户数目必须等于或大于并发浏览器连接的数目。脚本将重复使用同个用户直到测试脚本调用测试对象的GetNextUser方法。关于测试对象的方法的更多详细信息在ACT帮助文件中。

ACT可以通过自动产生用户以加快测试的执行。你可以在第一次创建用户组时调用这个部分,接下来,选择用户组并从动作菜单中选择产生用户,这样将弹出创建用户对话框,用来指定用户数,用户名和密码。最新创建的用户组必须和要使用这个用户组的测试相结合。 (5) 计数器

在执行监控过程中被捕获的相同计数器将在计数器框中列出,你可以给计数间隔指定一个值来设置取样时间。要添加计数器,点击添加按钮,然后从浏览执行计数器对话框中选择目标机器和想要的计数器,被添加的计数器将出现在测试属性页面的执行计数器列表框中。

11.修正脚本避免记录和重放

Web应用程序有基于用户输入的动态内容,这写应用程序经常具有一个像SQL一样的数据库管理系统。由于这个原因,简单的记录和回放一个测试脚本经常不能正确的模拟真是世界的事务。举例说明,在记录阶段记录一个设定的情节将只能捕获一个输入的查找字符串,回放这个脚本来模拟重复事件将不能创建现实的流量,因为查找疑问和查找结果可能被隐藏了,在这种情况下,测试结果将被扭曲,而且测试将不能代表实际用户用唯一的查找字符串的交互作用。

记录在测试脚本产物中是一个快速和简便的起点,而且可以被用来捕获大部分Web请求,类似GET和POST方法。一旦一个被记录的测试脚本被创建,你可能必须修改代码来适应动态改变的用户数据。例如,一个Web应用程序可能需要处理一个在线书店的用户帐号注册。录制这样的测试脚本时可能会同时将像用户名这样的数据记录在内,直到用户帐号将已被创建时才会回放这个测试脚本。这个测试脚本必须给用户帐号使用不同的值,所以以前创建的相同帐号将不能尝试更多次。一个步骤是修改测试脚本来从文本文件读取用户帐号数据并把这个数据作为Web请求的一部分。你将创建足够的数据,所以测试脚本可以运行想要的时间或者完成所想的重复次数。

提示: 为了避免创建大量可以用来连续运行测试的数据,在测试运行前你需要备份你的应用程序的SQL数据库,在后续的测试运行前记录你的数据库先前的状态。这个方法将允许你使用相同的数据文件来重复测试。 可能在其中一步需要产生数据来个后面的步骤使用,例如全局唯一标识符涉及到一个地址。在这种情况下,需要修改测试脚本来解析响应的请求数据,这些数据将赋值给变量以在后续的步骤中使用。幸运的是ACT揭露了一个这种捕获Web响应客户请求的响应对象,一个使用了响应对象的例子,可以在“分析ACT状态“部分看到。

12.调试ACT测试脚本

ACT通过提供一个能捕获在回放过程中产生的消息的日志文件来修改和调试测试脚本,这个ACT日志文件被默认命名为ACTTrace.log,它位于Program Files\\Microsoft ACT。在工程属性页面,你可以修改这个文件的路径,指定这个文件的最大尺寸,以及是否完全记录日志。测试对象也允许被受约束的追踪。追踪等级可以通过TraceLevel属性来设置,用户定义消息可以被通过追踪方法输出。你也可以使用追踪日志文件来发现在测试执行中的运行时错误。下面的示例代码显示了设置追踪等级来记录所有日志消息并把定制消息写入追踪日

112

志文件:

Test.TraceLevel = -1

' The tracelevel property can be set to one of the following values ' -1: log all information ' 0: disable logging

' 1: log internal program information only

' 2: log external information only, from the Test.Trace method. ' This is the default setting.

Test.Trace(\

提示: 除非设置了TraceLevel,否则将没有数据被写入ACTTrace.log,除非你明确调用了Test.Trace。 长期的测试可以最少运行8小时或者可以持续长达一周,可是,准确的时间长度真正依赖于被测试的应用程序,这种测试对于确定应用程序的稳定性检查内存泄漏和监控应用程序在同个负载下长时间的吞吐量很有用。

13.创造一个可控的环境

除了确定足够的浏览器连接数目和最佳的客户机器数目,我们建议你在一个可控的环境中进行测试,可控的意味着在那里应该有机器被指定为客户和其他主应用程序的服务器,这些机器应该尽可能在硬件规格上接近你们产品的环境。所有系统应该被连接到一个有足够带宽个人网络。如果执行过程不能被重复,那么测试结果就没什么价值了。一个可控环境可以通过排除没有测试关系的网络噪音来保证测试的可靠性。

缺少一个可控环境,通过引用依赖于外部查找的DNS的服务器,可能会扭曲测试的结果。依赖于被操作的测试的时间,基于网络连接的网络延迟可以被改变,这些都能影星应用程序的吞吐量。如果这种依赖于外部服务器的情况存在,测试进度可以被一个或多个这种服务器问题影响,延缓了全部测试结果。在可控的环境下,你也可以确定依靠客户在服务器上产生的负载是独立的。

本章小结

ACT是一个强大的工具。它以后在版本的发展中还将用到新的技术。越早学会这个工具,你就能越快好好使用它。我们希望这一章提供了一个使用ACT的开头。

113

本文来源:https://www.bwwdw.com/article/i9rg.html

Top