• LoadRunner(7)


    一、参数化策略
      1、Select next row(How? 如何取?)取值方式
        选择下一行
        1)Sequential:顺序的
          每个VU都从第一行开始,顺序依次向下取值;
          数据取完可以从头循环重复使用;
          --每个VU取值序列相同
        2)Unique:唯一的 (VU和VU之间值不重复)
          从第一行,对于VU唯一依次向下取值;
          如果数据不足,需要按照指定策略进行取舍;
          --每个VU取值序列不相同
          举例:目前有10行数据:a1 a2 a3 ... a10,2个VU,每次迭代时更新数据,一共迭代2次(表示需要更新2次)。
          按照SE组合:顺序+每次迭代 VU1(a1, a2) VU2(a1, a2)
          按照UE组合:唯一+每次迭代 VU1(a1, a2) VU2(a3, a4)
        3)Random: 随机取 (更真实效果)
          每个VU都随机获取参数池中数据,值可以重复;
        4)Same line as xxx: 和xxx参数同行取值、策略一致
          比如:password 设置为 Same line as username

      2、Update value on (When? 何时取?)更新时机
        结论:何时更新能够决定每个VU需要取几次数据
        1)Each Iteration: 每次迭代 (默认,最常用)
          脚本Action每迭代一次,需要重新取参数的值;
        2)Each Occurrence: 每次遇到 (不常用,不好控制)
          脚本中参数出现一次,则算遇到一次
        3)Once: 仅取一次
          每个VU仅取值一次,不再改变(从一而终)

      3、When out of values: 当超过值的策略
        前提:使用Unique策略时才有效,考虑值不够用时的策略。
        1)Abort Vuser: 放弃VU VU不再执行脚本,并且报错
          (最常用)
        2)以循环方式继续:循环从第一行开始继续取(重复)
        3)以最后一个值继续:重复取最后一个值(重复)

    二、练习1
      某参数现有备用数据a1 a2 a3 ... a30,使用VuGen完成(只有1VU),脚本迭代3次,默认迭代一次参数只出现一次,完成以下策略组合的结果:
      1)顺序 + 每次迭代:a1 a2 a3
      2)唯一 + 每次迭代:a1 a2 a3
      3)随机 + 每次迭代:a18 a5 a21
      4)顺序 + 每次遇到:a1 a2 a3
      5)唯一 + 每次遇到:a1 a2 a3
      6)随机 + 每次遇到:a6 a30 a8
      7)顺序 + 一次:a1 a1 a1
      8)唯一 + 一次:a1 a1 a1
      9)随机 + 一次:a5 a5 a5

      新建脚本param1,设置一些参数{name}和{pwd},给定数据,指定不同策略进行检验:

        Action.c(6): 用户名:{name},密码:{pwd}
        原样输出表示参数不认识(未定义)
        如何解决?需要在Parameter List中定义(参数池)
        类型 + 数据 + 策略

      将param1备份为param2,外部循环Action迭代改为2次;
      Action代码中增加内循环3次。 for语法
        (好比迭代一次参数遇到3次)
      for循环语法(Java/C/C++):
        之前语句0;
        for(初始化语句1; 循环条件2; 步进语句3) {
          循环体4;
        }
        之后语句5;
      执行顺序:0 1 2 4 3 2 4 3 2 4 3 2为假 5 循环3次

      比如:3次循环
        for(int i=0; i<3; i++){ // 0 1 2
          ...  
        }
        for(int i=0; i<=3; i++){ // 1 2 3
          ...
        }
        for(int i=3; i>=1; i--){ // 3 2 1

        }

    三、练习2
      某参数现有备用数据a1 a2 a3 ... a30,使用VuGen完成(只有1VU),脚本迭代2次,迭代一次参数出现3次,完成以下策略组合的结果:
      1)顺序 + 每次迭代:a1 a1 a1, a2 a2 a2
      2)唯一 + 每次迭代:a1 a1 a1, a2 a2 a2
      3)随机 + 每次迭代:a9 a9 a9, a16 a16 16
      4)顺序 + 每次遇到:a1 a2 a3, a4 a5 a6
      5)唯一 + 每次遇到:a1 a2 a3, a4 a5 a6
        多用户时考虑块大小,VuGen只有1VU,块大小不起作用,象征性写1即可。
        改为:外循环5次,内循环10次
        使用Unique,就要考虑When out of values:
          a) Abort Vuser: 放弃VU 越界会报错Action.c(5): Error
            -- 推荐使用! 保证数据不重复,满足业务需求
          b) 循环继续取: 正常循环取值,不会报错 数据可能重复
          c) 持续最后一个: 持续取值,会报错Action.c(5): Error

      6)随机 + 每次遇到:a15 a1 a6, a9 a1 a19
      7)顺序 + 一次:a1 a1 a1, a1 a1 a1
      8)唯一 + 一次:a1 a1 a1, a1 a1 a1
      9)随机 + 一次:a3 a3 a3, a3 a3 a3

      Action.c(5): Error: Parameter 'name':
      No more unique values for this parameter in table
      没有 更多 唯一 值 针对 参数 name.dat
      'name.dat' [unique range is 1-30].
      VU 被放弃 根据 xxx 策略
      The Vuser is aborted according to "When Out Of Values" policy.

    四、多用户分块的概念 块 Block
      1、使用控制台管理多用户时,使用Unique策略时,首先考虑分块的问题,分块时保证用户数据不重复的关键。
        分块后,每个VU选择自己块内数据,能够保证VU之间不会重复使用数据。 分块--数据的隔离


      2、测试过程中,如果参数池数据不够,场景运行会报错。
        建议:使用Unique策略时,保证数据充足,允许必要的浪费。


      3、块大小:分配给每个VU的数据量;


      4、分块的方式:
        1)自动分块:块大小根据VU的需要自动分配--按需分配
        2)手动分块:块大小可以自己设置
          <1> 刚好够用
          <2> 有所富余--推荐使用
          <3> 有所不足--参考When out of values策略
            每个VU在自己的块内数据进行取舍:
              a. 放弃VU;(推荐) b.循环方式继续; c.持续最后一值

    五、在控制台中查看运行日志(多用户,产生多个日志文件)
      1、打开控制台:加载param1脚本
        指定日志输出的位置:
          Controller -> Results菜单 -> Results Settings 结果设置
          -> 窗口:
            Result Name: res 存放日志的目录名,可以修改
            Directory: C:... 默认长路径,建议改短,自己指定
          -> C: 新建目录 lrlog
          -> 点击Browse -> 指定目录:C:lrlog
          另外,还有两个选项:
            每次执行场景,产生新的日志文件;
            每次执行的结果会覆盖之前的日志文件;(选择)


      2、为了能够生成日志文件,需要设置Run-time Settings:
        -> Log -> Always send message 总是发消息


      3、其它设置:
        VU数量:10
        VU行为:默认初始化、同时启动、运行直到结束
        运行场景,观察C:lrlog目录
        每个VU都会产生一个日志文件:
        param1_1.log .... param1_10.log
        组名_VU的id.log

        重要提示:VuGen修改完数据和策略 -> 编译脚本
        -> 控制台中及时刷新脚本 -> 才可生效

          Insufficient records for parameter 'name' in table to provide the Vuser with unique data
        强调:Unique策略时,数据分配必须要充足,避免报错。

    六、综合练习题
      某参数现有备用数据a1 a2 a3 ... a30,使用Controller设置3个VU运行脚本,脚本迭代4次,默认迭代一次参数只出现一次,完成以下策略组合的结果:
      1)顺序 + 每次迭代:<重要> SE组合
        VU1:a1 a2 a3 a4
        VU2:a1 a2 a3 a4
        VU3:a1 a2 a3 a4
      2)唯一 + 每次迭代:<重要> 默认自动分块 块大小: 4
        VU1:a1 a2 a3 a4
        VU2:a5 a6 a7 a8
        VU3:a9 a10 a11 a12
        自动分块 块大小: 4
          第一块:a1 a2 a3 a4 VU1
          第二块:a5 a6 a7 a8 VU2
          第三块:a9 a10 a11 a12 VU3
      3)随机 + 每次迭代:<重要>
        VU1:a10 a1 a6 a15
        VU2:a3 a6 a12 a21
        VU3:a5 a9 a1 a8
      4)顺序 + 每次遇到:
        VU1:a1 a2 a3 a4
        VU2:a1 a2 a3 a4
        VU3:a1 a2 a3 a4
        如果迭代一次遇到2次:
          VU1:a1 a2 a3 a4 a5 a6 a7 a8
          VU2:a1 a2 a3 a4 a5 a6 a7 a8
          VU3:a1 a2 a3 a4 a5 a6 a7 a8
      5)唯一 + 每次遇到:<重要> 手动分块 块大小:6
        VU1:a1 a2 a3 a4
        VU2:a7 a8 a9 a10
        VU3:a13 a14 a15 a16
        手动分块 块大小:6
          第一块:a1 a2 a3 a4 a5 a6 VU1
          第二块:a7 a8 a9 a10 a11 a12 VU2
          第三块:a13 a14 a15 a16 a17 a18 VU3
      6)随机 + 每次遇到:
        VU1:a6 a3 a19 a2
        VU2:a22 a1 a7 a19
        VU3:a5 a9 a23 a16
      7)顺序 + 一次:<重要>
        VU1:a1 a1 a1 a1
        VU2:a1 a1 a1 a1
        VU3:a1 a1 a1 a1
      8)唯一 + 一次:<重要> 默认自动分块 块大小:1
        VU1:a1 a1 a1 a1 满足VU之间值不重复
        VU2:a2 a2 a2 a2
        VU3:a3 a3 a3 a3
        自动分块 块大小:1
          第一块:a1 VU1
          第二块:a2 VU2
          第三块:a3 VU3
      9)随机 + 一次:<重要>
        VU1:a8 a8 a8 a8
        VU2:a16 a16 a16 a16
        VU3:a3 a3 a3 a3
      10)唯一 + 每次迭代:<重要> 手动分块 块大小:5
        VU1:a1 a2 a3 a4
        VU2:a6 a7 a8 a9
        VU3:a11 a12 a13 a14
        手动分块 块大小:5
          第一块:a1 a2 a3 a4 a5 VU1
          第二块:a6 a7 a8 a9 a10 VU2
          第三块:a11 a12 a13 a14 a15 VU3

        查看多用户执行结果的方法2:VuGen就能模拟
        打开VuGen 使用param1 -> Parameter List
        -> Simulate Parameter... 模拟参数化(多用户时)
        -> 窗口:
          Vusers: Number of Vuser: 3
          Scenario run mode: 场景运行模式
          Run until completion: 运行直到结束(取决于迭代次数)
          Number of iteration to run: 4 迭代4次
        -> 点击Simulate 模拟

        对比两种方法:
          方法1:优点:通用,获取运行的日志文件
            缺点:配置过程比较繁琐
          方法2:优点:配置非常方便
            缺点:每次遇到时无法模拟(用得不多)
            无法记录日志文件

        以上参数类型:File类型 使用自定义文件保存参数池数据
        实际项目中常用的组合:
          1)SE组合:顺序 + 每次迭代
            Sequential + Each Iteraction 数据可重复
          2)UEA组合:唯一 + 每次迭代 + 放弃VU 数据不重复
            Unique + Each Iteraction + Abort Vuser
          3)RE组合:随机 + 每次迭代 数据更随意,可重复
            Random + Each Iteraction

    七、其它参数类型
      1、Date/Time 日期/时间
        用途:脚本中需要使用日期数据时,获取当前系统时间,使用不同日期格式表示。
          to_char date -> char 提取关心的日期信息
          to_date char -> date 生成date数据 入库
        计算机中保存日期数据的本质:长整数-毫秒数
          从1970年1月1日0点 到 某一时刻的毫秒数
            128639837868
            128639837869
        计算机有算法(历法)将该值推算出所有的日期信息:
          世纪、年、月、日、时、分、秒、毫秒

        将param1另存为 param3
        需求:获取以下格式的当前系统时间数据
          举例 格式字符串
            04/21/2017 %m/%d/%Y
            20170421 %Y%m%d
            2017-04-21 16:26:18 %Y-%m-%d %H:%M:%S

        说明:Date/Time类型适合获取不同格式的当前系统时间;
          File类型可以自己填写某个具体时间。
          2008-08-08 20:08:08

      2、Iteration Number:迭代编号
        用途:获取一组有序的递增的值
        格式:%d
          %01d
          ...
          %05d 具有5位数值,不够的使用0补齐
          00001 00002 ... 00100 01000 ...

      3、Random Number:随机编号
        用途:工具根据指定的规则、范围自动生成一组随机数
        设置:Min: 1 Max: 100 %06lu
          表示6位 1~100随机数 不够0填补
          比如 000001 000100

        UEA: 唯一+每次迭代+放弃VU
        版本1:File类型,数据由自己指定
        版本2:Unique Number类型,数据由工具规则产生

      4、Unique Number: 唯一编号 (UEA版本2) 重点
        用途:根据指定的规则自动为不同VU生成一组唯一的编号
        原理:分块、块大小
        具体配置:
          <1> Start: 1 数据起始值 下一次:1001 2001 ...
          <2> Block size per VU: 100 块大小
            10VU,使用UEA版本2,脚本迭代80次
            VU1: 1~100 VU2: 101~200 .. VU10: 901~1000
          <3> Sample: Hello00001 数值举例
          <4> Number: Hello%05d 数据格式
          <5> Update value: Each iteration 更新时机 每次迭代
          <6> When out of values: Abort Vuser 放弃VU

        技术(技术专家) + 业务(领域专家):
        手机号:138-1181-0086
        运营商 地区 不同用户

        项目案例:针对某电信项目中账户注册功能进行性能测试,其中需要对脚本中的手机号进行参数化,要求手机号不能重复使用。需要1000VU在线执行注册功能,持续运行1小时,已知1个小时内平均每个VU执行437次注册,请提供参数化具体策略。手机号使用138开头。

        思路:不重复 - 唯一 UEA 版本1 或 版本2?
          File Unique Number

        将param3备份为testMobile
        用户id: {uid} 手机号:{number}
        uid的策略:Vuser ID VU的id 格式:%05s
        number的策略:UEA版本2 Unique Number
        具体配置:
          <1> Start: 1 数据起始值 下一次:500001 1000001..
          <2> Block size per VU: 500 块大小
            既要让数据充足,又要便于后续的计算
            VU1: 1~500 VU2: 501~1000 ....
            1000个VU分配了:1000 * 500 = 500000
          <3> Sample: 13800000001 数值举例
          <4> Number: 138%08d 数据格式
          <5> Update value: Each iteration 更新时机 每次迭代
          <6> When out of values: Abort Vuser 放弃VU

        将脚本载入控制台,设置场景:
          1)Run-time Settings:
            <1> 迭代次数:430 (不超过500)
            <2> Pacing: 没有要求
            <3> Log: 选择Always send message 能生成日志文件
            <4> VU模拟:使用线程方式--省资源
          2)Results Settings: 指定日志输出目录 C:lrlog es1
          3)设置1000VU
          4)VU行为:默认初始化、同时加载、运行直到结束
            -> 运行场景

    归纳最常用的策略组合: 着重说明其项目中应用场合
      1)SE组合: 顺序+每次迭代 最常用
      2)UEA组合:唯一+每次迭代+放弃VU 数据唯一时使用
        关键:分块 块大小
        版本1:File类型 数据由自己填写(工作量大)
        版本2:Unique Number类型 数据由规则产生
      3)RE组合:随机 + 每次迭代 用户访问具有随机性

  • 相关阅读:
    MessageFormat使用记录
    在IDEA中使用MyBatis Generator逆向工程生成代码
    mybatis报错invalid types () or values ()解决方法
    关于jrebel碰到的一次问题记录
    I/O限制异步操作
    线程基础和异步执行计算限制
    模板方法模式(Head first 设计模式——7)
    适配器模式和外观模式(head first设计模式——6)
    命令模式(head first 设计模式5)
    工厂模式——(Head first设计模式4)
  • 原文地址:https://www.cnblogs.com/KalosOwen/p/8982096.html
Copyright © 2020-2023  润新知