首页 > 代码库 > LoadRunner用户行为模拟器 《第三篇》
LoadRunner用户行为模拟器 《第三篇》
用户行为模拟器简称VU,VU通过运行VU脚本模拟了用户对软件的操作行为。VU是基于网络协议的。很明显,被测服务器是通过各种各样的网络协议与客户端打交道的。VU要“骗过”被测服务器,当然就要遵守这些协议,按规矩、按步骤来执行动作,否则就会吃“闭门羹”。
基于网络协议的脚本的一个好处是,我们可以使用相对少的硬件资源,来生成大量的虚拟用户负载。相比之下,WinRunner和QTP脚本时基于界面事件的,它在一台主机上同时只能运行一个虚拟用户的脚本,因为一个虚拟用户会占用整个主机的资源。
所以可以有如下结论:
- VU不关心用户在界面发生的事情(如用户鼠标移动、填写WebForm数据)等。
- VU中的操作关联与界面上的操作关联是不一致的。如正常用户的操作是,打开列表页,点击一行进入详细页面。而LoadRunner只记录一个请求,以及这个请求的参数直接进入,对它来说根本没有打开列表页的步骤。
一、录制脚本
VU通过录制用户在客户端软件的操作来直接生成脚本,用户的每个协议级的操作以LoadRunner的API函数方式记录在脚本里。回放脚本的时候,通过执行API函数来模拟最初用户的操作动作。
1、选择协议
协议有好多种,是用哪种协议当时你开发的时候你自然会知道。目前我一般用的都是Web(HTTP/HTML)协议。
当我们试图创建一个新的VUser的时候,就会弹出协议选择对话框。
有两种协议选择方式:单协议模式和多协议模式。
(1)、单协议模式:当用户以单协议录制时,VU只录制在既定协议上的用户操作,在VU中我们可以使用单协议模式选择任何一种协议。
(2)、多协议模式:当用户以多协议录制时,VU录制几个协议上的操作。并不是任意的协议都可以组合成多协议模式。
2、规划脚本结构
在录制时,用户可以选择哪些操作生成脚本在vuser_init、Action和vuser_end中,同时,也可以在录制时随时加入transaction的定义、注释和同步点。VU录制工具条如下所示:
3、HTTP Vuser中的URL mode和HTML mode
在录制之前,我们需要设置录制选项:
在默认情况下,选择“HTML-based script”,说明脚本中采用HTML页面的形式来表示,这种方式的Script脚本容易维护,容易理解,推荐以这种方式录制。
“URL-based script”说明脚本中的表示采用基于URL的方式,所有的HTTP的请求都会被录制下来,单独生成函数,所以URL模式生成的脚本显得有些杂乱。
Action()
{
web_url("Login",
"URL=http://127.0.0.1:9090/Account/Login",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
}
而以HTML模式录制,则生成如下脚本:
Action()
{
web_url("Login",
"URL=http://127.0.0.1:9090/Account/Login",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
web_url("Default.css",
"URL=http://127.0.0.1:9090/Resources/CSS/Default.css",
"Resource=1",
"RecContentType=text/css",
"Referer=http://127.0.0.1:9090/Account/Login",
"Snapshot=t4.inf",
LAST);
web_url("gwu1.jpg",
"URL=http://127.0.0.1:9090/Resources/Images/login/gwu1.jpg",
"Resource=1",
"RecContentType=image/jpeg",
"Referer=http://127.0.0.1:9090/Account/Login",
"Snapshot=t5.inf",
LAST);
... 省略N个
}
是选择HTML还是URL录制,有以下参考原则:
- 基于浏览器的应用程序推荐使用HTML-based script。
- 不是基于浏览器的应用程序推荐使用URL-based script。
- 如果基于浏览器的应用程序中包含了JavaScript并且该脚本向服务器产生了请求,比如DataGrid分页按钮等,也要使用URL-based script方式录制。
- 基于浏览器的应用程序中使用了HTTPS安全协议,使用URL-based script方式录制。
4、查看日志
在录制和回放的时候,VU会分别把发生的事件记录成日志文件,这些日志有利于我们跟踪VU和服务器的交互过程。我们可以通过VU输出窗口观察日志,也可以到脚本目录中直接查看文件。
1、执行日志(Execution Log,新版本是Replay Log)
脚本运行时的输出都记在这个Log里。
“执行日志”中使用了不同颜色的文本。
- 黑色:标准输出信息。
- 红色:标准错误信息。
- 绿色:用引号括起来的文字字符串(例如URL)。
- 蓝色:事务信息(开头、结束、状态和持续时间)。
2、录制脚本(Recording Log)
当录制脚本时,Vugen会拦截Client端(浏览器)与Server端(服务器)之间的对话,并且通通记录下来,产生脚本。在Vugen的Recording Log中,我们可以找到浏览器与服务器之间所有的对话,包含通信内容、日期、事件、浏览器的请求、服务器的响应内容等。脚本和Recording Log最大的差别在于,脚本只记录了Client端要对Server端的请求内容,而Recording Log则是完整记录二者的对话。所以,通过录制日志,我们能够更加清楚地看到客户端与服务器的交互。
3、产生日志(Generation Log)
产生日志记录了脚本录制的设置、网络事件到脚本函数的转化过程。
提示:脚本能正常运行后应禁用日志。因为产生及写入日志需占用一定资源。
二、回放脚本
单击run按钮,或按快捷键“F5”就可以运行脚本。VU脚本运行工具条如下:
录制完成之后,最好先运行一次脚本,因为在跑测试之前必须先确保脚本没有错误。
三、关联
关联的作用是客户端每次的访问,服务器都会有动态的内容产生,如果这个动态内容跟不上,则服务器就报错的情况。如SessionId,假如每次访问,服务器都为其分配一个session号(随机的)导致报错时,此时就要对seesion做关联。
这个看起来好像很难的样子,先跳过, 用到再学。
四、脚本视图和树视图
VU提供两种视图来查看脚本的内容,一个是脚本视图,另一个是基于图标的树视图。
所有类型的Vuser都有文本脚本视图,但是只有特定的Vuser才会有树视图。
1、树视图(Tree View)
Tree View也叫做基于icon的View,也就是说,脚本的每个函数在Tree View中都以一个带有icon的节点来代替。可以点击工具栏=>"Tree"按钮或者在“View”=>“Tree View”,显示VU树视图。
Tree View的好处是使用户更方便地修改脚本,Tree View支持拖拽,用户可以把任意一个节点拖拽到他想要的地方,从而达到修改脚本的目的。用户可以右键单击节点,进行修改/删除当前函数参数属性,增加函数等操作,通过Tree View能够增加LoadRunner提供的部分常用通用函数和协议相关函数。比如Web Service Vuser就不能通过Tree View参数化一些复杂的数据类型,在这种情况下,就需要Script View了。
2、脚本视图(Script View)
在Script View中能够看到一行行的API函数,Script View适合一些高级用户,通过Script View向脚本中增加一些其他的API函数。可以单击工具栏上的"Script"按钮或者在"View"菜单下选择"Script View",显示VU脚本视图。
当用户在Script View中对脚本做了修改之后,Tree View也会做相应的变化。如果脚本有语法错误,Script View将不能转化为Tree View或缩略图。
3、理解Snapshot
napshot,顾名思义,就是快照,代表当前的step,Snapshot显示了客户端执行完当前step后的样子,在Tree View右侧的frame中可以查看Snapshot,在LoadRunner 8.0中,Snapshot包含Page View、Client Request和Server Response。
Snapshot有两种生成方式,一种是在record的时候生成,另一种是在replay的时候生成。可以对比两种方式生成的Snapshot,以发现哪些是动态值,需要参数化。