一、性能测试的策略
  重要的:基准测试、并发测试、在线综合场景测试
  递增测试、极限测试...

  1、基准测试:Benchmark Testing
    含义:就是单用户测试,单用户、单测试点、执行n次;
    作为后续测试的标杆,基本的准绳。
    说明:还需要使用三大组件,VuGen 脚本-> Controller 场景 -> Analysis 结果

  2、递增测试:不断加压,负载测试、压力测试的共性。
    比如:每隔一定时间(1s, 5s, 10s ..)逐步加载VU,逐步加压;或在不同场景中使用不同VU数表示不同的压力。

  3、并发测试:Concurrency Testing
    含义:多用户在几乎同一时刻执行某一业务操作,形成一种严格的并发访问(LR精确到毫秒级别),观察系统在瞬时较大压力情况下的承受能力。--- 严格的并发(狭义的并发)

  4、在线综合场景测试:号称“更真实模拟实际生产环境”

    三个要素:
      1)多用户:结合需求考虑在线用户数
      2)多任务(脚本):至少3个
      3)在线执行一段时间:1个小时左右
    注意:
      1)多用户一起运行,就可能存在并发;(广义的并发)
        但是,不需要像并发测试那样设置集合点,不需要严格的刻意并发。
      2)综合场景测试过程中,所有VU循环执行相应的业务操作。(Action部分)
        举例:100用户在线综合场景
          100VU共同对SUT执行各自操作,其中50VU查询商品、30VU添加购物车、20VU查询订单,在线持续运行1h.
        问题:为什么不模拟大量的登录操作?
          业务用户不可能一直在登录,要模拟真实的用户体验。

  5、疲劳强度测试:压力更大、时间更长的在线综合场景测试。比如:对SUT进行长时间测试,一般12h、24h、7*24h
    银行、互联网系统要求全年7*24不间断运行
    要求:稳定*、安全
    目的:检测系统的稳定性,比如长时间运行过程中是否出现内存泄露、磁盘空间不足、大量异常等问题。

  6、内存泄露检查:通过正常的性能测试,如果SUT的内存曲线走势不正常时,则关注其他相关指标,通过其走势判断是否出现内存泄露。
    内存泄露:C/C++/Java都存在,就是内存不够用。
    以Java为例:JVM内存 栈区、堆区、方法区
    Student s1 = new Student();
    引用 --> 对象 在堆区分配
    (对象的内存地址)
    s1 = null;
    对象不断分配而未及时回收,导致堆内存空间不足,内存泄露。Java虽然有GC机制(内存对象垃圾收集机制-自动),但是也可能存在内存泄露问题。

    ABC 人工智能 大数据 云计算

  7、数据容量测试:大数据量测试
    比如:向数据库中添加200GB的数据量,再进行测试,有时甚至是几个TB.
    大数据:Big Data 一般是T级、P级以上的数据量
    核心:数据建模、数据挖掘
    1024Byte = 1KB
    1024K = 1M
    1024M = 1G
    1024G = 1T
    1024T = 1P
    E Z Y ...

    如何向数据库中插入大量的数据?比如插入10亿条
    思路:SQL insert into 表名 values(值1, ...);
    自动化:循环 反复执行insert
    变量、参数化 代替固定的字面值
    数据库可以写过程化语句,结合sql编程。
    思路:录制脚本,通过参数化反复执行脚本。

  8、极限测试:也称为压力测试、摸高测试
    含义:使用并发测试、在线综合场景测试等方法,测试出系统能够承受的极限压力(如最大并发用户数)或系统能达到的最大处理能力(最大吞吐量、TPS),可以采用递增测试等方法,比如对系统进行100VU、200VU、300VU...的性能测试。

