• LoadRunner(4)


    一、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 FilesHPLoadRunnerWebToursMercuryWebToursusers
        保存不同账户文件,文件名就是用户名,第一行是密码
        后续为用户其它信息、购票记录

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

        首页 -> Sign up now 注册账户
        Username: qq Password: 123 Confirm: 123 确认密码
        -> 提交
        录制buy脚本:事务、检查点 day04uy
        录制时使用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 eg 技巧:多备份 另存为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 eg脚本 另存为 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 ...

  • 相关阅读:
    Reflector 插件
    Tips for ILMerge
    WaitAll for multiple handles on a STA thread is not supported 解决方案
    MSI: UAC return 0x800704C7
    SET与SETX的区别
    年在Copyright中的含义
    gacutil : 添加.NET 4.0 assembly 到GAC失败
    LicenseContext.GetSavedLicenseKey 需要 FileIOPermission
    Linq学习之linq基础知识
    SQL Server 2008如何导出带数据的脚本文件
  • 原文地址:https://www.cnblogs.com/KalosOwen/p/8981882.html
Copyright © 2020-2023  润新知