软件测试中点评性能测试工具OpenSTA
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
摘要:
本文将介绍一个免费的、源代码开放的web性能测试工具OpenSTA,包括它的原理、组成部分、录制脚本的过程。另外,还将介绍如何在OpenSTA的测试脚本中引入变量,并给变量赋不同值,比如,将登陆被测试网站的用户名称设置为一个变量,在执行性能测试时,虚拟多个不同的用户同时登陆被测试网站,通过将访问网站的用户名称打印出来的方法,验证该变量在测试执行过程中被赋与了不同值。
正文:
作为测试工程师,不能只关注系统的功能,还必须对系统的性能进行全面的测试,才能确认系统是否满足用户的需求。那么什么是性能测试呢?
“中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。应用在客户端性能测试的目的是考察客户端应用的性能,测试的入口是客户端。它主要包括并发性能测试、疲劳强度测试、大数据量测试和速度测试等,其中并发性能测试是重点。”(《性能测试:软件测试的重中之重》作者:中国软件评测中心 发文时间:2003.08.26)
目前比较著名的并发性能测试工具有Rational Robot、QALoad、LoadRunner和微软的WAS等。这其中QALoad、LoadRunner、Rational Robot都是比较不错的商业测试工具(价格也很贵哦),微软的WAS是一个免费的测试工具,使用起来比较简单,但是由于不能显示和编辑所录制的测试脚本,其可控性和图形化测试结果都较弱,故造成一定的局限性。
OpenSTA是专用于B/S结构的、免费的性能测试工具。它的优点除了免费、源代码开放的优点外,还能对录制的测试脚本进行,按指定的语法进行编辑。测试工程师在录制完测试脚本后,只需要了解该脚本语言的特定语法知识,就可以对测试脚本进行编辑,以便于再次执行性能测试时获得所需要的参数,之后进行特定的性能指标分析。OpenSTA以最简单的方式让大家对性能测试的原理有较深的了解,其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。
OpenSTA是基于Common Object Request Broker Architecture (CORBA)的结构体系。它是通过虚拟一个proxy, 使用其专用的脚本控制语言,记录通过proxy 的一切HTTP/S traffic。测试工程师通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP数据,对被测试系统的性能进行分析。
首先,OpenSTA都有哪些组成部分?
u OpenSTACommander – 主要控制应用程序;
u NameServer – CORBA背景处理器,保证OpenSTA各个组成部分之间的交流;
(NameServer是安装OpenSTA的同时被安装的,正常运行时,可以在Windows任务栏的右侧看到图标 ,如果没有正常运行或者被停止了,图标显示为 。)
u ScriptModeler – 配置、启动HttpGateway的工具程序,同时也是录制脚本的工具程序;
u HttpGateway – 模拟proxy 处理器,执行录制;
(接受用户手工配置的proxy设置,不接受任何自动配置proxy机制);
u TestExecuter – 真正执行测试的背景处理器;
u WebRelayDaemon –使用XML RPC在internet上过滤 CORBA限制;
u Repository–测试脚本、配置和测试结果存贮目录;
u TestManager–管理测试运行的背景程序;
u TaskGroupExecuter–运行TaskGroup的处理器。
其次,什么是性能指标收集器(即Collector)呢?这是用户定义的一组问题,决定在测试过程中哪些性能指标需要记录。包括两种类型:
1)NT Performance Collectors 用于采集运行WinNT或Win 2000的主机的性能指标.
2)SNMP Collectors 用于采集主机和其他运行 SNMP agent 或 proxy SNMP agent的SNMP数据.
Collector的设置将在下面如何录制测试脚本中介绍。
第三,如何录制测试脚本呢?
1、 安装OpenSTA后,在“程序”中出现OpenSTA的三个工具程序,如下图:
图1-1安装后的界面
检查OpenSTA NameServer状态为运行中,即图标为 ,
运行“OpenSTA Commander”,界面显示为下图:
图1-2运行后的界面
2、录制新脚本
1)鼠标点“Scripts”,通过右键菜单“New Script”->“HTTP”生成新脚本,脚本名称缺省为NEWSCRIP(如下图);
图1-3脚本界面
2) 双击新脚本,打开Script Modeler窗口,在Options菜单中设置Browser和Gateway,一般情况下,保持Gateway的缺省设置 ;
图1-4录制脚本界面
3)按工具栏中的红色圆钮,自动打开指定的浏览器,输入需要录制的系统URL, 显示被测试网站的首页内容。在登陆成功之后,执行各个既定的操作步骤。按工具条上的方框按钮,或直接退出浏览器,可以停止脚本的录制,这是在Script Modeler窗口中将看到被录制下来的脚本语句。
3、生成Collector
1) 鼠标点“Collectors”,通过右键菜单生成新指标收集器,缺省为NEWCOLLECTOR;
图1-5生成收集器
2) 通过browse Queries浏览并设置需要收集的性能指标。(各个性能指标的含义不是这篇文章所包含的内容,这里不做介绍)
4、 组成测试环境
与脚本和性能收集器同样的方法,在Tests中新建一个NEWTEST(下图中已将新建的Test进行了重新命名), 将测试脚本和性能指标收集器拖到该Test中,如下图;
图1-6 测试环境界面
5、 按工具栏中的 ,执行测试,测试过程中可以查看“Monitoring”页签的内容,测试结束后,该页签为空;
6、 测试结束后,点工具按钮下方的Results页签,显示所记录的测试结果数据,如下图。
图1-7 测试结果界面
至此,读者对如何使用OpenSTA这个测试工具应该有了一个大概的了解,如果需要详细了解使用的细节,可以查看该工具的使用手册,不过是E文的哦:)。需要下载OpenSTA工具的朋友可以访问网站http://www.opensta.org/,使用手册也可以在这个网站上下载。
下面,介绍如何在OpenSTA的测试脚本中引入变量,并给变量赋不同值的过程。网络应用系统一般都会有一个登陆网页,需要用户输入正确的用户名称和密码,经过系统验证后,用户才能进入该应用系统。在使用OpenSTA录制测试脚本时,输入的用户名称和密码将被OpenSTA记录在脚本中,录制完成后,可以在脚本文件中发现如下语句:
这里“mike”、“ekim”就是录制脚本时登陆系统所输入的用户名称和密码。
问题是在执行性能测试时,往往需要模拟很多个不同的用户同时登陆系统,观察系统的各项性能指标。为每个不同的系统用户录制单独的测试脚本是不现实的。那么,如何修改已录制好的测试脚本,使其在测试过程中可以模拟多个不同的虚拟用户,而每个虚拟用户的用户名称和密码都被写入测试脚本中呢?
1、首先,在测试脚本的Definition部分中增加变量USERNAME、PASSWORD的定义:
这里假设mike、allan、david、robert是该系统正确的用户名称,ekim、nalla、divad、trebor分别是这些用户的登陆密码
(说明:OpenSTA测试脚本分三个部分, Environment、Definition、Code)2、同时,在脚本的Definition 部分增加变量MY_USERNAME、MY_PASSWORD的定义:CHARACTER*512 MY_USERNAME, LOCAL CHARACTER*512 MY_PASSWORD, LOCAL (注意,这两个变量范围是LOCAL型)3、在发送登陆请求的语句“PRIMARY POST URI"http://demosite.opensta.org/gsg-v1 HTTP/1.0"ON 2…….”之前, 添加下列语句:ACQUIRE MUTEX "LOGIN" NEXT USERNAME NEXT PASSWORD SET MY_USERNAME = USERNAME SET MY_PASSWORD = PASSWORDRELEASE MUTEX "LOGIN"其中:AQUIRE MUTEX命令 的含义是: 将变量USERNAME 和PASSWORD 设置为用户名称和密码这两个变量选择值序列中的第一个值,并设置为local 形式,避免其他虚拟用户使用这个值;RELEASE MUTEX命令 的含义是:释放Mutex, 其他虚拟用户可以选择序列中的第一个值(序列中的值是被循环使用的);
这里需要解释一下MUTEX锁定机制 的含义,是为了避免多个虚拟用户测试时,自动从变量选择值序列中进行选择时,出现选择同一值的现象(即选择了同一个用户的现象);
4、将发送登陆请求的PRIMARY POST语句中BODY的用户名和密码替换成变量:
至此,对测试脚本的修改已经完成。按照本文前面所介绍的OpenSTA操作步骤,设置性能测试收集器,设置虚拟用户的个数为4,开始执行测试,OpenSTA就会模拟mike、allan、david、robert这4个不同的用户同时登陆系统的情况。说到这里,读者可能又会问,怎么验证在测试执行过程中,确实是模拟了这几个用户进行登陆的呢?我们可以通过将所有登陆系统的用户名称打印出来的方法进行验证。
方法是,在发送登陆请求的PRIMARY POST语句之后,添加Report语句:
REPORT "USER ", MY_USERNAME这样在测试执行完成后,Test Report Log中就可以看到打印出来的登陆用户名称。(是不是很简单?大家可以来试试)作者在自己的测试脚本中进行实验,设置虚拟用户为3个,在登陆请求语句之后增加Report语句,以下是测试结束后Test Report Log信息
图1-8 测试结果这里,“admin”、“sjcj”、“data”是被测试系统的三个用户名称。通过上边的一系列阐述,大家对Web性能测试工具OpenSTA应该有了一定的了解。如何更有效的利用这个工具,收集系统的性能指标进行性能分析,希望大家共同探讨。
参考文献:
1.OpenSTA user manual
----------------------------------------------------------------------------------------------[作者简介]
姓名:缑萍萍:女,在软件行业有将近10年的经历,前后从事过技术支持、C++软件开发、流程管理和软件测试的工作,期间在英国攻读完工程管理的硕士学位。至今,已经做了1年多的web应用系统软件测试工作,对这个工作非常有兴趣,也小有一些心得。测试行业在国外已经发展的比较成熟了,在国内这几年才逐渐引起重视,作者希望能够通过自己的努力将国外先进的技巧、理念引入国内,与国内同行共同交流,以快速提高我国的软件测试水平。