下面,介绍如何在OpenSTA 的测试脚本中引入变量,并给变量赋不同值的过程。网络应用系统一般都会有一个登陆网页,需要用户输入正确的用户名称和密码,经过系统验证后,用户才能进入该应用系统。在使用OpenSTA 录制测试脚本时,输入的用户名称和密码将被OpenSTA 记录在脚本中,录制完成后,可以在脚本文件中发现如下语句:
PRIMARY POST URI"http://demosite.opensta.org/gsg-v1
HTTP/1.0"ON 2 &
HEADER DEFAULT_HEADERS &
,WITH {"Accept: application/vnd.ms-excel, application/msword,
application/vnd.ms-powerp" & "oint, image/gif,image/x-xbitmap,
image/jpeg, image/pjpeg, */*", &
"Referer: http://demosite.opensta.org/gsg-v1", &
"Accept-Language: en-us", &
"Content-Type: application/x-www-form-urlencoded", &
"Content-Length: 22", &
"Pragma: no-cache"} &
BODY "loginid="mike&passwd=ekim""
这里“mike”、“ekim”就是录制脚本时登陆系统所输入的用户名称和密码。
问题是在执行性能测试时,往往需要模拟很多个不同的用户同时登陆系统,观察系统的各项性能指标。为每个不同的系统用户录制单独的测试脚本是不现实的。那么,如何修改已录制好的测试脚本,使其在测试过程中可以模拟多个不同的虚拟用户,而每个虚拟用户的用户名称和密码都被写入测试脚本中呢?
1、首先,在测试脚本的Definition 部分中增加变量USERNAME、PASSWORD 的定
义:
CHARACTER*512USERNAME ( "mike", "allan", "david" , "robert" ),
SCRIPTCHARACTER*512
PASSWORD ( "ekim", "nalla", "divad" , "trebor" ),
SCRIPT
这里假设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 = PASSWORD
RELEASE MUTEX "LOGIN"
其中:
AQUIRE MUTEX 命令的含义是: 将变量USERNAME 和PASSWORD 设置为用户名称和密码这两个变量选择值序列中的第一个值,并设置为local 形式,避免其他虚拟用户使用这个值;
RELEASE MUTEX 命令的含义是:释放Mutex, 其他虚拟用户可以选择序列中的第一个值(序列中的值是被循环使用的);
这里需要解释一下MUTEX 锁定机制的含义,是为了避免多个虚拟用户测试时,自动从变量选择值序列中进行选择时,出现选择同一值的现象(即选择了同一个用户的现象); 4、将发送登陆请求的PRIMARY POST 语句中BODY 的用户名和密码替换成变量:
PRIMARY POST URI"http://demosite.opensta.org/gsg-v1
HTTP/1.0"ON 2 & HEADER DEFAULT_HEADERS & ,WITH {"Accept: application/vnd.ms-excel, application/msword,
application/vnd.ms-powerp" & "oint, image/gif,image/x-xbitmap, image/jpeg, image/pjpeg, */*", & "Referer: http://demosite.opensta.org/gsg-v1", & "Accept-Language: en-us", & "Content-Type: application/x-www-form-urlencoded", & "Content-Length: 22", & "Pragma: no-cache"} &
,BODY "loginid="mike&passwd=ekim""
中
,BODY "loginid="mike&passwd=ekim""
改写为:
,BODY "loginid="+MY_USERNAME+"&passwd="+MY_PASSWORD至此,对测试脚本的修改已经完成。按照本文前面所介绍的OpenSTA 操作步骤,设置性能测试收集器,设置虚拟用户的个数为4,开始执行测试,OpenSTA 就会模拟mike、allan、david、robert 这4 个不同的用户同时登陆系统的情况。说到这里,读者可能又会问,怎么验证在测试执行过程中,确实是模拟了这几个用户进行登陆的呢?我们可以通过将所有登陆系统的用户名称打印出来的方法进行验证。
方法是,在发送登陆请求的PRIMARY POST 语句之后,添加Report 语句:
REPORT "USER ", MY_USERNAME 这样在测试执行完成后,Test Report Log 中就可以看到打印出来的登陆用户名称。(是不是很简单?大家可以来试试)
作者在自己的测试脚本中进行实验,设置虚拟用户为3 个,在登陆请求语句之后增加Report 语句,以下是测试结束后Test Report Log 信息
这里,“admin”、“sjcj”、“data”是被测试系统的三个用户名称。
通过上边的一系列阐述,大家对Web 性能测试工具OpenSTA 应该有了一定的了解。如何更有效的利用这个工具,收集系统的性能指标进行性能分析,希望大家共同探讨。
参考文献:
1.OpenSTA user manual
文章来源于领测软件测试网 https://www.ltesting.net/