一、LoadRunner工具的组成
  1、VuGen 虚拟用户脚本生成器
    脚本好比:武器 VuGen好比:兵工厂 VU好比:士兵


  2、Controller 压力调度控制台 好比:总指挥部


  3、Analysis 压力结果分析器 好比:军情分析部门


  4、Load Generator 负载生成器/压力产生器
    好比:总指挥部指挥下的作战部队 VU好比士兵
    原理:就是使用一台物理机,使用其性能生成大量的VU产生负载(压力)。 通过进程或线程模拟
    比如:一个部队支持2000人,如果需要10000人?
    方法1:找性能更好的测试机,起更多VU;
    方法2:联机测试-使用多台测试机的性能联合产生VU。
    如果不用联机测试,如何起更多的VU?
      使用配置更高的测试机
    如何搭建性能测试环境?

      

      思路:涉及面多(硬件、软件、架构...),整个团队共同讨论的问题。具体问题具体分析--看需求


  5、Agent 代理程序 好比:通讯兵
    原理:Agent进程默认开启,部署在不同的测试机,协调得到步调一致的VU.
    状态:默认开启,如果关闭,如何打开?
      开始 -> 所有程序 -> HP LoadRunner
      -> Advanced Settings 高级设置
      -> LoadRunner Agent Process
    结论:如果想让某台测试机参与联机测试,至少需要安装Load Generator,并且启动Agent进程才可收到控制台的命令。


  6、Monitor 监控系统 好比:作战观察团
    原理:监控被测系统服务器主要资源指标的计数器。
    比如监控CPU、Memory、Disk、Network等资源情况
    处理器 内存 磁盘 网络
    常用计数器:%Processor Time CPU使用率
    CPU忙的时间的百分比
    阈值:70%~80%

    分析LR工具组成图:结合三大、四大组件为主要线索
    SUT 被测系统
    Java Client/IE Client: C/S 或 B/S的 客户端
    HTTP Protocol: HTTP协议
    Capture & Record 捕捉 和 录制
    Scripts 脚本
    Run-time Settings: 运行时设置
    Scenario 场景
    Schedules 计划安排
    Run Log 运行日志
    LG 产生 VU 负载的来源
    Monitoring 监控系统资源
    Start/Stop 开始/结束
    Client Emulation 客户端 模拟
    Report & Graphs 报告和图表
    各种形式:Word、网页格式、Excel、Access数据库、水晶报告、Mercury Diagnostics 诊断图

    Ajax:异步的JavaScript和XML -- 异步通信协议
    同步:A任务完成后,B才能开始
    异步:A正在执行,B也可开始运行
    举例:浏览器局部刷新,比如验证码、注册时用户名验证

 

二、LoadRunner工具组成图:
  1、对于给定SUT,VuGen可以按照指定的协议(Http协议、Ajax等软件使用的相关的技术协议),对于不同客户端(PC、移动;浏览器B/S、App C/S)进行捕捉和录制,生成脚本。考虑对脚本增强:事务、检查点、集合点、参数化、关联、流程控制等;


  2、在VuGen设置Run-time Settings,模拟1VU运行;


  3、在控制台Controller中,设置场景(测试计划):场景模式、脚本组(组名、脚本路径、VU数量、Load Generators)、VU行为(初始化、加载方式、持续时间)、Run-time Settings、各台服务器的系统资源监控(Monitor),运行和监控场景,获取运行日志;


  4、场景运行结束后,使用Analsis获取结果报告和图表,便于分析,完成性能测试报告。

    比如如何进行一次并发测试? 参考笔记,整理、扩展
    要点:3W1H
      What 是什么? 概念
      Why 为什么? 有何好处?优势?
      Where 在哪里? 应用场合
      How 如何使用? 具体步骤、注意事项、问题解决方法
      最好结合项目举例说明(项目经验)

    参数、变量
      int add(int a, int b) {
        return a+b;
      }

 

