以下内容对loadrunner进行一个初识,让之后运用更加熟练,咱们这里用的是loadrunner自带的WebTours平台,他是不含数据库的。
- loadrunner的录制方式有两种,如下图所示,1:基于HTML方式(只针对鼠标和键盘事件,录制的文本比较纯净,不需要做过多筛选。)2:基于URL方式(会录制全部内容,包括页面有广告内容之类的)。两种方式需要根据实际工作需求进行选择:
- 选择支持的字符集方式为UTF-8:
当第一次脚本跑出来后进行脚本的升级维护的一些操作如下,包括参数化设置:
参数化的方式
其实参数化的方式有很多种,这里简述自己常用的方式。其实方式略有不同,但其结果都是将数据添加进来。
1、编辑数据
菜单【Vuser】—【Parameter List…】,点击new就会创建出一个参数NewParam。创建后,点击Create Table 会出现表格,在表格,再次点击【Edit with Notepad】 ,然后会打开一个记事本,我们可以对记事本进行添加数据。
2、添加dat数据文件
点击File path输入框后面的“Browse…”按钮,找到本地的txt数据文件(记住这个txt文件保存后要修改成dat文件,否则无法找到),进行添加就可以了。
添加后的数据展示
需要注意的是,文件里面的数据不要乱写,每条数据一行,不然会读取有误。这个文件如果需要构造大量的数据,可以用表格或者Python自动化写入文件的方式进行操作。在记事本中编辑参数数据时,数据文件一定要以一个空行结束,否则,最后一行输入的数据不会被参数所使用(也有可能会报错)。表格上最多展示一百条数据,超过一百条就看不到了(数据还在,只是看不到)。
参数化的方法
选中要参数化的内容。
注:Parameter name默认会显示NewParam,如果已经有参数化,则需要在下拉按钮进行选择已参数化的Parameter name
方法一,右键参数—【Replace with a new parameter】
方法二,菜单【insert】----【new Parameter…】
两个方法的框都是一样的
想进行详细设置的就点击上图弹出框右下角的Properties…(Parameter Properties),就会弹出以下这个框框
Parameter Properties (参数属性对话框)----我们的参数化设置就通过这个对话框完成
数据配置与更新方式(迭代配置与规则)
脚本设置完参数化,脚本运行的每一遍所取的参数化的值都不一样,那么这个值按照个什么情况来取呢?会有很多种方式
Select next row【选择下一行】:
①顺序(Sequential):按照参数化的数据顺序,一个一个的来取。
②随机(Random):参数化中的数据,每次随机的从中抽取数据。
③唯一(Unique):为每个虚拟用户分配一条唯一的数据。
①每次迭代(Each iteration) :每次迭代时取新的值,假如50个用户都取第一条数据,称为一次迭代;完了50个用户都取第二条数据,后面以此类推。
②每次出现(Each occurrence):每次参数时取新的值,这里强调前后两次取值不能相同。
③只取一次(once) :参数化中的数据,一条数据只能被抽取一次。(如果数据轮次完,脚本还在运行将会报错)。
注:先不考虑【When out of values】和【Allocate Vuser values in the Controller】,那就是有9种取值方式;
举例说明下仅在VuGen下的取值方式:回放脚本时可以设置迭代次数,在VuGen中迭代(迭代次数设置:菜单【Vuser】—【Run-time Settings】—【General】中的Run Logic,Number of lterations设置迭代次数),可以理解为只有一个用户重复操作了N次(N表示你设置的迭代次数)。假设设置迭代次数为3次,参数如下:
此时,取值方式的规则如下:
- Sequential & Each iteration 按照参数列表顺序取值,只有每发生一次迭代才去顺序获取新值。取值结果为:test01、test02、test03
- Sequential & Each occurrence 假设你的脚本中,有多处设置了{username}参数化,那么此时在同一次迭代中,每遇见一处参数化{username}就会获取新值,且是按照参数列表顺序获取的; 假如你的脚本中,设置了2处{username}参数化,依然设置迭代3次,那么取值结果就是: 第一次迭代:test01、test02; 第二次迭代:test03、test04; 第三次迭代:test05、test06;
- Sequential & Once 假如你的脚本中,设置了2处{username}参数化,依然设置迭代3次,那么取值结果就是第一次取得值,之后不会在改变! 第一次迭代:test01、test01; 第二次迭代:test01、test01; 第三次迭代:test01、test01;
- Random & Each iteration 设置迭代三次(未作特殊说明都视为设置3次迭代) 按照参数列表顺序取值,只有每发生一次迭代才去顺序获取新值。取值结果随机,三次迭代的取值结果有可能【test01、test02、test03】、有可能【test01、test02、test01】、有可能【test01、test01、test01】
- Random & Each occurrence 假设你的脚本中,有多处设置了{username}参数化,那么此时在同一次迭代中,每遇见一处参数化{username}就会获取新值,且是按照参数列表顺序获取的; 假如你的脚本中,设置了2处{username}参数化,依然设置迭代3次,那么取值结果随机: 有可能第一次迭代:test01、test04; 有可能第二次迭代:test02、test01; 有可能第三次迭代:test02、test02;
- Random & Once 假设你的脚本中,有多处设置了{username}参数化,那么此时在同一次迭代中,每遇见一处参数化{username}就会获取新值,且是按照参数列表顺序获取的; 假如你的脚本中,设置了2处{username}参数化,依然设置迭代3次,那么取值结果取决于第一次随机取得值 假如第一次迭代、第一处参数化随机取值为 test02,那么之后的取值都是一样的 第一次迭代:test02、test02; 第二次迭代:test02、test02; 第三次迭代:test02、test02;
- Unique & Each iteration 设置迭代三次(未作特殊说明都视为设置3次迭代) 按照参数列表顺序取值,只有每发生一次迭代才去顺序获取新值。三次迭代的取值结果:test01、test02、test03;
- Unique & Each occurrence 假设你的脚本中,有多处设置了{username}参数化,那么此时在同一次迭代中,每遇见一处参数化{username}就会获取新值,且是按照参数列表顺序获取的; 假如你的脚本中,设置了2处{username}参数化,依然设置迭代3次,那么取值结果: 有可能第一次迭代:test01、test02; 有可能第二次迭代:test03、test04; 有可能第三次迭代:test05、test06;
- Unique & Once 假设你的脚本中,有多处设置了{username}参数化,那么此时在同一次迭代中,每遇见一处参数化{username}就会获取新值,且是按照参数列表顺序获取的; 假如你的脚本中,设置了2处{username}参数化,依然设置迭代3次,那么取值结果为: 第一次迭代:test01、test01; 第二次迭代:test01、test01; 第三次迭代:test01、test01。
参考地址:https://blog.csdn.net/gaofengyan/article/details/90903814
补充:在loadrunner controller影响下的取值规则
前提:
- 假设脚本中有两处做了{username}参数化;
- 真正使用controller压测时,正常都不会在VuGen中设置迭代次数了; 参数如下: 场景1设置:瞬时启动所有2个vuser、压测时间2分钟、一起结束所有vuser;当VuGen脚本中设置Sequential或Random时,那么在controller中无论创建了多少个vuser,你都可以理解为每个vuser都会拿到一份参数列表,每个vuser之间互不干扰互不影响。每个vuser都在压测时间内各自迭代,直到压测结束 举个栗子:即每个人都会拿到同一份数据,A跑test01,test02,B也跑test01,test02 此时,取值方式的规则如下:
- Sequential & Each iteration 按照参数列表顺序取值,只有每发生一次迭代才去顺序获取新值。 vuser1 取值结果为:【test01、test01】、【test02、test02】、【test03、test03】、【test04、test04】、【test05、test05】、【test06、test06】、【test01、test01】、【test02、test02】…循环下去; vuser2 取值结果为:【test01、test01】、【test02、test02】、【test03、test03】、【test04、test04】、【test05、test05】、【test06、test06】、【test01、test01】、【test02、test02】…循环下去;
- Sequential & Each occurrence 假设你的脚本中,有多处设置了{username}参数化,那么此时在同一次迭代中,每遇见一处参数化{username}就会获取新值,且是按照参数列表顺序获取的; 假如你的脚本中,设置了2处{username}参数化: vuser1 取值结果为:【test01、test02】、【test03、test04】、【test05、test06】、【test01、test02】…循环下去; vuser2 取值结果为:【test01、test02】、【test03、test04】、【test05、test06】、【test01、test02】…循环下去;
- Sequential & Once 假如你的脚本中,设置了2处{username}参数化,那么取值结果就是第一次取得值,之后不会在改变! vuser1 取值结果为:【test01、test01】、【test01、test01】、【test01、test01】、【test01、test01】…循环下去; vuser2 取值结果为:【test01、test01】、【test01、test01】、【test01、test01】、【test01、test01】…循环下去; Random和Sequentail一样的逻辑,只不过是取值是随机的!重点是Unique!!!
- 多个用户不再每人一份参数列表了,而是共用一份参数列表,且每个用户间的参数范围不能相同; 举个栗子:即每个人只能共享同一份数据,A跑完test01,test02,B就不能跑test01,test02,只能选test03和test04去跑
- 通过Allocate Vuser value in the Controller选项,确定参数如何分配给每个用户的,有两个选项: (1)Automatically allocate block size,此选项仅在Unique & iteration组合下可以选择,意思是自动给Vuser分配参数给每个Vuser,比如此例中6个参数,启动2个用户,如果选择Unique & iteration & Automatically allocate block size的组合,则每个用户分得3个参数,【test01、test02、test03】、【test04、test05、test06】; (2)Allocate ____values for each Vuser,这个就是自定义分配了。
- 如果此例中6个参数,但我设置7个Vuser,那么controller也将只启动6个vuser,会报错一个vuser,因为它没有分到参数,而且成功启动的那6个vuser将平分6个参数;
Unique的的作用是将参数分给多个压测用户,使得每个用户间拿到唯一的参数范围。
至于每个用户在拿到属于自己的参数范围后怎么用,那就是以下的几种组合了:
前提:依然假设6个参数,启动2个用户,压测2分钟;
Unique & iteration & Automatically allocate block size,则:
vuser1 获得的参数范围是:【test01、test02、test03】;
vuser2 获得的参数范围是:【test04、test05、test06】;
此时when out of values会点亮,它又有三个选项,那它是什么意思呢?
它的意思是:举个例子,假如你这个脚本15s就能跑完一次,那么压测2min,不间断的跑,你能跑8次,但是每个vuser就分到了3个参数,(拿vuser1举例)当vuer1第三次迭代时取的是test03(vuser2跑到第三次时取的test06),当到进行第4次迭代时,参数不够了那怎么办呢?此时这个选项就是干这个的,为你定制规则,它有三个选项,即:
- abort user 终止,说白了就是参数不够就报错了
- continue in a cyclic manner 在各自的参数范围内循环取值,(即vuser1在test01、test02、test03循环取值,vuer2在test04、test05、test06循环取值)有人会问unique不是唯一吗?这么取值不久重复了么,不好意思你理解错了,unique的意思是每个用户间取值唯一,没说同一个用户的不同迭代取值唯一。
- continue with last value 就是字面意思,参数不够时,一直用各自参数范围内的最后一个参数;
当Unique & Each occurrence时,只能选择Allocate ____values for each Vuser了,其余的逻辑都一样。
当Unique & Once时,说白了,在参数满足的情况下,每个用户只取一个,每个用户在压测时间内都只会用一个参数进行迭代,直至结束。如此例6个参数,压测2分钟,假如我启动了6个vuser,则每个vuser得到一个参数,vuser1取得test01,持续迭代2分钟,并且只用这个test01。假如我设置7个vuser,启动后你会发现实际只启动了6个vuser,报错了一个,因为参数不够分了。所以你的参数的数量最好不小于并发vuser数量。
版权归原作者 嚯呀? 所有, 如有侵权,请联系我们删除。