一、VuGen录制工具栏web
二、VuGen录制脚本浏览器
(1)录制标签(Recording)
默认选择基于HTML的脚本录制格式,在HTML的高级中默认为第一种,描述用户操做的脚本(A script describing user actions)
而在实际应用中,描述用户操做的脚本虽然便于理解,但每段函数的依赖性太强,脚本灵活度不够。而基于URL的脚本录制(URL-Based script)分解了脚本中的每一个细节,不便于业务理解。咱们常常选择的录制方式是基于HTML的脚本录制格式中的第二种,仅包含明确URL的脚本类型(A script containing explicit URLs only)。服务器
三、三种录制脚本的差别网络
第一种:基于HTML,以描述用户操做的方式录制脚本,录制的脚本最为简洁,站在用户视角易于理解。并发
第二种:基于HTML,以URL的方式录制脚本,这种方式录制的脚本,函数都自带URL地址,脚本相对独立和灵活,即便注释掉其中的某一段也能够正常运行,是脚本录制中最多见的录制方式。dom
第三种:基于URL的脚本,该录制的脚本信息量要大不少,便于理解操做细节,但可阅读性相对较弱,适合分解步骤时使用。函数
四、VuGen脚本建立工具
(2)HTTP属性高级(HTTP Properties → Advanced)
为避免脚本在中文环境下出现乱码,须要在复选框勾选支持的字符集UTF-8性能
2.“runtime Settings(F4)”运行时设置选项学习
Run Logic运行逻辑(General → Run Logic)
用于设置当前脚本的迭代次数(也叫循环次数)。例如,设置两次迭代,Action中的脚本将被执行2次
迭代次数不会影响到vuser_init,以及vuser_end,多数状况下咱们会把脚本放入Action中方便迭代设置。
(4)迭代加强了脚本的灵活性,但有时并不是全部的Action脚本都须要迭代,例如,想要实现1次注册,2次登陆的检查就须要引入Block块的概念。
(5) Run Logic运行逻辑(General -> Log)
在VuGen脚本运行时为了更好地了解脚本执行状况,通常会选择查看扩展日志
【特别说明】
扩展日志通常是在单脚本运行时设置,在多脚本运行的Controller中,大多选择标准日志。
(6) Run Logic运行逻辑(General ->Think Time)
思考时间指的是脚本录制过程当中产生的用户停顿时间,是用户正常访问的体现。但在单脚本运行的VuGen中,默认选择忽略思考时间(Ignore think time)
【特别说明】:在Controller中的并发操做下,通常选择使用录制思考时间的随机百分比(use random percentage of recorded think time),目的是为了更真实地模拟用户行为。
(7) Run Logic运行逻辑(General ->Think Time)补充
一、Ignore think time(忽略思考时间):忽略录制的思考时间;回放脚本时忽略全部Lr_think_time函数。
二、 Replay think time As recorded
回放期间,使用Lr_think_time函数中显示的参数。例如,Lr_think_time(10)等待10秒。按照;录制实际时间。
三、 Mutiply recordedthink time by
回放期间,使用录制的思考时间的倍数。这能够增长或减小回放期间应用的思考时间。例如,若是录制了4秒的思考时间,能够指示Vuser将该值乘以2,获得总数8秒。要将思考时间缩短为2秒,能够将录制的时间乘以0.5。
四、 Use random percentageof recorded think time
使用录制时间的随机百分比。能够经过指定思考时间的范围来设置思考时间值的范围。例如,若是思考时间参数为4,而且指定最小值喂50%,最大值为150%,则最短的思考时间能够为2(50%),最大值为6(150%)。
五、 Limit thinktime to
为think time设置一个上限,无论上面如何设置,执行的时候,取值都不会超过这个上限。
(8) Run Logic运行逻辑(Browser->Browser Emulation)
LoadRunner回放脚本默认采用IE浏览器,若是想要更改回放脚本的浏览器能够在该页面进行操做。
总结
一、脚本录制方式的选择不一样,对脚本的阅读性将产生重大影响,每次录制脚本须要检查,“Recording Options”下,HTML的脚本录制格式是否选择了仅包含明确URL的脚本类型(script containing explicit URLs only)。
二、 VuGen不只仅是录制脚本,还须要考虑对脚本的各种设置,而VuGen是单脚本运行,在设置上Controller的多脚本仿真并不彻底一致,后续执行期间须要多加注意。
五、脚本优化之参数化
成功录制了一个名为“signup”的注册脚本,在脚本回放中咱们手动将用户名改成了“tester002”。性能测试的目的是为了模拟大量的并发操做,看系统可否正常处理,咱们不能老是注册“tester002”,实践告诉咱们这是不容许的,而手动修改的办法并不符合实际须要,因此咱们须要引入参数化的概念来解决以上难题。
参数化的目的是模拟真实的用户操做和建立现实的结果,就算系统不对用户名进行注册限制,那么在现实的场景中,也不可能出现所有注册同一个用户名的状况,除非有提早告知或借助神力感应。
当咱们利用VuGen生成Vuser Script,脚本中的数据是固定不变的,只有借助参数化手段才能模拟真实用户场景,以百度为例,当录制脚本的时候在百度中输入“软件测试”做为搜索条件
录制的脚本,每次运行都会输入同一组数据“软件测试”,而实际用户的输入千差万别,就算是同一个用户也会有不一样的搜索需求,因此该输入条件就是咱们须要参数化的对象。
步骤1:首先肯定脚本中须要被参数化的数据。数据依实际状况多是一个,也多是多个。
步骤2:选中数据,鼠标右键选择替换为参数“Replace with Parameter”->“Create New Parameter”,在弹出的对话框中选择参数类型,并对参数命名。参数的命名必定要便于理解,一眼就能看出该参数的用途,不至于同其余参数混为一谈。
步骤3:选中数据,鼠标右键查看参数列表“Replace with Parameter”-> “Parameter List”中设置参数的取值和参数的更新方式。
【特别说明】:参数的更新方式由两部分组成“Select next row”和“Update Values on”,每一个部分都有3个选项,理论上共有九种组合。
理解了参数化的基本原理,下面咱们尝试对注册脚本“signup”进行参数化,参数化要求将用户名和密码进行惟一性匹配。用户名:X0001;X0002;X0003;X0004密码0001;0002;0003;0004
填写好参数名称,并选择File类型后系统 会弹出提示“你是否想用参数替换该字符串的全部出现位置?”的对话框。
因username在该脚本中只出现了一次,能够选择“No”,而password在该脚本中会出现两次,能够选择“Yes”,在实际项目中处于谨慎咱们最好选择“No”,并自行检查脚本对应字段。
进入参数列表,设置参数的取值和参数的更新方式,选中参数点鼠标右键进入“Parameter Properties…”窗口。
参数设置有四种方式。
第一种:以在页面中直接添加行(Add Row)或列(Add Column)的方式实现;
第二种:选中用记事本编辑,单击参数设置区域左下角“Edit with Notepad”按钮;
第三种:选择导入参数,单击参数设置区域左下角“Import Parameter”按钮;
第四种:选择模拟参数,单击参数设置区域右下角“Simulate Parameter”按钮。
【特别说明】:在平常参数设置中,第一种参数添加方式须要逐个添加,用起来相对繁琐;第二种方式最为直观,使用率最高;第三种则是从外部文件导入,数据之间的格式要求比较严格,使用时要特别注意;第四种模拟数据用于判断参数取值方式是否符合预期。
列的取值(Select column):说明参数取值的位置,从哪一列进行取值,取值方式分两种,按编号取值(By number),或者按名称取值(By name)。
文件格式(File format):默认以“,”逗号做为数据的分隔符,也可选择其余分隔符(不推荐更改)。
取值方式,选择下一行(Select next row),包括三个固定选项。
(1)Sequential:顺序取值,表示此参数从第一行开始取值,依次序取后面的每一行。
(2)Random:随机取值,表示每次参数取值都是随机取值,有重复的可能。
(3)Unique:惟一取值,按Vuser分配的参数要求和自身的取值规则进行取值。
取值方式,更新值的时间(Update Values on),也包括三个固定选项。
(1)Each iteration:每次循环取新值,表示该参数在同一个脚本中取相同的值;
(2)Each occurrence:每次遇到就取新值,表示该参数在同一个脚本中若是出现两次或两次以上都会按照选择下一行的方式从新取值;
(3)Once:一次取值,不管参数出现几回,按照选择下一行的方式,取一次便可。
经过观察,若是在signup的脚本中,username/password参数,选择下一行的取值方式选择Random,更新值的时间选择Each iteration,那么最终username和password的对应关系将不复存在。
取值方式的多样化是LoadRunner的重要特征,如何才能让username和password的对应关系不受取值方式的制约,修改password参数属性的设置,让username和password来自于同一个数据文件。
首先修改File的数据来源,password.dat->username.dat,而后在新的数据文件下增长password的列名。
而后以记事本的方式(Edit with Notepad)打开数据文件,增长password列信息,注意两个字段经过“,”逗号间隔。
最后只要将password列的取值方式改成“Same line as username”,这样不管username按什么样的方式取值对应的password都不会产生混乱
参数化组合方式
为加强脚本的业务仿真度,在实际项目中常常用到Sequential/Random/Unique+Each iteration、Sequential/Random/Unique+Each occurrence的取值组合
首先建立个空脚本,使用lr_eval_string函数尝试几种取值方式的组合用法。
Lr_eval_string函数,表示以字符串的形式返回参数的当前取值。
脚本一:用户设置Vuser=1个,参数设置{parametest}取值为A,B,C,D,E,运行时设置Run Logic迭代=3次,脚本以下。
在运行脚本时日志部分勾选“参数替换类型”的扩展日志。
lr_eval_string(“username”)
参数化组合方式
(1)Sequential+Each interation:
(2)Sequential+Each occurrence:
(3)Sequential+Unique:
(4)Random+Each interation:
(5)Random+Each occurrence:
(6)Ramdom+Unique:
(7)Unique+Each interation:
(8)Unique+Each occurrence:
(9)Unique+once:
六、脚本优化之事务+检查点
实际事务包括如下几个部分
一、Wasted Time,脚本录制过程当中,自动插入所花费的时间;脚本录制后,手工编码输入执行所花费的时间。
二、函数自身所消耗的时间,包括lr_start_transation和lr_end_trasnsation函数。
三、Think Time,用于模拟用户操做步骤之间延迟时间的一种技术手段,在录制时,系统会自动生成lr_think_time()函数,单位为秒。
四、响应时间=网络+服务器处理时间
在事务的时间计算中会自动排除第一部分和第二部分的时间,而第三部分的时间会在事务结果中单独统计出来,只要作一下减法也能排除。因此事务针对要度量的时间依然是响应时间。
添加事务的三种方式
一、对脚本彻底不熟悉状况下,录制工具栏添加。
二、对脚本较为熟悉,通常都是在录制结束后添加事务。
三、最后一种就是纯手工编码添加事务命令,此方法的效果和前面俩种是一致的。
事务的函数语法以下所示:
int lr_start_transacion(char *transaction_name);
int lr_end_transacion(char *transaction_name,int status);
其中lr_end_transaction函数的int status有4种状态。
一、LR_AUTO说明LR自动根据规则来判断状态,结果为PASS/FAIL/STOP。
二、LR_PASS说明系统作了正确的事,并记录下了对应的时间(响应时间)。
三、LR_FAIL说明事务失败,没有达到脚本应该有的效果,获得的时间不是正确操做的时间(后 期统计中将被独立统计)。
四、LR_STOP说明事务被中止。
若是想快速知道脚本回放成功仍是失败,就要用到web_reg_find()的检查点函数。
检查点能够单独判断页面操做状况,但一般会同事务一块儿使用,用于判断事务时间是不是咱们想要的正确时间。
【特别说明】:若是在录制时插入事务,生成的事务段脚本将包含思考时间,也就是说lr_think_time()时间将被计算在事务内,回放脚本前在Replay->Runtime Settings中将Think time改成Replay think time as recorded(按录制参考回放思考时间)
检查点的位置一般是放在事务段的内部,这样便于理解该检查点的做用,检查点函数自身所消耗的时间会被事务自动排除。
七、脚本优化之集合点+思考时间
若是想要实现10位已注册用户,同时进入Web Tours页面,在同一秒单击“Login”按钮。从功能参数角度来看,须要找10名用户同时数1,2,3点击登陆。若是人数上升到500人,那就是不容易完成的任务了。
在LR12中集合点的使用分为俩个部分
步骤1:在VuGen中肯定并发操做步骤,添加集合点。集合点函数lr_rendezvous(char *rendezvous_name),能够在录制脚本时添加,也能够在录制完成后经过鼠标右键插入。
【特别说明】:集合点只能在Action中添加,添加后不会对VuGen脚本运行产生实质影响,真正影响实在Controller中体现的。
步骤2:在Controller并发操做以前,设置集合点策略。
集合点策略有如下三种。
第一种策略:Release when X% of all Vusers arriver at the rendezvous,当百分之X的Vuser(占总数)到达集合点后释放全部用户。
第二种策略:Release when X% of all running Vusers arriver at the rendezvous(默认选项),百分之X的Vuser(占运行的总数)到达集合点后释放全部用户。
第三种策略: Release when X of Vusers arriver at the rendezvous,当指定的X个Vuser到达集合点后释放全部用户。
举例:50人参加登山活动,参加人员5人一组进行审核,每10分钟完成一组人员资格审核,而后按指定路线进行爬山。
第一种策略:当50名人员所有审核完成后你们一块儿出发爬山。
第二种策略:当第一组(5名)爬山人员审核后就能够出发,不用等待后续小组审核。
第三种策略:按指定人数进行爬山。
【特别说明】:从并发效果角度来说,第一种策略效果最明显;但从仿真角度来说,第二种策略更符合用户的成长方式;第三种是按Vusers的数量,用的相对较少。
【特别说明】:集合点插入位置必定是在事务以外,不然事务的时间统计会把集合等待时间也算进去,这不符合实际状况。
在VuGen的Runtime Settings中,思考时间默认是被忽略的,这符合单脚本调试的须要。但在Controller中要模拟真实用户场景的并发 行为。系统会自动将思考时间设置为“As Recorded”按录制的实际时间。为了实现更仿真通常会选择使用随机百分比模式