三、参数化:脚本增强技术
  以不变的业务(脚本流程),处理不同的数据 -- 更真实
  常量、字面值 -- 不可改变
  "Hello" "jojo" "bean" 开发:硬编码,不灵活
  public static final double PI = 3.1415926535897932;
  代码中的常量,为了表示一种规范 一经赋值,不可改变
  变量 -- 名称不变、值可以改变 更灵活
  int age = 23; age = 25;
  代词 值
  思想:以不变应万变! 变量名不变,值可改变
  具备参数池:管理不同的数据、制定不同的策略。

 

  1、定义:
    对脚本中的常量(字面值)进行参数化,让不同VU在执行相同脚本时,分别使用参数池中的不同数据代替这些常量,从而达到模拟用户更真实使用系统的情况。

 

  2、步骤:
    1)确定哪些数据要参数化; 比如jojo 和 bean
    2)准备参数池:类型 + 数据 + 策略
    3)将数据使用参数代替。

 

  3、案例:针对购票脚本buy的登录部分进行参数化
    准备工作:注册一些新的用户账户
    账户信息保存原理:当前不存数据库,而是保存在普通文件
    C:\Program Files\HP\LoadRunner\WebTours\MercuryWebTours\users
    保存不同账户文件,文件名就是用户名,第一行是密码
    后续为用户其它信息、购票记录

    建议:在实际项目中,为了更真实表现业务问题,需要对数据进行参数化,需要自己准备大量的测试数据,一般数据存在数据库中,需要通过SQL语句访问数据库。
    目前简化成改变文件中的数据。(测试环境的准备--数据环境)

    首页 -> Sign up now 注册账户
    Username: qq Password: 123 Confirm: 123 确认密码
    -> 提交
    录制buy脚本:事务、检查点 day04\buy
    录制时使用jojo和bean

    1)确定哪些数据要参数化:
      init脚本中:jojo和bean 需要参数化
      技巧:搜索文本中字符串 ctrl+f F3 继续搜索
      双击选中jojo -> 右击
      -> Replace with a Parameter 使用一个参数代替
      弹出窗口:
        Parameter Name: username 参数名/LR变量名
        Parameter Type: File 参数类型-文件 常用
        Original value: jojo 原有初值
          -> {username} LR变量取值方式 {LR变量名}
      注意:检查其它相关的常量,也需要替换 F3继续搜索
        选中jojo -> Use Existing Parameter 使用已存在的参数
          -> 选择username -> {username}
      同理:也将密码bean 都替换成 -> {password}

    2)准备参数池:类型+数据+策略 打开参数池配置窗口
      VuGen中倒数第2个按钮:Open Parameter List
      比如:点击username->Edit with Notepad 使用记事本编辑
        username
        jojo
        qq
        | <-- 使用ctrl+a 全选 检查格式:
        确保光标在最后一行数据的下一行的开头
        保存ctrl+s 及时关闭记事本,避免版本问题
        将First data: 1改为2 从第2行开始取数据

      同理:选择password 编辑文本password.dat 增加一行123
        First data: 2
        目前效果:采用qq和123完成登录
        编译 -> 回放脚本

      提示:如果脚本运行失败,根据回放日志Replay Log,查看错误位置,根据提示的行,找到附近代码,根据提示的原因进行调试。
        初始化脚本 36行附近 文本找不到
        vuser_init.c(36): Error -26366: "Text=Welcome, <b>jojo</b>, to" not found for web_reg_find

      技巧:调试脚本时,可以启用扩展日志,查看参数的替代信息。 Run-time Settings -> Log
        -> Extended Log 扩展日志
        -> Parameter substitution 参数替代信息
          运行后,从日志中查看到参数的使用情况。
          Notify: Parameter Substitution: parameter "username" = "qq"

      练习:让jojo和qq各自订一张票(参数池策略)
      建议:清空jojo和qq的订票记录,便于观察
        打开Parameter List窗口:
        将username和password的First data: 都改为1
        都从第1行开始取数据
        打开Run-time Settings: 迭代次数:2次
        编译 -> 运行
      遇到问题:jojo登录1次,订票2次
        vuser_init 1次 -> Action 2次 -> vuser_end 1次
        登录脚本 参数化 购票
        登录脚本 参数化
      解决方法:将init脚本中的代码剪切到Action中,参与迭代
      注意:保持原有代码的语法格式
        vuser_init(){
          可以转移....
          return 0;
        }

 

四、参数池的策略初步(Parameter List窗口中设置)
  特点:功能强大、全面,产品的一个卖点


  1、Select next row (How? 如何取?)取值方式
    选择下一行
    1)Sequential 顺序的 (默认)
      每个VU都从第1行开始顺序向下取值;
    2)Random 随机取:每个VU都可随机从参数池中取值
    3)Unique 唯一取:每个VU都唯一取值,不能重复
      比如:用户注册,用户名不能重复
    4)Same line as xxx: 和xxx参数同行取值、策略相同
      比如:password 设置为 Same line as username

 

  2、Update value on (When? 何时取?)更新时机
    1)Each Iteration: 每次迭代时更新 (默认)
    2)Each Occurrence: 每次遇到参数时更新
    3)Once 仅取一次 每个VU一次选择,不再改变
      从一而终

    说明:案例中采用的是默认的SE组合:顺序 + 每次迭代
      顺序 每次迭代
      Sequential + Each Iteration
    怎么取? 何时取?(时机)
      脚本Action迭代2次,值需要更新2次,由于采用顺序方式,第一次迭代取第1行:jojo和bean;第二次迭代取第2行:qq和123.
      username password
      jojo bean
      qq 123
      | |

 

