LoadRunner主要包括三个前台功能组件,分别为VuGen(虚拟用户脚本生成器)、Controller(测试控制器)和Analysis(结果分析器)。系统会自动调用后台功能组件LG(负载生成器)和Proxy(用户代理)来完成性能测试工
作。
客户端通过LG模拟成千上万的用户向服务器进行请求,Agent对服务器进行监视,观察服务器的各项指标的使用情况。
Scenario:场景。所谓场景,是指在每一个测试过程中发生的事件
Vusers:虚拟用户。LoadRunner使用多线程或多进程来模拟用户对应用程序操作时产生的压力。一个场景可能包括多个虚拟用户,甚至成千上万个虚拟用户。
Vuser Script:脚本。用脚本来描述Vuser在场景中执行的动作。
Transactions:事务。事务代表了用户的某个业务过程,需要衡量这些业务过程的性能。
rendezvous :集合。当我们测试多个用户并发时,每个用户执行到该事务脚本的先后顺序是不确定的,所以得到的测试结果也并不是一个完全 并发的极限测试结果。在开始事务之前 ,插入一个“集合点”,那么在多用户执行时,就可以将用户请求停下来,直到用户数量达到满足的条件(默认是100%的用户都到达集合点)。那么,所有的用户都将同时发出接下来的请求。
开发脚本在Agent里,设计测试场景和执行监控场景在Controller里面,分析测试结果在analysis里面。
C:\Program Files (x86)\HP\LoadRunner\WebTours,选择StartServer.bat启动服务。
cgi-bin\users:创建的虚拟用户
logs:存放的http请求
1、启动 Visual User Generator 后,选择新建脚本,因为要测试的是web项目,所以选择协议为WebHTTP/HTML,点击创建后,进入主窗体
2、在解决方案资源管理器中可以看到该脚本的组成部分。简单说明一下:VuGen 中的脚本分为三部分:
vuser_init、vuser_end 和Action。vuser_init用于用户初始化,vuser_end用于用户清理工作。Action用于具体的需要测试的操作。类似于unittest等测试框架。
在重复执行测试脚本时,vuser_init 和vuser_end 中的内容只会执行一次,重复执行的只是Action 中的部
分。
3、选择录制操作,可以开始一次录制操作,在录制中需要填写URL,这里以http://127.0.0.1:1080/WebTours/为例。录制到操作说明是将脚本放置到哪里。在录制中也可以修改脚本放置的地方。 已注册的用户名和密码查看地址:xxx\HP\LoadRunner\WebTours\cgi-bin\users 开始录制中,“立即”默认情况下是选中的,说明应用程序一旦启动,VuGen 就会开始录制脚本;如果没有选中,应用程序启动后,VuGen 出现对话框,待确认后才开始录制。一般默认即可。
4、在页面上有录制选项可以进行一些高级选项的设置,这里一般不需要改动。
5、点击开始录制,loadrunner会自动调用IE,并开始录制操作。这里以注册为例进行录制,录制完毕后,点击停止,录制停止,返回到脚本界面,可以看到已录制的脚本。
录制过程中,在屏幕上会有一个工具条出现。录制提供了暂停、停止、新增操作,增加事务、增加集合点等操作。
当录制完一个基本的用户脚本后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。一般情况下,我们通过以下方法来完善测试脚本。
事务(Transaction):为了衡量服务器的性能,我们需要定义事务。比如:我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner 可以在脚本中插入不限数量的事务。
通过菜单设计—在脚本中插入—开始事务、结束事务来进行事务的添加。
事务的状态默认情况下是 LR_AUTO。一般情况下,我们也不需要修改,除非在手工编写代码时,有可能需要手动设置事务的状态。可以通过步骤导航器来查看步骤的参数选项
插入集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。
注意:集合点经常和事务结合起来使用。集合点只能插入到Action 部分,vuser_init和vuser_end 中不能插入集合点。
在进行压力测试时,为了检查Web 服务器返回的网页是否正确,VuGen 允许我们插入Text 检查点,这些检查点验证网页上是否存在指定的Text,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。检查点的含义和unittest中的断言功能基本上一致。
通过菜单—查看—快照,可以查看到http数据视图,选择检查的文本,选择添加文本检查步骤,即可添加一个检查点。
很多时候,一个项目的请求所以带的参数会来源于前面请求返回的结果,而我们录制的内容,则只是完整地记录当时的请求参数,这通常不是我们想要的。
例如上面的例子中的检查点文本中的test。就是根据输出来显示的,我们可以获取该值来供后续使用。
如果用户在录制脚本过程中,填写提交了一些数据,比如要增加数据库记录。这些操作都被记录到了脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。为了更加真实的模拟实际环境,需要各种各样的输入。
参数化输入是一种不错的方法。
用参数表示用户的脚本有两个优点:
① 可以使脚本的长度变短。
② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。
参数化包含以下两项任务:
① 在脚本中用参数取代常量值。
② 设置参数的属性以及数据源。
参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。
例如在注册的例子中,我们已经注册了test用户,那么再次注册就会失败。也就是说Loadrunner脚本再次运行就会失败。找到以下的代码块,在username中选中“test”字符串点击右键选择“使用参数替换”,就可以进行参数设置。
日期/时间:很简单,在需要输入日期/时间的地方,可以用DateTime 类型来替代。其属性设置也很简单,选择一种格式即可。当然也可以定制格式。
组名:在实际运行中,LoadRunner使用该虚拟用户所在的Vuser Group 来代替。但是在VuGen 中运行时,GroupName将会是None
Load Generator Name:在实际运行中,LoadRunner 使用该虚拟用户所在LoadGenerator 的机器名来代替。
迭代编号:在实际运行中,LoadRunner 使用该测试脚本当前循环的次数来代替。
随机数字:随机数。很简单。在属性设置中可以设置产生随机数的范围
唯一编号:唯一的数。在属性设置中可以设置第一个数以及递增的数的大小(每个Vuser的块大小)。
注意:使用该参数类型必须注意可以接受的最大数。例如:某个文本框能接受的最大数为99。当使用该参数类型时,设置第一个数为1,递增的数为1,但100 个虚拟用户同时运行时,第100 个虚拟用户输入的将是100,这样脚本运行将会出错。
注意:这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为1。举例说明:
假如起始数为1,递增为5,那么第一个用户第一次循环取值1,第二次循环取值2;第二个用户第一次循环取值为6,第二次为7;依次类推。
Vuser ID:设置比较简单。在实际运行中,LoadRunner 使用该虚拟用户的ID 来代替,该ID 是由Controller 来控制的。但是在VuGen 中运行时,Vuser ID 将会是–1。
File:需要在属性设置中编辑文件,添加内容
添入随机数的取值范围为(1-50),选择一种数据格式。
Each Occurrence:在运行时,每遇到一次该参数,便会取一个新的值
Each iteration:运行时,在每一次循环中都取相同的值
Once:运行时,在每次循环中,该参数只取一次值
File等类型中有以下参数:
Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取
Random:在每次循环里随机的读取一个,但是在循环中一直保持不变
Unique :唯一的数。注意:使用该类型必须注意数据表有足够多的数。比如Controller 中设定20 个虚拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。
为了避免不正确的参数导致不可用,在设置后,可以选择“模拟参数”来试运行
VuGen 中可以使用C 语言中比较标准的函数和数据类型,语法和C 语言相同。下面简单介绍一下比较常用的函数和数据类型。
在脚本页面,通过右键-插入-新建步骤可以查看函数列表
if { } else { }
for{ }
while{ }
strcmp 比较两个字符串
strcat 连接两个字符串
strcpy 拷贝字符串
lr_output_message 输出一条消息
lr_eval_string 该函数功能是得到参数(参数化输入中)当前的值
exg: lr_output_message("temp = %s", lr_eval_string("{WCSParam2}"));
lr_save_string 该函数功能是把一个字符串保存到参数中
exg: lr_save_string("439","WCSParam3");
经过以上的各个步骤后,脚本就可以运行了。运行脚本可以通过菜单或者工具栏来操作。
执行“运行”命令后,VuGen 先编译脚本,检查是否有语法等错误。如果有错误,VuGen将会提示错误。双击错误提示,VuGen 能够定位到出现错误的那一行。为了验证脚本的正确性,我们还可以调试脚本,比如在脚本中加断点等。如果编译通过,就会开始运行。然后会出现运行结果。
当完善了测试脚本后,需要对VuGen 的“运行时设置” 进行配置。
在“解决方案资源管理器”视图中选择“运行时设置”,常用的设置内容如下:
1 、常规-其他-错误处理:
一般不需要改动,但是在Controller运行时,可以设置“出现错误时仍继续”,来统计错误率
2、常规-其他-自动事务
当我们手工设置了事务时,建议取消该项,以免Controller运行时事务太多
3、常规-运行逻辑-迭代数
根据需要变动,一般在调试脚本时可以设置为多次迭代
4、常规-日志
在调试阶段可勾选“启动日志记录”,脚本稳定时可取消该项
5、常规-思考时间
忽略时会对服务器造成更大的压力,而增加思考时间可以更好的模拟用户使用
6、 internet协议-首选项-启用图像或文本检查
不勾选“启用图像或文本检查”, web_find和web_image_check设置的检查点在运行时无效
7、工具-选项-脚本-回放
如果勾选“回放期间显示运行时查看器”,则在运行时会启动浏览器