二、基准测试:单用户、单测试点、执行n次/一段时间;
  1、需求:对购票操作进行基准测试。

  2、测试脚本中要加检查点。
    原因:LR报告中(Test Results)验证的只是针对网络层面,服务器收到客户端的请求包,并将应答包返回给客户端,但是LR默认不会验证应答包中的数据是否正确。
      性能测试的前提是功能的实现,如果误以为功能实现,会引起测试结果的误差。

    案例:先录制buy脚本,插入文本检查点。
      先打开SUT,熟悉购票业务流程;
      录制流程:
        New -> 选择vuser_init -> OK -> 首页面
        -> 输入jojo和bean
        -> 开始事务login -> 点击Login
        -> 选中"Welcome, jojo, to" -> 插入文本检查点
          Insert text check (小望远镜图标按钮)
        -> 结束事务login
        -> 切换到Action -> 点击Flights(等待页面加载完毕)
        -> 选择城市从Denver到London -> Continue -> Continue
        -> 开始事务buy -> 点击Continue
        -> 针对"Denver for London" 添加文本检查点
        -> 结束事务buy
        -> 切换到vuser_end -> 点击Sign Off
        -> 关闭浏览器 -> Stop
        保存在:D:\work\script\day03\buy 编译 -> 回放

        定义和调用函数的目的:复用已有的功能 不断的使用
          web_reg_find("Text=Welcome, <b>jojo</b>, to", LAST);
          web_reg_find("Text=Denver for London", LAST);

  3、检查点函数:web_reg_find("Text=xxx", LAST);
    xxx就是需要检查的文本
    规律1:对于B/S系统,LR脚本中具有两种函数:
      1)C语言函数:函数名比较简约 strcmp 字符串比较
        strcmp("abc", "abb");
      2)LR函数:一般lr_或web_开头
        <1> 通用的函数:不同协议代码通用 - 重要!
          lr_start_transaction lr_end_transaction 事务
          lr_think_time 思考时间、等待时间
        <2> Web[HTTP/HTML]协议下的函数: web_开头
          web_url URL请求 web_submit_form 提交表单请求
          web_reg_find 检查点函数

    规律2:web_reg_find函数 带有reg字样
      带有reg字样的函数,称为“注册性函数” regist 注册
      特殊之处:必须写在相应请求之前!
      相应请求:引起需要检查的响应所对应的请求。
      相应请求之后,返回响应,响应中需要检查文本。

    规律3:检查的是页面源代码文本 HTML语法
      Welcome, <b>jojo</b>, to
      Denver for London

    初始化脚本 36行 附近相关代码 错误
      vuser_init.c(36): Error -26366:
      检查点的文本找不到
      "Text=Welcome, <b>jojo1</b>, to" not found for web_reg_find

    技巧:如何快速提高调试代码的能力?
      必要时可以故意将代码改错,分析错误提示和原因。
      根据错误提示信息找到错误位置,并调试。

  4、只有添加过检查点的脚本运行正确,才说明脚本基本正确。(脚本需要适当的增强)

    需求:循环订3张票 VuGen中Run-time Settings按钮
    运行时设置
    Run Logic 运行逻辑
    Iteration Count: 迭代次数
    Number of Iteration: 默认1 改为3次
    注意:循环的只是Action部分
    vuser_init和vuser_end部分仅执行一次

  5、控制台和VuGen中设置Run-time Settings的联系和区别
    1)如果从控制台中直接打开脚本,VuGen中的设置会带过来
    2)如果控制台中也进行了设置,并且值不同,控制台的优先级更高;
    3)建议:统一在控制台中设置

  6、Pacing值:每次迭代之间的时间间隔。 单位:秒
    每次迭代:LR每次执行Action脚本代码
    规律:Pacing值越大,对SUT的压力越小。

  7、Think time:脚本每个步骤之间的时间间隔。 单位:秒
    每个步骤:一般都是每个请求
    web_url 访问某个URL请求
    web_submit_form 提交表单请求
    web_link 点击超级链接请求
    用途:可以控制脚本中是否使用think time,以及如何使用
    如果Ignore 忽略,则脚本中lr_think_time(18); 会失效。
    规律:Think time值越大,对SUT的压力越小。

  8、完成案例:针对buy进行基准测试
    方法1:单用户循环执行n次 比如5次
      1)调试好脚本(在VuGen运行通过)
      2)打开控制台,加载buy脚本
        设置脚本组:组名、脚本路径、VU数量
        Run Mode中,单选Basic Schedule
        将Quantity改为1 单用户
      3)打开控制台中的Run-time Settings:
        迭代次数: 改为5
      4)Pacing值:迭代的间隔时间
        有三种方案:
          <1> As soon as the previous iteration ends
            只要上一次迭代结束 -- 紧锣密鼓
          <2> 在上一次迭代结束后 设置为随机的2.000~3.000秒
            固定的 延迟
            With a _fixed_ delay of _6.000_ sec
            随机的 时间精确到小数点后3位 2.768
            With a _random_ delay of _2.000_ to _3.000_ sec
            间隔
          <3> At _fixed_ intervals, every _6.000_ sec
            _random_ every _2.000_ to _3.000_ sec
      5)Think time: 思考时间/等待时间
        Ignore think time: 忽略思考时间 (选择)
        脚本中lr_think_time函数会失效,目前对结果无影响
        Replay think time: 可设置具体策略
        -> 点击OK
      6)设置VU的行为:
        <1> 初始化:默认运行前初始化
        <2> 加载方式:默认同时加载 就1VU
        <3> 持续时间Duration:默认运行直到结束
          保存场景文件:D:\work\scenario\day03\buy_基准测试1
          -> 切换到Run视图
          运行场景 Start Scenario