五、参数化案例:使用脚本参数化技术,注册30个账户
  1、具体要求:
    1)脚本中需要添加事务、检查点(自动检查)
    2)确保30个账户全部注册成功
    3)建议使用VuGen调试,1VU压力较小,容易成功
      测试数据时,要促进成功。


  2、先准备账户数据:使用Excel 设计 qq1~qq30 1~30
    新建data.xls


  3、录制用户注册脚本reg
    New -> 选择协议 -> Create -> 确认URL
    -> Action 注册需要迭代 -> OK
    -> Sign up now
    -> 输入Username: www Password:123 Confirm:123
    -> 开始事务reg -> Continue -> 欢迎页面:
    -> 插入文本检查点:Thank you, www,
    -> 结束事务reg
    -> 切换到vuser_end -> 点击Continue -> Sign Off
    -> 关闭浏览器 -> Stop
    保存脚本:day04\reg 技巧:多备份 另存为reg1

    参数化:

      方式1 设计两个参数{username} {password}
        使用两个独立的文件保存各自数据:
          username.dat 和 password.dat
          选中两处www -> 替换成{username} 新建、已存在
          选中两处123 -> 替换成{password}
      技巧:双击 ctrl + f F3
        打开Parameter List: 设置数据 + 策略
        先选中username -> 拷贝qq1~qq30 编辑username.dat
        再选中password -> 拷贝1~30 编辑password.dat
      注意文本格式:ctrl+a 检查 没有多余的字符,多留一行
      使用策略:默认SE组合 顺序+每次迭代
        注意迭代次数不能超过30次,否则数据会重复使用
        -> 关闭窗口
      设置Run-time Settings:
        1)迭代次数:10
        2)Pacing:选择第2项 随机Random 2.000~3.000
        3)Log: 日志 为了更详细,可以启用扩展日志
          Standard Log 标准日志
          Extended Log 扩展日志 (选择)
          Parameter substitution 查看参数替代信息 (选择)
          说明:调试脚本时经常启用扩展日志,分析数据获取的规律
        4)Think time: 选择Replay think time 启用
          -> Use random percentage of recorded think time:
          使用 随机 百分比 脚本已记录 思考时间
          Min: 50% Max: 150%
          假如脚本中:
            lr_think_time(10); 随机等待5~15秒 比如:8.76秒
          目的:模拟用户不规律的等待时间,更真实
          建议:测试数据时,减小压力,促进成功。
      配置完成 -> 编译 回放

    方式2:两个参数共享一个数据文件 username.dat
      前提:username和password有关系
        打开day04\reg脚本 另存为 reg2
        -> 将脚本中www -> {username}
        123 -> {password}
      技巧:双击 ctrl+f F3 新的、已存在的代替
        -> 准备数据 + 策略:
        data.xls 拷贝数据 -> 粘贴到username.dat文件
        编辑文件:两列属性共享一个文件
        使用批量替换技巧,将制表符Tab 替换成英文的逗号 ,
        username,password
        qq1,1
        qq2,2
        ...
        qq30,30
        | <-- ctrl+a 检查格式

      在Select Column中:可以指定选择哪一列
        1)根据列号:1 2 3 ...
        2)根据列名:username password 见名知意 推荐使用
      在File format中:指定格式
        默认使用逗号分隔每一列 Comma 推荐使用
      其它:Tab 制表符 或 Space 空格

        -> 针对username设置:选择列号1 或 列名username
        First data: 11 从qq11开始
      策略:默认SE组合 顺序+每次迭代
        -> 针对password设置:
        将File:改为username.dat 共享一个文件
        选择列号2 或 列名 password
      技巧:重新开启窗口才更新
        First data: 11 从11开始
      策略:默认SE组合
        或 Same line as username 和username同行取值
        此时First data失效
        -> OK
      设置Run-time Settings: (同方法1)
        1)迭代次数:20次
        2)Pacing: 随机2.000~3.000秒
        3)Log: 扩展日志,查看参数替代信息
        4)Think time: 随机50%~150% 也可忽略
      -> 编译 -> 运行

      提示:某些系统中,为了恢复数据库的数据,需要使用SQL
        比如删除qq开头的账户信息?
          delete from user
          where username like 'qq%';
      目前:只要删除账户文件

回顾:
  1、LoadRunner的多个组件
    (结合工具组成原理图理解记忆)
    1)VuGen 脚本生成器 *
    2)Controller 控制台 *
    3)Analysis 结果分析器 *
    4)Load Generator 负载生成器 *
    5)Agent 代理程序
    6)Monitor 监控系统


  2、脚本增强:参数化 以不变应万变
    参数名 数据
    {username} jojo qq qq1 ...