Vuser 发生器(Visual User Generator,VuGen),主要通过捕获客户端向服务器发送的HTTP请求,将这些请求录制成脚本,在回放时将捕获的HTTP请求再次发送,以达到模拟客户行为的目的。
  下面具体介绍一下如何使用,篇幅比较长,请耐心看下去:
  脚本录制
  这里以HP自带的在线订票网站进行录制,依次打开:开始|所有程序|HP Loadrunner|Samples|web|HP Tours Web Application(注:打开网站前,要先启动同目录下的Web Server 服务,否则进不了)。
  首先得注册一个账号,才能进行后续的操作。
  注册完后,打开VuGen应用,依次打开:开始|所有程序|HP Loadrunner|Applications|Visual User Generator(如图1所示)。



图1(注:在打开应用过程中如果遇到问题,可以尝试右键‘以管理员身份运行’)

  点击界面中的New Script图标按钮,即创建新脚本,会弹出一个对话框(如图2所示),可以看到loadrunner提供3种选择协议的方式:单协议脚本、多协议脚本和近使用过的协议。


  
图2

  在录制脚本过程中,涉及的关键点是如何选择录制协议,选择的协议将直接影响录制后的脚本是否理想。那到底怎么知道被测对象用的是什么通信协议呢?常用方法有几种:
  1)直接跟开发确认数据通信所采用的协议;
  2)通过概要设计或详细设计手册获知所使用的协议;
  3)使用协议分析工具捕获通信时的数据包并进行分析(注:一定要摒除底层协议,不要被底层协议所迷惑);
  4)根据以往测试经验来判断被测对象所采用的协议,这种方法有时不一定准确。
  那这里顺便贴上常用的协议分类表,仅供参考(如图3所示)。


 
 图3

  这里呢以比较常用的Web(HTTP/HTML)协议为例进行录制。
  VuGen 录制浏览器主要是通过代理的方式来实现的,即以VuGen 作为代理来访问目标服务器,这样可以捕获客户端与服务器之间通过的数据包(默认是使用自带的IE浏览器,使用其他浏览器录制容易出现HTTP请求被丢失的现象,所以尽量使用IE浏览器进行录制)。
  录制时系统弹出一个录制窗口(如图4所示),具体说明如下:


  
图4

  1)application type:应用类型(比如BS或CS);
  2)program to record:录制的程序(即用什么浏览器来录制,前面也提到过,好默认使用自带的IE);
  3)URL:被录制应用的地址;
  4)working directory:存放路径;
  5)record into action:表示将录制的代码放到哪个部分;(注:loadrunner生成的代码由三部分组成,vuser_int,aciton和vuser_end。一般情况下都是将生成的代码放在action部分,因为vuser_int和vuser_end两部分的代码只会执行一次,这样会出现这种问题,客户的并发虚拟用户只执行一次,执行完成一次后再也不执行,这样没有HTTP请求给服务器,也即服务器没有压力)
  6)Record the application startup:表示应用程序一启动,立即开始录制;如果不选,则应用程序启动后,VuGen会弹出一个对话框,并且暂时不会进行录制,当用户操作应用程序到需要录制的地方时,单击record按钮,才开始录制。
  开始录制后,会出现一个工具栏(如图5所示),从左到右依次代表开始录制、停止录制、暂停录制、新建action、在脚本与录制界面之间切换、添加开始事务标识、添加结束事务标识、设置集合点和添加注释。


  
图5

  录制完后,单击'停止录制'按钮结束录制,这时VuGen会自动生成一个脚本。可以看出LR生成的脚本都是由函数组成的(如图6所示)。


  
图6

  recording options 设置
  在进行录制时,首先要对录制的一些一些参数进行设置,只有将这些参数设置好,才能录制并生成需要的脚本。
  首先是recording options设置(如图7所示),需要注意的设置项有recording选项卡,advanced选项卡和correlation选项卡。


  
图7

  1、recording选项卡
  recording level包含两种录制模式:HTML-based script和URL-based script。(如图8所示)


  
图8

  关于HTML-based script脚本方式又有两种:
  1)模拟用户录制行为,即GUI录制,把用户每一步的操作显示出来,后生成的脚本非常直观,并且会将上下文的一些敏感信息记录下来。它创建URL(web_url)、link(web_link)、image(web_image)和提交表单(web_submit_form)。代码如下:
  在录制时只做了两个操作,生成的代码也只有两个函数,也即这种录制模式只录制用户的操作,其他的内容不会被录制,使用的提交信息函数为web_submit_form(),该函数运行时,首先在页面上去查找表单,再提交数据
  友情吐槽一下:用这个模式录制,本来使用的函数应该是web_submit_form()的,但不知道为什么,我的机子录制了很多遍,后生成的都是使用的web_submit_data()函数,所以下面的这段代码是我录制后参照书本所描述的修改了一下得来的。
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
web_submit_form("login.pl", "Snapshot=t5.inf",
ITEMDATA, "Name=username", "Value=test1", ENDITEM,
"Name=password", "Value=test1", ENDITEM, "Name=login.x", "Value=0", ENDITEM,
"Name=login.y", "Value=0", ENDITEM,
LAST);
return 0;
  2)录制所有links、images和URL,但不创建web_link、web_image和提交表单(web_submit_form)。这种录制方式生成的脚本不直观。如下代码:
  同样的提交登录的信息,但使用的是web_submit_data(),该函数是直接向服务器发送要提交的数据的。
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_think_time(10);
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t5.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value=120572.007128392zcAVQccpzVzzzzzHDHcVVpfDfH", ENDITEM,
"Name=username", "Value=test1", ENDITEM,
"Name=password", "Value=test1", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
"Name=login.x", "Value=0", ENDITEM,
"Name=login.y", "Value=0", ENDITEM,
LAST);
return 0;