Loadrunner参数取值规则
VuGen中的参数化设置
在编写脚本进行参数化的时候,设置比较简单,也很容易理解。下面简单来说一下我的理解,在不涉及Controller的前提下,仅在VuGen中迭代时,参数的取值规则。
- 组合方式
Select next row:
- Sequential顺序取;
- Random随机取;
- Unique唯一;
Update value on: - Each iteration每次迭代;
- Each occurrence每次发生;
- Once可理解为第一次取值后就不会再改变了,不管是否发生了迭代,不管迭代了多少次;
先不考虑【When out of values】和【Allocate Vuser values in the Controller】,那就是有9种取值方式;
- 先举例说明仅在VuGen下的取值方式
回放脚本时可以设置迭代次数,在VuGen中迭代,可以理解为只有一个用户重复操作了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;
在loadrunner controller影响下的取值规则
前提:
- 假设脚本中有两处做了{username}参数化;
- 真正使用controller压测时,正常都不会在VuGen中设置迭代次数了;
参数如下:
场景1设置:瞬时启动所有2个vuser、压测时间2分钟、一起结束所有vuser;
当VuGen脚本中设置Sequential或Random时,那么在controller中无论创建了多少个vuser,你都可以理解为每个vuser都会拿到一份参数列表,每个vuser之间互不干扰互不影响。每个vuser都在压测时间内各自迭代,直到压测结束
此时,取值方式的规则如下,ps:【param1,param2】中【】表示同一次迭代,param表示参数化的位置: - 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!!!初学者可能不好理解!!
- 多个用户不再每人一份参数列表了,而是共用一份参数列表,且每个用户间的参数范围不能相同;
- 通过Allocate Vuser value in the Controller选项,确定参数如何分配给每个用户的,有两个选项:
- Automatically allocate block size,此选项仅在Unique & iteration组合下可以选择,意思是自动给Vuser分配参数给每个Vuser,比如此例中6个参数,启动2个用户,如果选择Unique & iteration & Automatically allocate block size的组合,则每个用户分得3个参数,【test01、test02、test03】、【test04、test05、test06】;
- 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数量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)