归纳基准测试:
  方法1:单用户循环执行n次 比如5次
    1)调试好脚本(加事务、检查点,在VuGen运行成功)
    2)打开控制台,加载相关脚本 buy
    3)设置VU数量:1个
    4)设置VU 行为:初始化、加载方式、持续时间
    5)设置Run-time Settings:
      <1> 迭代次数:n次 比如5次
      <2> Pacing: 随机2.000~3.000秒 迭代之间的间隔时间
      <3> Think time: 可忽略 请求之间的间隔时间
      原因:单用户对系统的压力较小,忽略对结果无影响。

  方法2:单用户持续运行n时间 比如1分钟
    1)调试好脚本(加事务、检查点,在VuGen运行成功)
    2)打开控制台,加载相关脚本 buy
    3)设置VU数量:1个
    4)设置VU 行为:初始化、加载方式、
      持续时间Duration: 改为持续运行1分钟
    5)设置Run-time Settings:
      <1> 迭代次数:1次 此处不起作用,取决于Duration
      <2> Pacing: 随机2.000~3.000秒 迭代之间的间隔时间
      <3> Think time: 可忽略 请求之间的间隔时间
      原因:单用户对系统的压力较小,忽略对结果无影响。

      说明:
        1)当Run-time Settings中的迭代次数和Duration冲突时,Duration的优先级更高。
          Duration:
            第一项:运行直到结束
              还是听Duration的,只是放权了,运行的次数取决于迭代次数。(方法1)
            第二项:Run for __ days and __(HH:MM:SS)
              运行时间是由Duration说的算,Action迭代的次数取决于实际情况,Duration指的是Action持续迭代的时间,时间将至,LR会发出指令,通知VU结束运行。 Stop

        2)如何统计性能测试结果数据?
          建议对场景运行3次,在测试报告中,取中间值:
          场景运行 平均事务响应时间
          第1次 0.215s
          第2次 0.203s
          第3次 0.279s
          结果取值:0.215s

        3)目前暂时忽略系统资源监控(后续统一补充)

          以上就是基准测试。

