OpenSTA - 高效的 web 性能测试工具
文章出处:IBM developerWorks
在市场需求的推动下 , Web 应用如今已经从一般的网站发展成为大型电子商务、信息发布和提供各种服务的平台 , 软件规模不断扩大 , 软件复杂性不断增加 , 但是激烈的商业竞争使软件开发周期缩短 , 如何保证 Web 应用的正确性和可靠性越来越成为人们关注的问题。作为保证软件质量和可靠性的重要手段 ,Web 应用软件的测试就成为如今开发过程中的一个重要环节。本文将介绍一款开源的 Web 性能测试软件— OpenSTA,OpenSTA 是专用于 B/S 结构的、免费的性能测试工具。它的优点除了免费、源代码开放等优点外,还能对录制的测试脚本进行分析,并且按指定的语法进行编辑。通过实际的应用实例证 明,OpenSTA 具有较为广阔的应用前景。
随着 Web 应用技术的发展和 Web 应用程序的迅速普及,Web 系统的性能和服务质量显得越来越重要。性能测试在软件的质量保证中起着越来越重要的作用。性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载 条件来对系统的各项性能指标进行测试。性能测试是一种信息的收集和分析的过程,测试过程中通过收集的数据用来预测怎样的负载水平将耗尽系统资源。性能测试 保证程序具有良好的性能,它考察在不同的用户负载下,Web 对用户请求做出的相应情况,以确保将来系统运行的安全性、可靠性和执行效率。性能测试的主要目的是为维护系统的性能找到有效地改善策略。
OpenSTA 是一个免费的、开源的的 web 性能测试工具。OpenSTA 是专用于 B/S 结构的、免费的性能测试工具。它的优点除了免费、源代码开放等优点外,还能对录制的测试脚本进行分析,并且按指定的语法进行编辑。软件测试工程师在录制完 测试脚本后,只需要了解该脚本语言的特定语法知识,就可以对测试脚本进行编辑,以便于再次执行性能测试时获得所需要的参数,而后进行特定的性能指标分析。 OpenSTA 以最简单的方式让大家对性能测试的原理有较深的了解,其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。
为了能够更为详实的说明 OpenSTA 的应用过程,本节下面主要介绍 OpenSTA 的安装及配置过程,使测试人员能够更为快捷便利地使用 OpenSTA 进行性能测试的工作,能够更加方便的应用 OpenSTA 的各项功能。
- 下载软件安装包,OpenSTA 官方网站提供了基于 windows 系统的各种安装包,用户可以根据需要进行下载安装。 OpenSTA 安装包下载地址:http://www.opensta.org/download.html
- 双击下载的安装包进行安装。
图 1. OpenSTA 安装界面
- 按照默认安装点击下一步即可,系统会进行重启。当看到 图标时,证明已经能够安装成功,OpenSTA 已经启动。
图 2. OpenSTA 操作界面
OpenSTA 测试是一组用户控制的定义,其中包括脚本、性能指标收集器还有用于运行测试的参数。测试运行会生成由图形或者表格显示的结果。脚本和性能指标收集器是测试 的构建模块。可以被许多不同的测试所引用。脚本决定了测试的内容,指标收集器则定义了测试运行期间将被收集的数据。添加到测试中的脚本和性能指标收集器会 被放在测试任务组中。通过对每个测试任务组采用不同的设置来控制测试的运行以及目标 WAE 的负载水平。测试任务组的设置包括虚拟用户的数量、所使用的主机数目和一次测试运行脚本的回放次数。性能测试的开发首先需要对结构和内容进行规划。然后按 序创建测试所需要的脚本和性能指标收集器。
脚本构成了 HTTP/S性能测试的内容,记录了用户通过浏览器向目标网络应用环境(WAE)发出的请 求。脚本是通过代理服务器或者 Gateway 传输 HTTP/S 通信,使用 SCL(脚本控制语言)命令取代原来的 HTTP/S 命令生成的。脚本建模器根据 Web 会话期间的 HTTP/S 通信来创建脚本,使用 SCL 语言记录了 HTTP/S 活动。当测试开始运行,该脚本就会回放所有原始请求。这意味着目标 Web 应用环境(WAE)将接收来自模拟浏览器用户,或虚拟用户的并发,异步连接和请求,就如同真实的终端用户一样。使用 SCL 编写脚本,可以对内容进行控制。通过引入变量来取代脚本录制生成的固定值,可以在指定的负荷水平上测试 Web 活动,从而使性能测试更为灵活有效。
脚本的录制,会产生一个 .HTP 文件和一个 .ALL 文件。.HTP 文件包含了在 SCL 编写过程中,Web 会话期间发出的所有 HTTP/S 浏览器请求。这个文件就是脚本,它会作为 Web 性能测试的一部分被建模和回放。而 .ALL 文件则将 WAE 响应保存在不同分类下,包括可以被用来对附属脚本进行建模的 DOM。所有的脚本都保存在存储库中,可以被不同的测试所引用。
Gateway 是 OpenSTA 的一个组件,它与脚本建模器直接对接,记录 HTTP/S 通信,并创建脚本。它相当于一个代理服务器,位于客户端浏览器和承载了 WAE 环境的远程 Web 服务器之间。当你开始使用脚本建模器进行录制,Gateway 会覆盖浏览器的一些 Internet 连接设置,强迫使用代理服务器,在这里特指的就是 Gateway。Gateway 可以记录浏览器和 WAE 之间的网络活动,并产生一个 SCL 语言描述的脚本。 Gateway 将所有的浏览器请求存储在 HTP 文件中,WAE 对浏览器请求的响应则存储在 .ALL 文件中。.ALL 文件包含的 HTML 数据与 .HTP 文件中的内容有着直接联系。通过对 .ALL 文件的信息进行处理,可以实现脚本的建模。
SCL 是用于控制和记录 HTTP/S 通信的脚本控制语言。使用的 SCL 编写脚本,给开发切合实际的性能测试提供了建模能力。当你运行一个测试的时候,为了给一个或者多个目标 WAE 环境提供足够的负载,你可以编写一个脚本或者一个脚本序列,来模拟成千上万的虚拟用户。
HTTP/S 的通信是 Web 会话期间生成的关键信息。对它进行捕获,使你能够记录各种浏览器类型在不同平台的的活动。脚本可以被编写,然后在测试中被引用。录制和编写脚本后,你可以 重放脚本从而重现原始的浏览器命令。HTTP/S 请求并发异步运行,建立起和原始的 Web 对话一样多的 TCP 连接,连接数目可以因为你选择运行测试的虚拟用户数量而成倍增加。与其它仿真技术相比,开发和执行基于 SCL 的测试消耗更少的资源。这使 OpenSTA 可以支持虚拟用户数量较大的测试。
Repository 是 OpenSTA 在硬盘驱动器或网络计算机上的一个存储区域。其中保存了所有测试定义文件,包括脚本和性能指标收集器。另外,测试运行期间产生的所有结果文件也都存储在这 里。Repository 的内容和结构可以通过 commander 的 Repository 窗口来查看。它位于主窗口的左侧,能够显示存储的所有脚本、性能指标收集器和测试。你可以从 Repository 窗口开始创建新的脚本或者打开现有脚本。
脚本包含了测试的内容,需要进行提前的录制。通过 OpentSTA Commander来启动脚本建模器,进行脚本的录制和编辑并把它添加到你的测试中。在你开始录制脚本前,应该先选择配置。对于不同的计算机网络配置,OpenSTA 提供了几种选择。你可以选择用来录制脚本的浏览器类型以及连接方式。
- 打开 Commander 选择 File->New Script->HTTP。 在 Repository 窗口中,右键单击 Scripts文件夹,并选择 New Script->HTTP。脚本将出现在 Repository 窗口,脚本的图标上会出现一个红色小叉,表明该文件没有任何内容。只要你打开的脚本,录制一个 Web 会话,脚本图标的小叉就会消失。
- 右键单击新脚本的图标,选择 Rename,输入一个符合 OpenSTA Dataname 的唯一名称,最多 60 个字符。
- 双击新脚本的图标, 启动脚本建模器。
- 在捕获 / 回放工具栏点击录制按钮,或者选择 Capture->Record,来开始脚本 录制。这个动作会启动你所选择的 Gateway 和 Web 浏览器。当录制开始,浏览器的主页 Internet 选项会被脚本建模器重写,浏览器的主页将变成一个空白的 HTML 页面。这样以确保你的正常主页不会被启动并记录在脚本中。注意:如果没有手动选择远程录制模式,Gateway 会默认启动本地录制。
- 键入一个 URL,回车,或从浏览器的 URL 地址栏打开一个网址。然后正常的使用浏览器,执行一些你想记录到脚本上的动作。当您正在录制一个 Web 会话时,使用 Capture/Replay工具栏的添加注释按钮来添加注释,同样您也可以选择 Capture->Insert Comments。它们可以在进行单步执行时向你提供帮助。但是添加评论的时间不会被记录在脚本中。
- 当你完成所需要的浏览器动作后,在 Capture/Replay工具栏单击停止按钮或者直接关闭浏览器以切换回脚本建模器。当你完成脚本的录制,脚本窗格中会显示 SCL 格式的数据。
- 保存新脚本之前,需要使用语法检查选项来对它进行编译,以确保录制结果的有效性。选择 Capture->Syntax Check或在 Capture/Replay工具栏中单击编译按钮。编译结果会显示到输出窗格中。如果编译失败,则要通过重新录制脚本或者编辑脚本的内容来解决。
- 编译成功后,选择 Capture->Replay或者点击 Capture/Replay工具栏的回放按钮来回放脚本以检查已录制的结果。
- 录制完成后,在标准工具栏中点击保存按钮或者单击 File->Save将脚本保存在 Repository 中。
- 选择 File->Close以关闭当前脚本或者 File->Exit以退出脚本建模器。 如有未保存的脚本,在程序关闭之前会有自动提示对它们进行保存。关闭脚本建模器的同时也会关闭关联的浏览器并恢复原有的浏览器设置。
编辑脚本,使你能够制定切合实际的测试,提高测试的质量。脚本编辑器中有多种编辑选项,可以帮助你制定切合实际的性能测试。
SCL 是一种简单的脚本语言,让你能够控制所创建的脚本。对脚本进行编辑以准确地模拟 Web 活动,并控制目标 WAEs 在测试运行时处于指定的负载水平。在对脚本进行编辑前,首先要对脚本的结构和 SCL 语言有所了解。脚本被分为三个部分,你可以通过以下 SCL 关键字来定位:Environment,Definitions和 Code。
环境段是脚本的第一部分。以关键字 Environment 作为起始。前面是 Gateway 记录的当前的浏览器和创建日期。这部分用于定义脚本的全局属性,包括:Description,Mode和 Wait。
清单 1. 环境段代码示例
!Browser:IE5 !Date : 3/31/2012 Environment Description "" Mode HTTP Wait UNIT MILLISECONDS |
定义段以关键字 Definitions作为起始。它包含脚本中使用的所有定义,包括变量和常量的定义,以及定时器和文件定义的声明。
清单 2. 定义段代码示例
Definitions ! Standard Defines Include "RESPONSE_CODES.INC" Include "GLOBAL_VARIABLES.INC" CHARACTER*512 USER_AGENT Integer USE_PAGE_TIMERS CHARACTER*256 MESSAGE Timer T_TESTSCRIPT CONSTANT DEFAULT_HEADERS = "Host: www.baidu.com" & "Accept-Encoding: gzip. deflate"& "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; "& ".NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; "& ".NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)" CONSTANT S_cookie_1_0 = "BAIDUID=3E588F42E284D6C6D84921872F590936:FG=1" |
RESPONSE_CODES.INC 是一个 include 文件,其中包含 HTTP / S 的响应代码对应的常量的定义。
GLOBAL_VARIABLES.INC 用于保存测试运行过程中虚拟用户共享的全局和脚本范围的变量定义。
代码段以关键字 Code作为起始,由 SCL 命令组成,用来代替已录制的 Web 活动的命令,并定义脚本的行为。
清单 3. 代码段代码示例
PRIMARY GET URI "http://www.baidu.com/ HTTP/1.1" ON 1 & HEADER DEFAULT_HEADERS & ,WITH {"Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg," & "application/x-ms-application, application/x-ms-xbap, " & "application/vnd.ms-xpsdocument, application/xaml+xml, "& "application/vnd.ms-excel, application/vnd.ms-powerpoint, " & "application/msword, */*", & "Accept-Language: en-US,nb-NO;q=0.7,zh-CN;q=0.3", & "Connection: Keep-Alive", & "Cookie: "+S_cookie_1_0} DISCONNECT FROM 1 |
上面的这段代码 , 就是代码段中一次 Web 请求的 SCL 命令。其中指定了请求的地址和一些相关参数。
性能指标收集器的创建是测试开发过程中一个独立的部分 , 与测试和脚本的开发相分离。创建性能指标收集器包括选收集择性能数据的测试机以及测试运行中需要收集的数据的类型。OpenSTA 支持两种类型的性能指标收集:NT Performance Collector和 SNMP Collector。
NT Performance Collector 是针对 Windows NT 或 Windows2000 测试机,收集它们在测试运行中的性能数据。SNMP Collector 则是针对运行了 SNMP(简单网络管理协议)代理或者 SNMP 委托代理的测试,收集其测试运行过程中的 SNMP 数据。基于性能指标收集器的测试任务组可以在测试运行过程中被监测。测试运行的信息可以与其它结果一起显示。
性能指标收集器是一组用户定义的性能计数器,它们决定了一次测试运行中需要从测试机收集的性能数据的类型。将性能指标收集器添加到你的测试 中,就可以通过这些精确的性能计数器来收集你所需要的性能数据。在试运行期间,性能指标收集器被用来对生产系统的目标组件或者 Web 应用程序环境(WAEs)进行监测和性能数据的收集,以帮助你对它们的性能进行评估。性能指标收集器对测试运行期间性能数据的收集提供了灵活性。性能指标 收集器不仅仅可以对一台测试机的一种性能指标进行计数,还可以对多个测试机的多种性能指标进行计数。
下面仅以 NT Performance 为例,讲述的性能指标收集器的创建。
- 打开 Commander 通 过 File->New Collector选择生成 NT Performance 类型的性能指标收集器。
在 Repository 窗口中,右键单击 Collectors 文件夹,并选择 New Collector->NT Performance。创建出的新性能指标收集器将出现在 Repository 窗口。
- 右键单击新性能指标收集器的图标,选择 Rename,输入一个符合 OpenSTA Dataname 的唯一名称,最多 60 个字符。
- 在 Repository 窗口中,双击新性能指标收集器 (NT Performance) 的图标,从收集器窗口中打开性能指标收集器。在这个工作区内,你可以通过定义性能计数器来开发该性能指标收集器。
注:在 Commander 中,一个打开的性能指标收集器对应收集器窗格中的一个表格。每个性能计数器占据了表格的一行。
- 第一次打开一个新创建的性能指标收集器时,表格中没有定义任何的性能计数器,同时查询编辑对话框会自动出现。你可以通过此对话框设置一个新的性能计数器。或者,可以通过 Collectors->Add Row来添加一个新性能计数器,并在查询编辑对话框内设置名称和计数器的频率。
图 3. Edit Query 操作界面
- 在查询编辑对话框内单击 Browse Queries 浏览性能计数器,选择收集性能数据的目标测试机,然后选择性能计数器的类型和具体的计数器。
图 4. 浏览性能计数配置界面
- 在已经定义了一个或多个性能计数器的性能指标收集器中,通过对表的一行进行双击,可以打开查询编辑对话框,对原属性进行编辑。
- 使用工具栏中的加号按钮,添加新行,定义新的性能计数器。选择一行,并单击工具栏中的减号按钮删除查询。
- 当切换到不同的功能界面或者退出 Commander 时,性能指标收集器的设置会自动的保存到 Repository 中。
测试的创建步骤如下:
- 打开 Commander,选 择 File->New Test->Tests。
或者,在 Repository 窗口中,右键单击 Tests 文件夹,并选择 New Test->Tests。测试将出现在 Repository 窗口,测试的图标上会出现一个红色小叉,表明该文件没有任何内容。只要打开测试,添加一个脚本或性能指标收集器,图标上的红色小叉就会消失。
- 右键单击新测试的图标,选择 Rename,输入一个符合 OpenSTA Dataname 的唯一名称,最多 60 个字符。
- 当切换到不同的功能界面或退出 Commander 时,性能测试会自动的保存到 Repository 中。
- 在 Commander 窗口双击测试图标,打开测试窗格。测试窗格中的 Configuration 选项卡上显示了一个测试列表。
注:同一时间只能打开一个测试或者性能指标收集器。当测试被打开,Repository 窗口的测试图标上会出现一个黄色小锁。表示打开的测试不能被重命名或删除。
添加脚本到测试的步骤如下:
- 打开测试窗格,并选择测试窗格中的 Configuration 选项卡。
- 在 Repository 窗口双击展开 Scripts文件夹 . 左键点击一个脚本,然后,将其拖放到测试窗格中的 Task列,结果如图 5 所示:
图 5. 添加脚本到测试
注:选定的脚本会成为新任务组的第一个任务,你也可以在同一行添加其它的脚本。
添加性能指标收集器到测试的步骤如下:
- 打开测试窗格,并选择测试窗格中的 Configuration 选项卡。
- 在 Repository 窗口双击展开 Collectors文件夹 . 左键点击一个脚本,然后,将其拖放到测试窗格中的 Task列,结果如图 6 所示:
图 6. 添加性能指标收集器到测试
注:选定性能指标收集器会成为新任务组的第一个任务,一个基于收集器的任务组只能包含一个任务。
- 打开测试窗格,并选择测试窗格中的 Configuration 选项卡。
- 点击任务组中的 Start 单元格,初始的默认设置是 Immediately,表示测试运行时立即启动。
- 在 start 的属性栏里,展开下拉框并选择 Start Task Group选项:
- Scheduled:任务组从你设置开始,一定时间后启动,使用天数和时间文本框输入一个时间段。
- Immediately:测试运行时,立即启动任务组。
- Delayed:任务组从任务开始运行开始,一定时间后启动,使用天数和时间文本框输入一个时间段。
- 在 start 的属性栏里,展开下拉框并选择 Stop Task Group选项:
- Manually:该工作组将持续运行,直到单击“停止”按钮,激活测试运行期间的工作小组,在状态列。
- After fixed time:工作组在运行指定的时长后结束。使用时间文本框输入一个时间段。
- On Completion:工作组在运行指定迭代次数后结束。使用迭代次数文本框输入一个时间段。
运行测试,可以模拟真实终端用户的 Web 活动,从被测的系统组件收集性能数据。产生的测试结果可以用来帮助评估目标 Web 应用程序环境(WAEs)的性能。
- 运行测试前,点击工具栏的编译按钮或选择 Test-> Compile Test来编译当前测试。如果测试编译成功,会出现一个提示信息,点击 OK 信息关闭对话框。
- 如果与性测试前还没有编译过测试,点击工具栏的运行测试按钮也可以直接编译并运行。编译好的测试会按照任务组的设置被分发到各个测试机上运行。
- 使用工具栏的停止按钮停止测试,或用中断按钮中断测试。
注:停止测试将保存所有测试结果,而中断测试将清除所有测试结果。
- 当你运行一个测试,一个带有时间戳的测试结果文件夹会自动的创建到 Repository 中。点击测试窗格中的 Results 选项卡,点击测试结果文件夹选择要在结果窗口显示的测试运行期间收集的性能数据。
图 7. 性能测试结果图
本文介绍了一款开源的 Web 性能测试软件— OpenSTA,OpenSTA 是专用于 B/S 结构的、免费的性能测试工具。它的优点除了免费、源代码开放等优点外,还能对录制的测试脚本进行分析,并且按指定的语法进行编辑。本文列举了实例以说明其 使用方法,实践证明 OpenSTA 为性能测试提供了便捷的方式,具有较为广泛的应用前景,是一款非常好的性能测试工具。