LoadRunner基本简介

时间:2021-09-02 13:31:12

# LoadRunner  #

## 安装要求 ##
    做性能测试的时候,电脑要是一个干净的系统。
    尽量是裸装电脑纯净版,不能安装太多的浏览器,支持的有IE、Firefox、chrome
    在win7系统搭建效果比较好。稳定的版本是LR11
    安装LoadRunner 需要破解,HP是卖服务的。

## 两种应用 ##
    BS/架构      网络应用,网站  
    CS/架构     win32应用,使用windows标准空间开发出来的客户端程序。

## 性能测试工具 ##
    LoadRunner  商业  C语言  Windows
    Jmeter        开源      Java  免费
![](https://i.imgur.com/9nCd1YG.png)
## 性能测试概念 ##

从时间资源利用率方面,
    为了考验这两方面模拟真实生产环境去测试(测试系统的各项性能指标)

## 性能测试的目的 ##

1. 评估系统的能力 
    2. 识别体系中的弱点 
    3. 系统调优 
    4. 验证稳定性和可靠性

## LoadRunner 的三大组件 ##

虚拟用户脚本生成器    virtual user Generator
    压力调度控制台          Controller
    压力结果分析器          Analysis

LoadRunner由四大组件组成:VuGen、控制器、负载发生器和分析器。

## LoadRunner测试流程 ##

1.规划测试(计划、用例) 
             确定测试要求,如并发用户数量、典型业务场景流程;测试计划;设计用例;……

2.创建VU脚本
             使用Virtual User Generator录制、编辑和完善测试脚本

3.定义场景
            使用LoadRunner Controller 设置测试场景。

4.运行场景
            使用LoadRunner Controller 驱动、管理并监控场景的运行

5.分析结果
            使用LoadRunner Analysis 生成报告和图表并评估性能

## LoadRunner常用的术语 ##

1. 并发
    
        狭义(绝对):所有的用户在统一时间做同一件事情
    
        广义(相对):多个用户在一段时间内做不同的事情或者请求

2.  在线
    
        多用户在一段时间内对系统执行操作
3.  响应时间
    
        从客户端发出请求到得到响应的整个事件(客户端响应时间+网络+服务器响应时间)
4.  事务响应时间
    
        完成相应事务所用的时间
5.  点击率
    
        客户端向服务器提交的Http请求数
6.  吞吐量
    
        任意一秒处理客户端http请求的数据量,以字节(KB)为单位
7.  吞吐率
    
        服务器每秒处理的数据量
8.  TPS
    
        每秒钟处理的事务数
9.  资源利用率

对不同系统资源的使用程度,(cpu、内存、硬盘、网络)
        
10. 场景
    
        测试场景在LoadRunner中可以设计执行用例的场景
11. 负载发生器
    
        用来产生压力的机器,模拟用户对服务器提交请求。    
12. 虚拟用户
    
        LoadRunner中模拟的用户即为虚拟用户对应于真实用户
13. 虚拟用户脚本
    
        通过Vuser Generator录制或开发的脚本。这些脚本用来模拟用户的行为。

14. 事务
    
        一个或者多个的操作步骤定义为一个事务
15. 思考时间
    
        请求间的停顿时间

16. 集合点

结合点是为了更好的模拟并发操作
    
        集合点是在同一个时间点,所有用户同时执行某一个操作
17. 负载测试
    
        找到系统处理能力的极限
18. 压力测试
    
        在饱和状态下系统能够处理的会话能力
19. 配置测试

通过对被测系统软硬环境的调整,了解各种不同环境对系统的影响程度,
        找出最优分配原则
20. 可靠性测试
        
        通过给系统加载一定的业务压力(例如资源在70%~90%的使用率)的情况下,
        让应用持续运行一段时间,测试系统在这种条件下是否能够稳定运行。
## 性能测试策略 ##
    
- 内存泄漏

程序中已分配的内存由于某种原因程序未释放或无法释放,
        造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
- 基准测试

单用户,单场景
- 并发测试

多用户单场景
- 综合场景测试
- 疲劳强度测试
- 数据容量测试
- 极限测试
- 递增测试
    
#协议分析器:捕获获取协议类型, 网上下载协议分析器  问开发

## VUG录制操作过程 ##
    1. 启动服务,所有程序-LoadRunner-Samples-web-启动web服务器
    2. 启动VUG
    3. 新建脚本,弹出框设置,网络协议、测试对象URL,保存路径等。
    4.设置 web(http/html)  录制的地址  左下角选项 录制 基于html的脚本  高级默认
    5. 自动打开浏览器,用户进行操作。
            输入账号密码,点击添加事务保存
            登录成功,点击结束事务保存
            #注 事务保存点名字不能更改
    5. 点击录制工具条上的关闭按钮。

## 运行时设置 ##
    设置代码显示账户密码。
    log-extended log -

## 检查点的作用 ##
    检验实际结果与预期结果是否一致,检查点要加在最近一个请求。
    Tree树策略  选中要检查的文本,右键添加文本检查点(AddaTextcheck)

## 脚本的组成 ##
    
    1. LoadRunner里面的变成语言是改进后的C语言。
    2. 每个Action都放在一个单独的Action.c文件里
    3. 快速帮助文档,按F1

## 录制时怎么做到的呢? ##
    支持IE、Firefox录制
    IE 管理加载项:
        名称BHOManager Class发行者Mercury Interactive Corporation状态
        已启用 文件日期2009年1月15日,0:09版本9.1.0.0加载时间0.01s
    
## 参数化 ##

双击选中要参数化的内容。
    方法一,右键---【Replace with a new parameter】  参数替换
    方法二,菜单【insert】----【new Parameter…】    新建参数
    Parameter Properties (参数属性对话框)----我们的参数化设置就通过这个对话框完成
    输入要参数化的名字,可以是中文
      
## LoadRunner测试流程 ##

### 规划测试
      好的测试规划,能够指导整个测试过程,以更好的收集到测试目标要求的性能数据。
      规划可以包括测试的计划、用例的设计、场景的设计、性能计数器设置的设计等。
###规划注意事项:
        1.测试用例:测试用例一般根据需要测试的功能进行设计,
                  比如用例为:进入登录页面-》填写用户名密码,登录-》单击‘新增’按钮-》填写门店信息,保存。
        2.场景设计:
           一般情况会设计两种加压方式进行测试:
            瞬时加压(多人同时进行某项业务操作)与逐渐加压(多人先后进行某项业务操作,操作时间间隔根据计划设定)
        3.性能计数器方面:可以收集CPU时间、内存、硬盘、网络、数据库参数、IIS参数等   
###创建Vuser脚本
   2-1 使用Virtual User Generator录制、编辑和完善测试脚本。

2-2  我们可以根据被测应用是B/S结构还是C/S结构来选择协议:
            A 如果是B/S结构,就要选择Web(HTTP/HTML)协议
            B 如果是C/S结构,则可以根据后端数据库的类型来选择
            C 对于没有数据库的WINDOWS应用,可以选择Windows Sockets协议。

#  2-3 协议怎么知道: A 问开发 B 用协议分析器 C 网上有免费的协议分析工具 #

# new single protocols  scrip 单协议 #
      # new multiple  protocols  scrip  多协议  #
      #  new recent protocols  scrip 最近用的协议 #

1  熟悉 创建脚本工具栏
   2-4 application type : 
             internet application----------B/S架构
            win32 application -----C/S架构
   2-5 program to record ----默认IE,自带firefox浏览器
   2-6 URL address------指定起始URL
   2-7 working directory-----工作目录,一般默认
   2-8 Record into action ----选择要录制的部分

注意:
   VuGen的脚本分为三个部分:
   Vuser_init,Action,Vuser_end。
  # 其中Vuser_init和Vuser_end都只能存在一个,而Action可分成无数多个部分,可以通过点击旁边的 #

2-6 options选项:
             recording-----录制选项:
                1 基于浏览器的应用,推荐用HTML-based script方式录制
                2 不是基于浏览器的应用,推荐用URL-based方式录制
                3 基于浏览器的应用程序中使用了HTTPS安全协议,也要使用URL-based方式录制
                4 如果基于浏览器的应用程序中包含Javascript,
                  并且该脚本向服务器产生了请求,比如DataGrid分页按钮等,
                  就要使用URL-based方式录制
           
2-7 HTML-based script方式录制与URL-based script录制的区别:

A --- HTML-based是根据浏览器的缓存文件生成的,每个函数比较长,函数个数比较少。
           # 脚本比较容易维护。推荐使用。 #
          #  缺点:不能真实模拟出用户行为 #
    B---3.    URL-based Script是根据浏览器的请求顺序生成的,每个函数比较短,但是个数比较多,
            # 此种方法更真实,缺点是脚本很长,难以维护。 #
    C----2.    前者录制的简单些,它只录制LR缓存中没有的记录,后者录制的复杂些,
             它不仅录制LR缓存中没有的记录,
             # 缓存中有的记录也录制下来,所以录制的比较全面 #

2-8  编码问题--advance---AdvancedSupport charset中设置编码格式:UTF-8;

2 熟悉录制脚本工具栏

从左到右分别是:
       开始录制
       结束录制
       暂停录制
       编译脚本
       脚本所属部分
       创建新的action
       插入事物起始点
       插入事物结束点
       插入集合点
       插入注释
       设置选项option
       插入test检查点

#  录制过程 #

1   # 若录制一个登陆操作,输入用户名和密码后点击 开始事物,然后继续录制,
           # 点击Login按钮登陆,登陆成功后,一定要点击 结束事物 #
    
    2  vuser_init:录制登录的脚本,此处的脚本只有在初始化时才会被执行
       Vuser_Action():有意义语句块,真正执行测试点操作的脚本主体部分,可以迭代
       Vuser_end():录制退出的脚本,此处的脚本只有在释放用户时才被执行
    # 注:其实类似于自动化里的setUp()和tearDown()两个函数 #

3 在一个录制好的脚本中:

    web_url是浏览器地址栏的URL。 GET请求
        web_link是点击在<a href= ...>和<a>之间的文本超链接。
        web_image是点击HTML的<img href…。
        web_submit_form 是在前面操作的上下文中的GET或PUT表单上点“提交”,
        前面的操作被VuGen在基于HTML模式下录制下来了。
        web_submit_data,POST    请求

4 打开Run-time Setting:

General中:
        Run Logic:设置迭代次数
        Pacing:设置迭代间隔时间
        Log:设置运行时日志的类型
        Think Time:设置录制时形成的Think Time时间比例,
        事务内的Think Time要忽略!

5  插入集合点

形成脚本后,点击Insert,选择Rendezvous

6 事务定义:通常为了衡量服务器的性能,我们需要定义事务。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。

6-1 事务的目的主要有两点:
            统计事务的成功率。
            统计事务的响应时间。
    
         继续录制,录制事务动作结束后,必须要结束掉这个事务。
         同样可以在insert菜单栏或工具栏结束这个事务。-----事物是成对出现的

7 文本检查点:

目的:为了验证实际结果与预期结果是否一致。

7-1 添加文本检查点有两种方式:在树结构中添加、在代码页面添加。

在树结构中添加检查点:
           将脚本切换到树结构,在Server Response页面上找到你要check的文本内容,
           并执行鼠标右键,选择Add a text check
    添加成功后,切换到代码界面,找到登录请求,会发现前面已经自动多出一行代码,
         
# 注意:在树结构中添加检查点必须在server response下做检查点。 #
# 记忆:凡是带reg的函数都需要放在要操作请求的前面。注册后,查找速度更快,在内存中查找
 #
插入检查点:
    选择最近一个事务的请求,点击树视图,选择添加检查的文字,右击添加文本检查点。
    函数:web_reg_save_find("search=Body",....LAST);

8 数据池策略(参数化)

为了使脚本更灵活,我们可以对脚本进行参数化,以登录时的用户名和密码为例,
         在脚本中选中jojo,右键单击选择Replace with a parameter
           对脚本参数化后,可以选择工具栏中的Param List,设置参数化策略

8-3 其中,Select next row为取下一个数据的方式,有四个选择:

Sequential:每个VU按照顺序读取。每一个虚拟用户都会按照相同的顺序读取。
        Random:每个VU随机读取一个。
        Unique:每个VU顺序取唯一的值。注意:使用该类型必须注意数据池中数据充足。
        Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录。通常用在有关联性的数据上面。

8-4 Update value on为更新值方式,有三个选择

Once --在所有的迭代中都使用同一个值
         each iteration ---每次迭代都要取新值
         each occurrence ---只要发现该参数就要重新取值,也就是如果一个action中有多个该参数,每遇到一个就要重新取一个值

8-5 When out of values是当select next row选择unique时才能用到,是数据超出范围时的设置
    
        Abort Vuser 中止脚本 
        Continue in a cyclic manner 继续循环取值 
        Continue with last value  继续取最后一个值

9  Run-time Setting 工具栏

9-1 Run Logic控制脚本迭代的次数
     9-2  Pacing是设置两次迭代时的间隔。
                 有3个设置:
                       第一个意为第一次迭代结束后立即开始第二次迭代
                      第二个意为两次迭代直接有一个随机的时间间隔
                      第三个意为两次迭代之间有固定的间隔时间

9-3 Think Time有两个设置:Ignore think time和Replay think time
            A  选择Ignore think time,那么VuGen在脚本回放过程中将不执行lr_think_time()函数,这样将给服务器造成更大的压力。

B  选择Replay think time…,那么还有以下四种选择:
             按照录制过程中的think time值回访脚本
            按照录制录制过程中的think time值的整数倍回访脚本
            指定一个最小值和最大值,按照两者之间的一个随机数的值来回访脚本
            限制think time的最大值,这样VuGen在回放脚本过程中将把脚本中think time大于该限制值的,用该限制值替代。

9-4 带宽---一般默认最大带宽

9-5 日志调试

开启/关闭 logging功能
      标准日志
      扩展日志
     参数设置,Run-Time Setting设置信息
     服务器返回的数据,响应头、响应体
     高级跟踪,连接服务器、dns缓存、请求头、请求体等等

# 如果是真实环境选择 第一个选项---只当有错误时发送日志---如果不这样日志将把内存占满

3 定义场景
     使用LoadRunner Controller 设置测试场景

# 做并发测试,首先把脚本调通,包括参数话,设置相关检查点,确保脚本能顺利跑起来,另外还有在脚本中插入集合点,设置集合点的目的主要是为了做并发测试,然后保存
 # 脚本中的  thinktime 要注释掉,有影响 #

3-1定义场景步骤:
             打开controller,选择manual scenario (手动选择场景)
             在Browse 中选择要执行的脚本,然后点击OK

1    scenario  schedule设置:
             进入场景设置页面后,shedule name ---名字可以自己定义
             schedule by :可以选择scenario  或者  group by ----后者可以分组,分先后顺序
              runmode:选择 real world schedule 
          2 global scenario 设置:
                                Initalize(ɪˈnɪʃəlaɪz)-----有三个选项--选择initalize each Vuser just before it runs 
                                start vuser----先设置一个vuser 做基准测试,勾选simutaneously---同时的意思
                                 duration([djuˈreɪʃn)----持续时间,可以设长点,因为可能不知道多长时间奔溃
                                 stop user---停止所有用户,可以同时停止,不会造成对系统的压力
         3 集合点设置---打开 工具栏 中scenario 下面的rendezvous(ˈrɒndɪvu)--点击policy(策略)进行设置---选择当所有用户到达再进行 release释放
          4 runtime setting 设置:
                               run log----迭代次数不需要设置,因为之前已经设置了时间
                                pacing(步速)----选择第三个,选择random(随机的)---intervals(间隔)--选择2到3s--使脚本    有个收尾的动作时间
                                log----选择send message only when  an error occues--然后后面勾选Extended log(日志扩展)--parameter  sustitution(参数替代)
                               think time-----选择 ignore thinktime--做并发忽略思考时间---有这个思考时间实际上是模拟人的思考
                                miscellaneous(ˌmɪsəˈleɪniəs)杂物的意思-----选择continue on error 和 run vuser as a thread
                                network下面的speed simulation (sɪmjuˈleɪʃn)(模仿)----选择最大带宽
                               Browser下面的browser  emulation(emjʊ'leɪʃn)(模仿)----选择 simulation a new user on each interation (交互影响)

# 设置完成------点击编译 #

5  点击 scenario start ----运行稳定后逐渐添加用户

5# 关联#

5-1.关联原理:有一种服务器比较聪明他会把一些写死的数据变成动态的Session Id 所以引入了关联
         5-2.怎么去判断脚本有没有关联?a.脚本录制正确,回放失败,可能脚本有关联
         5-3.进一步验证?录制两份相同业务的脚本进行对比tools - compare with script-打开wdiff找到脚本不一致的地方即关联处

5-4.找到关联后如何处理?
                  a.自动关联:先让脚本回放一遍,按Ctrl+F8 选中需要关联的地方-按correlate
                  b.手动关联:web_reg_save_param("id","LB=","RB=",LAST);找到关联处复制-在generation log一般日志里面找到服务器最先给你的响应 -
           在找相应的请求 -把关联函数放在请求之前-在脚本里面出现关联的地方用变量{id}替换
        函数:web_reg_save_param("ID","LB=","RB=",LAST);

6 登录和注册要设置检查点
   6-1 登录要进行关联
   6-2 注册要进行参数化
   # 6-3 购买机票----Action 中的航班地点要参数化,航线要进行关联----航线有四条--ord=random number随机数---业务逻辑 ---性能测试要熟悉业务
    6-4 检查点放在事物结束前的第一个请求,如果是该请求是图片,则向上一个请求
    6-5  关联 ---先找到关联的相关请求--通过ID查找--再通过快照再脚本中查找该请求---关联放在该请求前面

4 运行场景
       使用LoadRunner Controller 驱动、管理并监控场景的运行。

5 分析结果
      使用LoadRunner Analysis 生成报告和图表并评估性能。

# 综合场景/压力调度控制台 #

打开controller(压力调度控制台)
选择手工场景
选择录制的脚本(多个脚本,多个添加)
场景设置 scenario 
        真实场景
初始化选型  运行前初始化所有的用户
运行设置(设置用户数量)选择第三个,每隔...多长时间加...
设置场景运行情况       每隔...时间执行...

打开运行时设置,run-time-setting
设置log日志为在出错是显示详细信息

think time 限制是靠时间为2-3秒
杂项里选择出错是运行,选用线程数(一个进程等于50个线程),没有代理,最大带宽。新用户没有缓存

## 结果分析 ##
右键 merge graph 选择合并图片