三、并发测试 Concurrency Testing
  1、含义:多用户在几乎同一时刻执行某一业务操作,形成一种严格的并发访问(LR精确到毫秒级别),观察系统在瞬时较大压力情况下的承受能力。-- 狭义的并发

  2、并发测试的三要素(面试题:并发测试需要注意什么)
    1)Action脚本中要添加事务; -- 确定并发的起点
    2)事务开始之前要加集合点(并发点);-- 严格的并发
    3)控制台场景中要设置并发策略。 -- 并发的规模

      集合点:5个线程,代表5个VU,并发执行一次购票
      buy事务的开始
      o-----------|o----------
      o-----------|o----------
      o-----------|o----------
      o-----------|o----------
      o-----------|o----------
      此处设置集合点(并发点)
      Action脚本中,在buy事务开始之前,设置集合点;
      等所有VU到达集合点时,才一起释放,此时的压力最大
        -- 瞬时压力
      并发策略:比如,当所有VU到达集合点时一起释放

  3、集合点只有在并发测试时才使用。
    -- 严格的并发(狭义的并发)

  4、案例:5VU并发购票
    1)先录制buy脚本,添加事务、检查点
      技巧:脚本的备份 File -> Save As 另存为 buy1

    2)Action中,buy事务开始之前添加集合点
      光标在事务开始之前 lr_start_transaction("buy");
      点击 Insert -> Rendezvous 集合点
      -> 输入集合点名称 Rendezvous Name: buy 同事务名
      就会生成脚本:lr_rendezvous("buy");
      LR的通用函数 集合点函数
      -> 及时保存 -> 编译 Compile 保证最新版本
    3)打开控制台,设置并发策略
      加载buy1脚本
      注意:如果加载后的脚本修改了,先编译脚本,并在控制台中刷新脚本:
      针对控制台中脚本组 右击-> Details 细节
      -> Refresh 刷新 下拉菜单:
        1) 常用Script: 刷新脚本
        2) Runtime Settings: 不常用 将VuGen中设置覆盖过来
          建议统一在控制台中设置为好
          选择Scenario菜单 -> Rendezvous 设置并发策略
          -> 窗口中,点击Policy按钮 策略
            第1项:Release when 100% of all Vusers arrive at the
              rendezvous. (选择此项)
              当100%的所有VU到达集合点时一起释放
              比如:10VU都算 10*100% 10*n%
            第2项:Release when 100% of all running Vusers arrive at the rendezvous.
              当100%的正在运行的VU到达集合点时一起释放
              比如:10VU中只有5个正在运行 5*100% 5*n%
            第3项:Release when 1 Vusers arrive at the rendezvous. 指定n个VU到达集合点时一起释放
              补充:Timeout between Vusers: 30sec
              超时时间:从先到达集合点的VU开始计时,如果超时30秒用户未到齐,先释放到达集合点的用户,形成局部并发。
        3)完成5VU并发购票其它设置:
          <1> 控制台中:VU数 5个
          <2> VU行为:
            初始化:默认
            加载方式:默认同时 目前VU较少
            持续时间:运行直到结束 每个VU只需迭代1次
          <3> Run-time Settings:
            迭代次数:1次
            Pacing: 无需间隔时间
            Log: 默认日志
            Think time: 默认忽略,让VU更快到达集合点,更严格
            -> 运行场景 -> 查看结果报告

            补充系统资源监控:
              系统资源:CPU、Memory、Disk、Network...
              内存 硬盘 网络
              比如:CPU中 %Processor Time 指标、计数器(多项)
              表示CPU使用率、CPU忙的时间的百分比
              阈值:70%~80%

            测试结果报告:
              结果1:5VU并发购票
                1)事务指标:
                  事务名 最小 平均 最大 标准方差 90%时间 成功 失败
                  buy 0.234 0.409 0.531 0.126 0.531 5 0 0
                  login 0.563 0.807 1.278 0.245 1.278 5 0 0
                  buy的平均事务响应时间:0.409s 符合需求 <3s
                  最大:0.531 比较合理
                  标准方差:0.126 比较稳定
                  buy的TPS:每秒事务数(吞吐率、效率)
                  最小 平均 最大
                  0 0.5个 5个/秒
                  成功率:100%
                2)点击率:12.5次/秒
                3)系统资源情况:
                  %Processor Time CPU使用率:
                  最小 平均 最大 标准方差
                  59.896 69.792 82.813 9.613
                  平均:69.792% 非常接近阈值70%
                  最大:82.813% 超过阈值
              初步结论:事务时间特效良好,但CPU使用率过高,怀疑CPU存在瓶颈(核实:CPU 1个 单核 处理能力不够)
              优化建议:要么增加CPU数量、增加CPU内核数;
                要么使用主频更快的CPU。 2.5GHz

              结果2:10VU并发购票
                1)事务指标:
                  事务名 最小 平均 最大 标准方差 90%时间 成功 失败
                  buy 0.25 0.444 1.203 0.271 0.547 10 0 0
                  login 0.531 0.941 2.562 0.565 1.095 10 0 0

                  buy的平均事务响应时间:0.444 符合需求 <3s
                  最大:1.203 比较合理
                  标准方差:0.271 比较稳定
                  buy的TPS:每秒事务数(吞吐率、效率)
                  最小 平均 最大
                  0 0.833个 6个/秒
                  成功率:100%
                2)点击率:20.833次/秒
                3)系统资源情况:
                  %Processor Time CPU使用率:
                  最小 平均 最大 标准方差
                  58.854 85.287 100 15.687
                  平均:85.287% 超过阈值70%
                  最大:100% 满百
              初步结论:事务时间特效良好,但CPU使用率过高,确定CPU存在瓶颈(核实:CPU 1个 单核 处理能力不够)
              优化建议:要么增加CPU数量、增加CPU内核数;
              要么使用主频更快的CPU。 2.5GHz
              综合建议:要采用配置更好的服务器主机;
                同时兼顾操作系统、软件的部署和配置。

归纳:
  1、测试策略:基准测试、并发测试、在线综合场景测试
  2、基准测试:单用户、单测试点、执行n次/n时间
  3、并发测试:多用户并发执行某功能点
    三要素:Action中加事务、事务前加集合点、场景中设置并发策略 集合点函数:lr_rendezvous("集合点名");

