一.事务(Transaction)
1.定义
为了衡量服务器的性能,我们需要定义事务。
我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,loadrunner运行到该事务的开始点时,lr会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。
插入事务操作可以在录制过程中,也可以在录制结束后。可以插入不限数量的事务。
2.事务的名称最好要有意义,能够清楚的说明该事务完成的动作。
such as:
lr_start_transaction(“SubmitBookData”);
/
*
*中间脚本是具体的事务操作
*
/
lr_end_transaction(“SubmitBookData”,LR_AUTO);
二.集合点(Renddezvous)
插入集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会
要求系统能够承受 1000 人同时提交数据,在 LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到 1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到 1000 人时,LoadRunner 命令 1000 人同时去提交数据,从而达到测试计划中的需求。
注意:集合点经常和事务结合起来使用。集合点只能插入到 Action 部分,vuser_init
和 vuser_end 中不能插入集合点。
三.关联(Correlation)
1.关联式解决脚本中存在的动态数据问题。
2.当用户登录时,会产生一个sessionid,访问结束后,该sessionid会失效。录制的时候,在脚本里获取到该sessionid,但是当回放的时候,这个sessionid已经无效,所以需要把这个sessionid作为一个动态数据,当一登录时,便获取一个新的有效的sessionid,然后通过函数把它函数保存下来。
四.参数化(Parameterizing)
1.如果用户在录制脚本过程中,填写提交了一些数据,比如要增加数据库记录。这些操作
都被记录到了脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。为了更加真实的模拟实际环境,需要各种各样的输入。参数化输入是一种不错的方法。
用参数表示用户的脚本有两个优点:
① 可以使脚本的长度变短。
② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你
仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一
个特定名称的值。
参数化包含以下两项任务:
① 在脚本中用参数取代常量值。
② 设置参数的属性以及数据源。
参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。
另外,不是所有的函数都可以参数化的。
2.参数的类型
(1)DateTime:很简单,在需要输入日期/时间的地方,可以用 DateTime 类型来替代。其属性设置也很简单,选择一种格式即可。当然也可以定制格式。
(2) Group Name:暂时不知道何处能用到,但设置比较简单。在实际运行中,LoadRunner使用该虚拟用户所在的 Vuser Group 来代替。但是在 VuGen 中运行时,Group Name将会是 None
(3) Load Generator Name:在实际运行中,LoadRunner 使用该虚拟用户所在 Load
Generator 的机器名来代替。
(4)Iteration Number:在实际运行中,LoadRunner 使用该测试脚本当前循环的次数来
代替。
(5)Random Number:随机数。很简单。在属性设置中可以设置产生随机数的范围
(6)Unique Number:唯一的数。在属性设置中可以设置第一个数以及递增的数的大小。
注意:使用该参数类型必须注意可以接受的最大数。例如:某个文本框能接受的最大数为 99。当使用该参数类型时,设置第一个数为 1,递增的数为 1,但 100 个虚拟用户同时运行时,第 100 个虚拟用户输入的将是 100,这样脚本运行将会出错。
注意:这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为 1。举例说明:假如起始数为 1,递增为 5,那么第一个用户第一次循环取值 1,第二次循环取值 2;第二个用户第一次循环取值为 6,第二次为 7;
依次类推。
(7)Vuser ID:设置比较简单。在实际运行中,LoadRunner 使用该虚拟用户的 ID 来代
替,该 ID 是由 Controller 来控制的。但是在 VuGen 中运行时,Vuser ID 将会是 –1。
(8)File:需要在属性设置中编辑文件,添加内容,也可以从现成的数据库中取数据(下面我们将会介绍)
(9) User Defined Function:从用户开发的 dll 文件提取数据。就目前我认为,这种方式没有必要。VuGen 支持 C 语言的语法,在 VuGen 中重新编写类似的函数应该不难
(10)在 Update Value on 中有以下几个选项:
Each Occurrence:在运行时,每遇到一次该参数,便会取一个新的值
Each iteration:运行时,在每一次循环中都取相同的值
Once:运行时,在每次循环中,该参数只取一次值
五.检查点(Checkpoint)
1.在进行压力测试时,为了检查 Web 服务器返回的网页是否正确,VuGen 允许我们插入
Text/Imag 检查点,这些检查点验证网页上是否存在指定的 Text 或者 Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。
2.VuGen 在测试 Web 时,有两种视图方式:TreeView/Script View。前面我们见到的一直都是 Script View。在插入 Text/Imag 检查点时,我觉得用 TreeView 视图会比较方便。
3.插入检查点的步骤比较简单。添加 Text/Imag 检查点,可以在录制过程中,也可以在录制完成后进行。推荐最好能在录制过程中添加 Text/Imag 检查点。
先在树形菜单中选择需要插入检查点的一项,然后点鼠标右键,选择将检查点插到该操作执行前还是该操作执行后。如果在该操作执行前,则选择“Insert Before”,否则选择“Insert After”。
六.插入函数
VuGen 中可以使用 C 语言中比较标准的函数和数据类型,语法和 C 语言相同。下面简
单介绍一下比较常用的函数和数据类型。
1.控制脚本流程
if { } else { }
for{ }
while{ }
……………
总之 C 语言的控制流程的语句这里都可以直接使用。
2. 字符串函数
由于在 VuGen 脚本中使用最多的还是字符串,所以字符串函数在脚本中使用非常频繁。具体的语法请参考帮助说明。
strcmp 比较两个字符串
strcat 连接两个字符串
strcpy 拷贝字符串
…………… …
注意:在 VuGen 中,以 char声明的字符串是只读的,如果试图给 char类型的字符串赋值的话,编译会通过,但在运行时会产生“Access Violation”的错误。解决这类问题,就是把字符串声明为字符数组,比如 char[100]。
3. 输出函数
输出函数在调试脚本时非常有用。
lr_output_message 输出一条消息
……………… …
4. LoadRunner 提供的标准函数
lr_eval_string 该函数功能是得到参数(参数化输入中)当前的值
exg: lr_output_message(“temp = %s”, lr_eval_string("{WCSParam2}"));
lr_save_string 该函数功能是把一个字符串保存到参数中
exg: lr_save_string(“439”,“WCSParam3”);