1、 OpenSTA使用详解官方网站 www.opensta.org OpenSTA是一个免费的、源代码开放的web 性能测试工具。李娜2010-5-16目录1OpenSTA简介31.1总括31.2OpenSTA的组成部分31.3什么是性能指标收集器32OpenSTA的安装42.1OpenSTA的安装图解43OpenSTA的使用73.1如何录制测试脚本73.2生成性能指标收集器93.3组成测试环境113.4并发测试123.5Script变量实现参数化133.6DOM对象实现关联163.7设置负载生成器183.8如何添加Task Group184附录214.1小结214.2参考文献211 OpenS
2、TA简介1.1 总括OpenSTA是一个免费的、源代码开放的web 性能测试工具,本文档主要介绍OpenSTA的原理、组成部分、录制脚本的过程等等。OpenSTA 是专用于B/S 结构的、免费的性能测试工具。它的优点除了免费、源代码开放的优点外,还能对录制的测试脚本进行,按指定的语法进行编辑。测试工程师在录制完测试脚本后,只需要了解该脚本语言的特定语法知识,就可以对测试脚本进行编辑,以便于再次执行性能测试时获得所需要的参数,之后进行特定的性能指标分析。OpenSTA 以最简单的方式让大家对性能测试的原理有较深的了解,其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。总括图:1.2 Ope
3、nSTA的组成部分OpenSTACommander 主要控制应用程序;NameServer CORBA 背景处理器,保证OpenSTA 各个组成部分之间的交流。(NameServer 是安装OpenSTA 时自动安装的,正常运行时可以在Windows 任务栏的右侧看到图标 ,如果没有正常运行或者被停止了图标显示为红色巴叉。)1.3 什么是性能指标收集器性能指标收集器(即Collector)是用户定义的一组问题, 决定在测试过程中哪些性能指标需要记录。包括两种类型: 1)NT Performance Collectors 用于采集运行WinNT 或Win 2000 的主机的性能指标.。 2)SN
4、MP Collectors 用于采集主机和其他运行SNMP agent 或proxy SNMP agent 的SNMP 数据。Collector 的设置将在下面如何录制测试脚本中介绍。2 OpenSTA的安装2.1 OpenSTA的安装图解 下载OpenSTA安装包,双击安装即可。安装OpenSTA 后,在“所有程序”中出现OpenSTA 的三个工具程序,如下图:3 OpenSTA的使用3.1 如何录制测试脚本3.1.1检查OpenSTA NameServer 状态为运行中,即图标显示为,。(NameServer 是安装OpenSTA 的同时被安装的,正常运行时,可以在Windows任务栏的右
5、侧看到图标。)3.1.2运行“OpenSTA Commander”,界面显示为下图:3.1.3鼠标点“Scripts ”,通过右键菜单“New Script ”-“HTTP”生成新脚本,脚本名称缺省为NEWSCRIP。还可以菜单栏file-“New Script”-“HTTP”。3.1.4双击新脚本,打开Script Modeler 窗口,在Options菜单中设置Browser 和Gateway,一般情况下,保持Gateway 的缺省设置。3.1.5按工具栏中的红色圆钮,自动打开指定的浏览器,输入需要录制的系统URL,显示被测试网站的首页内容。在登陆成功之后,执行各个既定的操作步骤。按工具条
6、上的方框按钮,或直接退出浏览器,可以停止脚本的录制,这是在Script Modeler窗口中将看到被录制下来的脚本语句。3.2 生成性能指标收集器3.2.1鼠标点“Collectors”,通过右键菜单生成新指标收集器,缺省为NEWCOLLECTOR。3.2.2通过browse Queries 浏览并设置需要收集的性能指标,如下图:3.3 组成测试环境3.3.1在Tests中新建一个NEWTEST,将测试脚本和性能指标收集器拖到该Test 中,(注意:按住图标拖到task1或task2中)如下图:3.3.2按工具栏中的绿色箭头,执行测试,测试过程中可以查看“Monitoring”页签的内容,测试
7、结束后,该页签为空。3.3.3测试结束后,点工具按钮下方的Results 页签,显示所记录的测试结果数据,如下图:3.4 并发测试OPENSTA支持并发测试,可以模拟多个用户同时多次发出http请求,要在机器上运行多个用户测试任务,需要在组织测试案例时,设定VUs属性,见下图:3.5 Script变量实现参数化3.5.1 创建变量通过Script Modeler的菜单 Variables - Create 来创建变量,如下图:1、Name 设置变量名。2、Scope 设置变量范围,非常重要的一个属性!有以下几种范围:1) Local 某变量范围设置为Local后,虚拟用户只能在自己当前运行的脚
8、本内使用该变量,而无法使用其他用户或其他脚本内的该变量。可能刚开始不好理解,让我们用下面的图来表示虚拟用户(Virtual User)、脚本(Script)、变量访问范围(Scope)的关系:2) Script变量范围设置为Script,则表示运行时所有虚拟用户共用同一个Script里的变量。比如4个用户虚拟用户一起运行脚本A,假设脚本A中有一个设置为Script范围的变量B,则4个虚拟用户共用变量B,如果有人对变量B进行修改,则会影响到其他人。如下图:3) ThreadOpenSTA 中,每个虚拟用户是一个单独的线程,单变量范围设置为Thread后,则表示该变量在单个虚拟用户的线程内共享,很
9、奇妙的是它定义在Script中却能够跨越Script共享同一变量。因此,如果要设置Thread范围多个Script共享同一变量,必须在每个Script中定义它。通常我们会把这样的变量定义在Global_Variables.INC文件中。这是一个全局变量文件,我们的每个脚本都会在中引用它,如:Include GLOBAL_VARIABLES.INCThread范围的变量范围使用如下图:4) Global设置为Global的变量可想而知范围最大,即变量在所有虚拟用户,所有脚本中共享。同样,变量必须在每个脚本中定义或是在Global_Variables.INC中定义。如下图:3、Value 设置值的
10、来源,可以是自己输入的数值(Variable)、数组(Value List)、文件中的数据(File)、数据库中的数据(Database)等。4、Order 变量取值的顺序,分为:按顺序取(Sequential)和随机取(Random)。注意,当数据取完时,会从头开始取数据。5、Type 变量类型,分为字符串(Character)和数字(Integer)。3.5.2 使用定义好的变量假如我们在刚才的步骤中创建了USERNAME和PASSWORD两个变量,Scope定义为SCRIPT,再创建MY_USERNAME和MY_PASSWORD两个Local变量。在Definitions中的定义如下:C
11、HARACTER*512 USERNAME ( phillip, allan, david, robert, donna ), SCRIPTCHARACTER*512 PASSWORD ( pillihp, nalla, divad, trebor, annod ), SCRIPTCHARACTER*512 MY_USERNAME, LOCALCHARACTER*512 MY_PASSWORD, LOCAL为了让所有用户在同一个脚本中使用同一个变量,解决并发的问题,我们必须在使用变量前使用互斥锁(MUTEXLocking)。如下:ACQUIRE MUTEX LOGINNEXT USERNAME
12、NEXT PASSWORDSET MY_USERNAME = USERNAMESET MY_PASSWORD = PASSWORDRELEASE MUTEX LOGIN过 程:首先,加锁(ACQUIRE MUTEX),并取名为LOGIN,然后使用NEXT语句获取USERNAME、PASSWORD变量的下一个数据,然后使用SET语句将取出的值赋值给本地变量MY_USERNAME、MY_PASSWORD,然后释放锁(RELEASE MUTEX)。有了上面的四种不同范围的变量,相信要实现不同类型的参数化就变的相当的简单和方便了。3.6 DOM对象实现关联 DOM是Document Object Mo
13、del文档对象模型的缩写。DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标准组件。通过DOM,我们可以动态的获取返回的 HTML或XML,并方便的取出里面相应节点的内容进行检查或他用。OpenSTA在录制时会把这些信息记录在一个后缀为.ALL的文件中,光标定位到 PRIMARY POST URI 或是 PRIMARY GET URI处,点击工具栏黄色右箭头按钮,如图:现在我们要动态的获取页面的返回值:“You are great!”,我们选中DOM tab中的HTML Tree,找到“You are great!”,选中,右键点击“Address”,如图:在弹出的对话框中
14、输入变量的名字,比如:ReturnText,确定后,代码中添加了如下内容:LOAD RESPONSE_INFO BODY ON 1 &INTO ReturnText &WITH HTML(0)/BODY(0)/FONT(0):TEXT:(0)然后就可以直接使用ReturnText变量了,我们可以用REPORT函数输出ReturnText来检查是否正确。REPORT ReturnText每次访问页面的时候Cookie的值都会不一样,OpenSTA自动为我们处理了这个需要动态获取的东西,处理的方式和刚才的ReturnText是一样的。3.7 设置负载生成器负载生成器机器即被控制 执行测试的机器(L
15、oader),必须运行OpenSTA Name Server,右键 - Configure - Repository Host- 输入运行了OpenSTA Commander的主控机器(Controller)的IP。注意修改了Repository Host后要重启服务。这样,在主控制机器(Controller)的Commander中的设置Host Name - 输入负载生成器机器的IP。搞定。这样做似乎有一些确定,因为假如我要控制别的机器运行测试案例,需要在别的机器上指定我的机器的IP,当我要用另一台机器做控制端(Controller)时,又需要修改那些机器的设置,不像LoadRunner一样
16、方便,不需要修改什么。3.8 如何添加Task Group在Commander中添 加一个Task Group,首先点击Tests右键创建一个Test,然后在左边的目录树中把要运行的Script或是Collector拖动拖到Task Group的TaskX(1,2,3.)列,可以看到,一个Task Group可以有多个Task,这里要注意的是: Collector不允许和Script放在同一个Taks Group。 Task Group有多个Task时,执行顺序是按Task编号执行,比如有四个Task,执行顺序是:Task1 Task2 Task3 Task4。 如果是多用户执行多个Task,
17、某个用户先执行完Task1,不会等待其他用户执行完Task1,而是直接执行后面的Task2。即,用户不会集合,都是单独执行。 Task Group各个参数选项说明,首先看看Task Group有哪些列:Task Group列是Task Group的名称和说明信息。Start列中可以设置Task Group的开始时间(Start Task Group),分为:立即开始(Immediately)、某个时间开始(Scheduled)、从现在开始计时多久后开始(Delay)。结束Task Group的条件(Stop Task Group),分为:设置整个Task Group循环执行多少次后完成(On
18、Completion),手动控制完成(Manually),固定多长时间后完成(After fixed time)。Status列表示当前Task Group的状态,执行前状态为:有效(Enabled),执行后会出现:运行中(Running)、失败(Fail)等状态。Host列是负载生成器的主机名称或IP,这里可以设置其他远程机器运行负载,后面会介绍如何设置。VUs列是虚拟用户设置相关的内容。界面上有些内容显示不全,因此使用Spy+取出完整的内容,看下图:* Total number of virtual users for this task group - 指定task group的总虚拟用
19、户数* Number of virtual users for Timer results - 指定需要进行Timer计时统计的虚拟用户数,因为执行过程中,统计事务执行时间等操作也会造成一定的消耗,因此,可以指定只有部分的虚拟用户收集进行自己的时间统计数据,这个和”抽样统计“的思路差不多。* Number of virtual users for HTTP results - 指定需要统计HTTP results的虚拟用户数,和上面意思差不多,抽样统计。* Generate timers for each page - 为脚本中每个页面进行时间统计。* Introduce virtual us
20、ers in batches - 设置是否将虚拟用户分成几批来执行,选中的话会在右边出现一个Batch Start Options。* Interval between batches - 设置每批用户执行的间隔时间。* Number of virtual users per batch - 设置每批用户的数量。* Batch ramp up time (seconds) - 设置每批执行的时间。*关于按批执行,执行的规律是比较奇怪的,比如虚拟用户总数设置为20,每批间隔时间设置为2秒,每批用户数为5,每批运行时间为10秒,则相对于每批Batch来看,运行情况如下:然而,在同一批内的五个虚拟用
21、户是如何执行的呢?是在10秒内同时并发执行一次?多次?还是10秒内按顺序执行?经过试验,发现同一批内的五个虚拟用户是按顺序来执行的,因为每批用户数是5,每批运行时间是10秒,因此,按顺序执行平均分下来每个用户需要执行10/5=2秒,在2秒内,虚拟用户只执行一次,然后2秒后,下一个用户开始执行。同一批内用户执行情况如下图:Task列是设置当天列的Task的一些基本信息,界面上有些字也不全,补全后如图:* Task Termination - Task 结束方式,分为两种:循环执行指定次数后停止(On Completion)、循环执行指定时间后停止(After Fixed Time)。当选择On
22、Completion时,在下面的文本框中输入需要循环的次数,当选择After Fixed Time时,在下面的文本框中输入需要循环执行的时间。* Delay between each iteration - 设置相邻两次迭代之间的时间间隔,分为两种:固定时间(Fixed Delay)、可变时间(Variable Delay)。当选中Fixed Delay时,在下面的文本框中输入固定的间隔时间(Delay),当选中Variable Delay时,则输入间隔时间范围的最小值(Minimum)和最大值(Maximum)。4 附录4.1 小结总体感觉OpenSTA还是不错的,小巧,简洁,在构建一个场景相对简单的性能测试案例时,OpenSTA是一个不错的选择。然而OpenSTA又有着许多不足:脚本语言过于复杂,自定义脚本相当困难;似乎不支持集合点的设置;Results结果报告的图表太简陋,功能太少;负载生成器的被控端设计不合理。总之一句话,不如LoadRunner好使!4.2 参考文献丰富的网络资源OpenSTA帮助文档World2007实用教程 清华大学出版社王诚君编著
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100