Loadrunner参数取值规则

VuGen中的参数化设置

在编写脚本进行参数化的时候,设置比较简单,也很容易理解。下面简单来说一下我的理解,在不涉及Controller的前提下,仅在VuGen中迭代时,参数的取值规则。

  1. 组合方式
    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种取值方式;
  1. 先举例说明仅在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!!!初学者可能不好理解!!
  1. 多个用户不再每人一份参数列表了,而是共用一份参数列表,且每个用户间的参数范围不能相同;
  2. 通过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,这个就是自定义分配了。
  3. 如果此例中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数量。

posted @   梁伯熹  阅读(393)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
点击右上角即可分享
微信分享提示