LoadRunner(3)的更多相关文章

  1. 老李分享:性能测试你不应该只知道loadrunner(1)

    老李分享:性能测试你不应该只知道loadrunner(1)   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试 ...

  2. LoadRunner(三)——LR相关概念&组成部分

    参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.运行机制和主要组成部分 1.LoadRunner主要由VuGen.Controller和Analysis三部分构成: 2. ...

  3. LoadRunner(一)——性能测试基础及性能指标概述

    参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.典型的性能测试场景 某个产品要发布了,需要对全市的用户做集中培训.通常在进行培训的时候,老师讲解完成一个业务以后,被培训用 ...

  4. LoadRunner(8)

    一.脚本关联技术  引入: 打开WebTours首页,点击administration连接: 具有大量管理项,LR为了模拟一些特效设置的选项,实际项目中不存在. -> 选择第三项: Set LO ...

  5. LoadRunner(4)

    一.LoadRunner工具的组成 1.VuGen 虚拟用户脚本生成器 脚本好比:武器 VuGen好比:兵工厂 VU好比:士兵 2.Controller 压力调度控制台 好比:总指挥部 3.Analy ...

  6. LoadRunner(2)

    一.性能测试的基本概念 1.并发和在线的区别:并发的压力是一种瞬时压力,一般针对同一类型业务:在线的压力是一段时间的压力,没有并发那么集中. 规律:一般20用户并发产生的压力相当于200用户在线的压力 ...

  7. LoadRunner(1)

    性能测试:HP LoadRunner11 一.初步概念: 1.功能测试:测试产品的功能是否满足功能需求. 如:ATM取款(在线取款)是否成功或转账操作是否成功 -- 一个用户 2.性能测试:测试产品的 ...

  8. LoadRunner(7)

    一.参数化策略 1.Select next row(How? 如何取?)取值方式 选择下一行 1)Sequential:顺序的 每个VU都从第一行开始,顺序依次向下取值: 数据取完可以从头循环重复使用 ...

  9. LoadRunner(6)

    一.脚本录制技术细节 1.选择合适的协议: 1)B/S架构:常用Web[HTTP/HTML]协议,如果项目中使用了其它技术,比如Ajax.JDBC.FTP等,就需要选择多协议: 2)C/S架构:常用W ...

  10. LoadRunner(5)

    一.在线综合场景测试:号称能更真实模拟实际生产环境 又称为:混合交易测试 (交易就是事务 Transaction) 1.三要素: 1)多用户:根据需求指定VU数 压力的来源 2)多任务:根据需求结合多 ...

随机推荐

  1. Jmeter安装及配置(傻瓜模式)

    接下来将以傻瓜模式进行安装,跟着流程走,没错的~ 1.首先进入到apache官网https://www.apache.org/dist/jmeter/binaries下载Windows版本JMeter ...

  2. TCP/IP和OSI/RM以及协议端口

    TCP/IP:数据链路层:ARP,RARP网络层: IP,ICMP,IGMP传输层:TCP ,UDP,UGP应用层:Telnet,FTP,SMTP,SNMP. OSI:物理层:EIA/TIA-232, ...

  3. beego项目和go项目 打包部署到linux

    参考文章: https://www.jianshu.com/p/64363dff9721 [beego项目] 一. 打包 1. 打开Terminal 定位到工程的 main.go 文件夹目录 2. 执 ...

  4. 一个memset导致的血案

    本文记录解答MIT 6.828 Lab 1 Exercise 10时遇到的一个Bug. 问题描述 在i386_init入口处设置断点并运行,发现执行memset(edata, 0, end - eda ...

  5. 《MIT 6.828 Lab 1 Exercise 7》实验报告

    本实验链接:mit 6.828 lab1 Exercise 7. 题目 Exercise 7. Use QEMU and GDB to trace into the JOS kernel and st ...

  6. hdoj3534(树形dp,求树的直径的条数)

    题目链接:https://vjudge.net/problem/HDU-3534 题意:给出一棵树,求树上最长距离(直径),以及这样的距离的条数. 思路:如果只求直径,用两次dfs即可.但是现在要求最 ...

  7. 异构平台mysql-oracle(ogg)安装部署

      如图所示:源端采用Mysql库,目标端采用Oracle库 一.OGG安装配置(源端) 1.OGG下载 https://edelivery.oracle.com/EPD/Download/get_f ...

  8. 什么是阿里云SCDN

    简介 SCDN(Secure Content Delivery Network),即拥有安全防护能力的CDN服务,提供稳定加速的同时,智能预判攻击行为,通过智能的调度系统将DDoS攻击请求切换至高防I ...

  9. 什么是云解析DNS?

    产品概述 云解析DNS(Alibaba Cloud DNS)是一种安全.快速.稳定.可扩展的权威DNS服务,云解析DNS为企业和开发者将易于管理识别的域名转换为计算机用于互连通信的数字IP地址,从而将 ...

  10. (十三)springMvc 处理 Json

    目录 文章目录 为什么用 Json 处理 json 的流程 环境准备 配置 json 转换器 后记 更新 为什么用 Json Json 格式简单,语法简单,解析简单 : 处理 json 的流程 判断客 ...