zoukankan      html  css  js  c++  java
  • 并发测试-参数化-综合场景设置-引用

    LR11 并发测试-参数化-综合场景测试(引用)

       LR11-03
    
    一、并发测试(n VU)
      1、并发测试两个条件
        1)脚本中要有 集合点(并发点)
        2)控制台中要设置并发策略(选择第一项,所有虚拟用户到达集合点后释放)
    
     集合点: 5个线程,代表5个VU 并发执行一次购票
      o------------|o------
      o------------|o------
      o------------|o------
      o------------|o------
      o------------|o------
                     此时设置集合点(并发点)
     等所有线程到达集合点时,才一起释放,此时的压力最大(瞬时压力)。
     注意:在事务开始之前,设置并发点
    
      2、并发点 只有在并发测试中使用。(在单脚本中用不到,可以注释掉,在控制台中做并发测试,要)
             案例:在脚本中添加并发点,执行并发测试
               需求:并发购票
              (1)修改脚本(VUG中)
               注意:在事务脚本之前添加
                  lr_start_transction("buy");
         在事务开始之前 -> 点击Insert -> Rendezvous
             -> 输入集合点名称Rendezvous Name: buy  一般与事务名相同
             就会生成脚本:lr_rendezvous("buy");
             -> 编译 Compile(同时会立即保存)
             注意:修改完脚本,要及时编译。
    
         打开控制台,进行并发测试。
             加载day/buy脚本。注意,如果加载后修改脚本,需要在控制台中刷新脚本。
             右击脚本文件路径 -> Details 细节 -> Refresh 下拉菜单,
                    选中Script: 刷新脚本  (很常用)
                        选中Runtime Settings: 控制台中的设置被覆盖 (不常用)
             提示:可以在控制台中,打开某个脚本  View Script 按钮
    
          脚本中发生变动(加了检查点、集合点、代码等)
            1)一定要点击编译 Compile按钮,同时也会自动保存
            2)在控制台中要刷新脚本
             (2)设置并发策略(Controller中)
        控制台中要设置并发策略:(参考:并发点策略_2.png)
    
        选择Scenario菜单 -> Randezvours...  并发点-> 打开窗口,设置策略  ->  点击Policy按钮 (策略)
             第1项:Release when 100% of all Vusers arrive at the rendezvous.   (选择此项)
                   当100%虚拟用户到了集合点时释放虚拟用户VU
                   (所有VU的n%)  10个VU 都算  10 * n%
             第2项:Release when 100% of all running Vusers arrive at the rendezvous.
                   当100%正在运行的VU到达集合点时释放VU
                   (所有正在运行的VU的n%)
                       如果10个VU只有5个正在运行,5 * n%
             第3项:Release when 1 Vusers arrive at the rendezvous.
                   指定n个虚拟用户达到集合点,再释放
                Timeout between Vusers: 30 sec
                 超时时间:两个虚拟用户之间的 (一般到不了,默认不改)
    
        完成5个VU的并发:
             控制台 -> Basic schedule -> Quantity 改为 5
             Start Vusers: 用户数少,登录时间快,不用改
             Duration: 选Run until completion  表示瞬时压力
            继续设置Run-time Settings:
                 Run Logic: 迭代次数  1
                 Pacing: 改为As soon as the previous iteration ends.
                 Log: 默认
                 Think time: 默认 忽略 Ignore think time
                      好比:不停地发请求,不给喘息时间
    
        并发测试:注意think time要忽略。
            原因:think time时间越长,对AUT的压力越缓,而并发测试是严格的测试,所以要忽略该时间。
            目的:将最大的压力模拟出来。
    
        配置完毕 -> 运行场景 -> 查看结果报告
    
    并发测试要点回顾:
         1)事务前设置并发点  
         2)控制台中设置并发策略
         3)要忽略Think time
    
    
    二、参数化
        类似于QTP的参数池,比如可以模拟不同的用户进行登录
        以不变的业务(脚本),处理不同的数据
    
        提示:如何提高技术表达能力?
            阅读大量技术评论文章,包括每天的笔记。多熟悉技术术语。
             找机会多说。
            独立写出技术文章。
    
     1、定义
        对脚本中的常量进行参数化,让不同的VU在执行相同的脚本时,分别使用参数池的不同数据替代这些常量,从而达到模拟多用户真实使用系统的情况。
    
     2、步骤:
        1)确定需要参数化的数据
        2)准备数据 (参数池)
        3)参数化
    
       先打开WebTours首页,注册一个用户qq 密码qq
         首页 -> Sign up now  开始注册
           Username: qq
           Password: qq
           Confirm:   qq
           ...不填
    
        注册后会以文件方式保存用户信息:(模拟数据库)
        C:Program FilesHPLoadRunnerWebToursMercuryWebToursusers
    
       针对buy脚本进行参数化:
        为了便于还原,备份buy脚本,
        另存为day03uy1   File -> Save As
          找到init脚本需要参数化的常量: jojo
              双击jojo 选中 -> 右击
               -> Replace with Parameter  用一个参数代替
               -> 弹出窗口:
                 Parameter name:  name    参数名称
                 Parameter type:  File   文件类型,大部分都选
                 Original value: jojo    例子
               -> {name}
              密码也类似:将bean 用同样办法替换为{pwd}
              到此,定义好两个参数。
    
        接着考虑参数的数据准备:VuGen
          倒数第2个图标按钮:Open Parameter List-> 参数池 窗口
          左侧可选择不同的参数名称,可编辑
          点击name-> Edit with Notepad 按钮 使用记事本来编辑
              name
              jojo
              qq
              注意:用ctrl+a检查 确保光标在最后一行的下一行开头
                    保存关闭
              First data: 1改为 2  从第2行开始取数据(原数据还在)
          同理:pwd也加1行值:qq
                 First data: 也改为 2(从第2行开始取数据,原数据还在)
          -> Close
          参数池数据准备完毕
    
        编译脚本 -> 运行脚本
    
        如果运行失败,根据回放日志Replay Log查看原因:
              Script Aborted! 脚本被放弃了!
        原因:其它位置(检查点函数)使用了jojo,也需要进行参数化
          选中jojo -> 右击 -> Use Existing Parameter -> 选name-> {name}
    
        新的需求:让jojo和qq各自订一张票
         首先清空AUT中jojo和qq的订票记录,观察新的结果
         在Parameter List中,First data: 1  从jojo开始取
         在Run-time Settings中:迭代次数:2 (Action)
             编译 -> 运行
         遇到的问题:jojo登录1次,订票2次
                  init和end只会执行一次,Action可以迭代多次
         解决方法:将init中的脚本剪切到Action中,参与迭代
         注意:保留原有函数的语法格式(类C语言)
             vuser_init(){
                return 0;
             }
         重新编译 -> 回放
         说明:只要不退出,就是在线,就可以一直发请求。
              LR主要关注的是数据包,而QTP主要关注的是界面。
    
     3、要点归纳
        1)参数化时,参数池中的数据写好后,要让光标停留在新的一行。
    否则可能导致出错(白行或者缺少数据)。
            技巧:ctrl + a 观察格式
        2)init只执行一次,Action参与迭代,在参数化时需要注意。
        3)LR依靠网络协议录制脚本,脚本中记录的是请求数据包信息,只要用户在线(登录成功),则可以继续发送请求到达任意界面,也可实现循环操作。
    
     4、参数池的策略初步(Parameter List窗口中设置)
         特点:功能强大,LR产品的一个卖点(出彩) BS/MS题 拔高点
        1、Select next row (取值方式 How?)
           Sequential  顺序的(默认) 取完第1行,取第2行...
           Random   随机取
           Unique    唯一取
           Same line as pwd..   和xxx步调一致pwd取法一样
        2、Update value on (更新方式 When?)
           Each iteration   每次迭代时取值 (取值)
           ...
    
    作业:
    1、对于查询订单,进行基准测试和5用户、10用户的并发测试,并记录其平均响应时间。(生成3项)
    2、回顾之前所有内容(尤其是测试理论、数据库)
    
    
    一、继续学习参数化
      案例:注册30个用户,脚本要求:
        1)脚本中一定有检查点
        2)保证30个用户全部成功
        3)用单机执行还是控制台? 使用单机VuGen
        原因:使用VuGen 单机,压力较缓,容易成功。
               测试数据,尽量不用控制台
        提示:1VU,使用迭代
        每注册1个用户,会在C:Program FilesHPLoadRunnerWebToursMercuryWebToursusers中会多1个以新注册的用户名 命名的文件
    
      先准备用户数据:使用Excel 设计 qq1~qq30   1~30
      开始录制注册脚本:
         New ->  New Virtual User界面说明:
          左侧:
          New Single Protocol Script 新的单协议脚本(较简单)
          New Multiple Protocol Script 新的多协议脚本(较复杂)
          New Script Recent Protocol 刚打开过的协议
          上方:
          Ajax..异步通信,局部刷新支持、
          Flex 就是Flash动画协议、
          Oracle[2-Tier]两层协议、
          Oracle NCA 是.Net新技术、
          Web Services技术(异构平台之间互操作  C <--> Java)
          最常用的:Web[HTTP/HTML] 协议
    
         Create -> 输入URL -> Action 注册需要迭代 -> OK
         等待events数字不动后 (页面下载完毕)
         -> 点击Sign up now
         -> 输入Username: www   Password: 1  Confirm: 1
         -> 开始事务reg -> Continue -> 进入欢迎页面
         -> 插入检查点: Thank you, www, 
         -> 结束事务reg
         -> 切换为vuser_end -> 点击Continue -> Sign Off
         -> 关闭浏览器 -> Stop
    
      保存脚本:script/day04/reg
        将脚本进行备份:另存为day04/reg1    File-> Save as ...
          提示:LR脚本编辑器有局限,撤销ctrl+z 步数是有限的。
          技巧:多备份
    
      配置方法(2种)
      方式一:做两个参数池 name 和 pwd
          双击www选中 -> 右击 -> Replace with a Parameter 
            -> 命名 name -> {name}
          双击 1 选中 -> 右击 使用参数代替 -> 命名pwd -> {pwd}
          双击 1 选中 -> 右击 Use Existing Parameter 
           使用已存在的参数 -> 选中 pwd -> {pwd}
          再检查需要替代的固定值:检查点中需要替换
           双击www -> 替换成已存在的 {name}
    
        将参数池添加完整:
         Open Parameter List... -> 进入参数池配置窗口
         先填name -> 将Excel中的name值拷贝 -> name.dat  
           -> Edit with Notepad   name后粘贴   qq1~qq30
         再填pwd -> 拷贝1~ 30 -> pwd.dat
           -> Edit with Notepad   pwd后粘贴  1~30   注意格式!(光标在最后1行开始,用ctrl+A检查)
         关闭窗口
    
         准备运行脚本(不用打开控制台)
            -> 打开Run-time Settings:
              Run Logic -> Number of Iterations: 10  
              Pacing -> 选第2项:random 随机 2 ~ 3 秒
                After the previous iteration ends:with a random delay of 2.000to 3.000 sec
               提示:机器配置高,一般配置2~3秒;若配置低,延长些:6~9秒
              Log 不变 当前是标准日志,如果让日志更详细,可使用扩展日志
                      Standard Log  标准日志
                    Extended Log  扩展日志                 选择
                    Parameter subsitution 进一步查看 参数替代信息  选择
              Think time -> 单选 Replay think time 
                -> Use random percentage of recorded think time:
                   Min: 50%    Max: 150%
                根据录制时间给出百分比,比如录制10秒,50%到150%就是5到15秒
                    原因:(做数据,要保证成功)
         配置完成,开始运行...
            10次迭代,大约10分钟、
        方法一的局限:如果是1个大型项目,用户名和密码较多,多个用户名和密码一般在一起
        问题:2个参数值,能否写在一起?
        解决:name.dat、pwd.dat-》xxx.dat(分列方式)采用方式二
      方式二:将两个参数表的参数放在一起。
         name的本质:就是一个name.dat文件 进入脚本文件夹 打开
         将reg另存为reg2    File -> Open -> reg
    
         做两个参数池:{name}  {pwd}
           选中www -> 替换为参数 -> {name}
           选中1   -> 替换为参数 -> {pwd}
           选中1   -> 使用已有的代替 -> {pwd}
           检查点 选择www -> 使用name代替 -> {name}  
    
         Open Parameter List... -> 配置参数池
           选择name -> Add Column  加列 -> 起列名 pwd  名字任意
               Edit with Notepad 编辑文本 
               -> 大量替换:将Tab字符全部替换成逗号,  -> 关闭
                name,pwd
                qq1,1
                qq2,2
                ...
                qq30,30
              此时,完成两列数据写在一个文件中。
              在File format中,默认指定Column: Comma  逗号分隔
                    还可以选择:Tab 制表符 或 Space 空格
           选择pwd参数 -> File 选成 name.dat 共享一个文件
              之后针对name和pwd选择列:
              Select column: 两种办法
                 By number: 1   列号    name选1  pwd选2
               或By name: 根据列名指定
              避免数据重复,First Date都从11行开始
              -> Close  编译
          打开Run-time Settings:
            Run Logic: 迭代 10次
            Pacing: 第2项 随机 2~3秒
            Log: 选择扩展日志,进一步查看参数替代信息
            Think time: 单选Replay think time
                        使用随机的 50%  150%
         配置完成 -> 运行脚本
    
      结论:推荐使用第二中方式,比较常用。
        (曾经的一道上机题,主要考察参数化、关键是参数池策略)
    
    二、参数池的策略 (BS/MS题:讲讲参数池的策略)
      1.参数化:(关心的是数据)
          1)、含义:同样的业务,出现不同的数据,考虑采用脚本参数化技术
          2)、步骤:
              确定参数化的数据-->准备数据->提供策略-->参数化
          3)、准备数据 (目前:File方式)
            <1> 每个参数使用独立文件 (参数池)
            <2> 多个参数共享同一个文件 (常用)
              Excel工具、Column(序号、列名)、First Data(从哪开始)
          4)、参数池策略 (重点、难点)
             Select next row:  选择下一行(How?如何取?)
                 a) Sequential   默认 顺序的
                 b) Random      随机取
                 c) Unique       唯一取
                 d) Same line as xxx   和xxx步调一致
             Update value on: 更新方式(When?何时取)
                 a) Each iteration    默认  每次迭代
                 b) Each occurrence  每次遇到该参数时取值
                 c) Once  取值仅一次
            When out of values: 数据不足时的处理情况
                 a)放弃虚拟用户  Abort Vuser
                 b)以循环的方式继续  Continue in a cyclic manner
                 c)持续取最后一个值  Continue with last value(原地踏步)
    
    
    
            1、选择下一行 (How? 如何取?)Select next row
                1)顺序的 Sequential :从第一行开始顺序向下取值
                2)唯一的 Unique: 从第一行开始,唯一的向下取值
                            (用过了,就取新的值)
                       例如:数据a b c d e f g ...,现有3个用户(甲乙丙)取值;循环2次。
                    A) 顺序方式:甲(a, b) 乙(a, b) 丙(a, b)
                    B) 唯一方式:甲(a, b) 乙(c, d) 丙(e, f)
                             如果是注册,采用唯一方式,用过了就不能再用
                    c) 对于单用户来说,顺序和唯一取值序列是相同的。
                3)随机的 Random: 随机取值。(值可能重复)
                4)Same line as xxx: 取值策略与xxx相同  (行相同)
            2、更新方式(When? 何时取?)Update value on
                1)每次循环 Each iteration: 每次迭代时取值 (常用)
                     指的是:Action中的脚本,每次迭代时更新值
                2)每次遇到 Each occurrence: 每次遇到该参数时取值
                     指的是:比如每次遇到{name}时,都会换一次值
                3)取值一次 Once: 脚本运行过程中只取值一次
                     值的是:一次选择,终身不变
                另外,When out of values: 当选择Unique时才出现,表示取值越界后的处理方式
            3、数据不足时的处理情况(只有选择Unique时适用)
                说明:顺序、随机时认是数据时充足的
                规律:当选择顺序方式时,数据取到最后一行,再循环从第一行选取。
               When out of values: 有三种策略
                    1)放弃虚拟用户  Abort Vuser
                    2)以循环的方式继续  Continue in a cyclic manner
                    3)持续取最后一个值  Continue with last value(原地踏步)
    
         5)、需求:注册脚本,多用户,则数据池取值策略?
            注册脚本,多用户 --- UEA组合(Unique+Each iteration+Abort Vuser)(唯一+每次迭代+放弃虚拟用户)
              另外常见的组合:-----SE组合(Sequential+Each iteration)(顺序 + 每次迭代)
      Parameter List窗口中:
    
    
    
    三、综合场景测试 --- 号称能够最真实的模拟实际生产环境
    
    综合场景案例1
        综合场景的几个要素:
            多用户、
            多个脚本(至少3个)、
            在线执行(多种操作)一段时间(1小时、50分钟等),一般是不加并发点。
        注意:只要是多用户,就存在并发
              综合场景测试过程中,所有用户循环执行相应的操作。
    
      1、录制三个脚本(测试点):购买机票、查询线路、浏览航班;每个脚本都加检查点(手工)。准备进行综合场景。
    
        首先做一个设置:(目的:为了让页面标题变为自动的检查点)
            VuGen中 点击录制选项按钮 Edit Recording Options 
                General-> 选择第三项 Recording  脚本录制方式 不用改  (默认选择HTML方式)
            HTTP Properties-》选择HTML Advanced高级 ->
                选择Preferences复选框:
                      Generate web_reg_find functions for page titles
                    为页面标题生成检查点函数
                          再选择:Support charset -> UTF-8  对中文网站支持比较好
             -> OK
             以后都可生效。
    
            练习:录制一个登陆脚本,查看配置效果
                 新建脚本 -> OK -> 输入jojo和bean 
                 -> 开始事务login -> 点击Login按钮 -> 结束事务login
                 -> 插入检查点"Welcome, jojo, to the"
                 -> 改为vuser_end  -> Sign Off -> 关闭浏览器 -> Stop
    
            发现:web_reg_find("Text=Web Tours", LAST);
            每个页面都有,只验证页面的标题。比如:跳转到错误页面,则标题是不同的。
            规律:虽然在事务结束后,插入检查点,由于web_reg_find函数是注册性函数,
                所有还是在相应请求之前。
    
        开始练习录制脚本:day05目录下/ buy search  scan
        (1)购买机票  buy
             录制过程和之前一样,注意添加检查点、事务点
        (2)查询路线  search
             New脚本 -> vuser_init -> 输入jojo和bean
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action -> 点击Flights按钮
             -> 选择城市从Denver到 Paris  -> 开始事务search
             -> 点击Continue -> 添加检查点 "Denver to Paris"
             -> 结束事务search
             -> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
        (3)浏览航班  scan
             New新建 -> 改为vuser_init -> 输入jojo和bean
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action -> 开始事务scan -> 点击Itinerary按钮
             -> 设置检查点 "A total of" -> 结束事务scan
             -> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
    
        注意:检查点会浪费性能,所以手工添加检查点时,只需1~2个即可
        场景设置的前提:确保脚本录制、调试、回放成功。
    
      2、需求:10用户综合场景
        综合场景设置要求:
            1)修改脚本:
            2)设置场景:
            3)虚拟用户加载部署情况:
            4)Run-time Settings设置
    
    
        1)修改脚本:
          脚本事务中的think time时间要删除或或者移到事务之外。
          原因:如果综合场景测试保留think time,在事务之内会起作用,从而影响事务的响应时间,导致结果不准确。
    
        操作:对三个脚本都要移动 buy  search  scan
            (包括:init、Action、end都要找遍)
          lr_think_time(25);
          lr_start_transaction("login");
          ...其中没用思考时间...
          lr_end_transaction("login", LR_AUTO);
    
        注意:修改后脚本都需要重新编译
            如果脚本中有并发点,要注释掉;因为综合场景中有并发,但是不需要产生瞬时压力,无需设置集合点。
            //lr_rendezvous("buy"); 
    
        2)设置场景:
          打开控制台 -> New Scenario -> Browse 浏览 找到具体的脚本
          -> 依次选择 day05/下的三个脚本 -> OK
          -> 进入场景配置界面 保证3个脚本都打钩
          -> 单选 Basic schedule
          Group Name 默认就是脚本名   Quantity
            buy.3                             2
            search                            4
            scan                              4
          一共10个VU,保持合适的比例,平时根据客户的需求
    
        接着还需处理Scenario Schedule:
          Schedule by: 
            Scenario  默认按照场景方式 (选择)
                          特点:所有脚本共享同一场景
                    按场景:场景中,多个VU统一配置、行动 
               或 Group 按组方式,分组设置场景
                按组:每个组,组内VU统一行动 (按组行动)
    
        重点设置左下角Global Schedule:
             以上三个脚本都选中,一次配置三个(出现黑框) ->
             Start Vusers双击-> 设置一个小的递增  单选第2项
             ->  1     00:00:01 [HH:MM:SS] -> OK
                 每隔1秒钟加载一个VU
             -> 及时观察右边效果图:锯齿状
    
         Duration 双击
             -> 单选第2项:Run for 0 days and 00:30:00 (HH:MM:SS)
             -> OK  确定指定的时间 30分钟 (项目中一般50分钟、1小时)
              如果第1项:Run until completion 直到结束,适合于循环,确定次数;
              如果第3项:Run indefinitely  一直跑,直到手动停止
    
        虚拟用户加载部署情况:
            A)每隔1秒钟加载1个VU
            B)Duration: 30分钟
            说明:由于Duration运行的是Action部分,
                所以指的是VUs登录后运行30分钟。10个虚拟用户,10个线程,各自运行,模拟实际生产环境。
    
        3)Run-time Settings设置
            设置左上角按钮:Run-time Settings (细节较多)
              选择三个脚本(出现黑框)-> 点击按钮 Run-time Settings
             ->弹出窗口,选择“多”运行模式  RTS的简写 
                   Share RTS 共享  / Individual RTS 独立的
            先选择Individual RTS 独立的,会依次配置每个脚本,配置完某个脚本会自动打开窗口配置后续的。
            1)General
             Run Login -> Number of Iterations:  1  不变
            Pacing -> 改为第2项After the previous iteration ends:  随机间隔2~3秒
            Log -> Enable logging (选择)
                     Log options:
                           Send messages only when an error occurs 出错时才发日志(选择)
                           Alwarys send message  总是发日志
                         Log message at the detail level of:
                               Standard log  标准日志(选择)
                               Extended log  扩展日志
    
             Think time: 随机百分比,可以适当调大些  
                     Use random percentage of recorded think time:
                       Min: 200%    Max: 300%
              Additional attributes:  附属选择/特殊参数值,目前不配置
              Miscellaneous:  杂项
                     Error Handling中 -> Continue on error  打钩 出错时继续
                  原因:长时间测试过程中会执行大量的事务,不要因为某个错误而停止场景的运行。
                    说明:
                 a)Error Handling中:
                  Continue on error    出错时继续(选择)
                      Fail open transactions on lr_error_message  使用不多
                      Generate snapshot on error 出错时,生成快照,使用不多
                          原因:会增加工具资源消耗,影响测试结果
                   b)Multithreading中:    Thread 线程
                    Run Vuser as a process  以进程方式 (比较消耗资源)
                    Run Vuser as a thread  以线程方式(比较省资源)默认(选择)
                   c)Automatic Transactions中: 自动定义事务 (不设置)
                    Define each action as a transaction:  
                           每一个Action都作为一个事务,比如:脚本中有3个
                    Define each step as a transaction:
                           每一个步骤都作为一个事务(每一句代码,产生过多的响应时间结果)
                       过于热闹,主次不分,出现过多的响应时间结果
            2)Network 
                Speed Simulation -> Network Speed  模拟网速
                    Use maximum bandwidth: 使用最大带宽 (选择)
                              准备一个充足的带宽,将最大压力呈现给服务器
                        Use band 使用选择的带宽
                        Use custom bandwidth(bps): 使用用户自定义带宽
            3)Browser 
                 Browser Emulation -> 模拟浏览器
                Browser properties  属性配置
                    User-Agent 浏览器信息...
                         Simulate browser cache 模拟浏览器的Cache 缓存
                           目的:提高客户端的浏览速度  -> (去掉打钩!)  
                            Cache URLs requiring content [HTMLs]
                        Check for newer versions of stored pages every visit to the page.
                    Download non-HTML resources 下载非HTML资源 (打钩)
                    Simulate a new user on each iteration 模拟新用户(打钩)
                        Clear chache on each iteration 每次迭代清缓存(打钩)
            4)Internet Protocol 
                Proxy:  No proxy 默认不要代理 (默认打钩)
                      Use custom proxy 如果使用公司代理服务器,则选择
                  Preferences:  都不要改
                       -> Options... 打开 -> 将三个120改为600
                        指的是超时时间,保证充分时间,达到成功
                包括:HTTP-request connect timeout(sec) -> 600
                       HTTP-request receive timeout(sec) -> 600
                       Step download timeout(sec)          -> 600
            点击OK后 -> 开始第二脚本的设置(和之前一样,复习一遍)
         依次完成:buy.3、 search、 scan的设置。
    
        run-time settings设置总结:
          说明:迭代次数默认1 具体次数由持续时间决定
            (1) pacing: 随机4-6秒 或 5-9秒,选择第2项
                  正常:2-3秒,教学机较慢,设置偏大些,保证不出错
            (2) 日志log: 保留原有选项(出错时发送)
                  原因:大量日志也会占用磁盘空间。
            (3) Think time: 随机百分比,适当调大 200% - 300%
            (4) Continue on error: 错误时继续
                  原因:长时间执行大量事务,个别出错继续运行,不影响全局。
            (5) Vuser选择 线程 方式。节省系统资源
            (6) 网络:模拟用户的网络,使用最大带宽
            (7) 模拟缓存:选择不模拟
                   使用场合:1、对AUT实施严格测试  2、门户网站
            (8) Option 选项:3个120改为600
                   一般疲劳测试设置600足够了。
            (9) 选择监控AUT服务器资源时注意:
                网络选loopback(回环,前提当前服务器为本机;如果服务器不是本机,一定不能选回环);
                选择磁盘(或CPU)资源时,遇到total就选total.
            (10) 加完资源,就可以运行场景。
        4)Windows resources配置
          (Run视图 右下角窗口)
           右击窗口-> 
           Add Measurements... ->
              Monitered Server Machines: 选机器  点击Add.按钮 ->
                    Machine Information:
                           Name: localhost  指定监控服务器的IP地址,主机名
                                   目前就是本地主机
                           Platform: WINXP
           -> OK
             Resource Measurements on: localhost  清空里面所有选项
    
               自己完成选项的添加(固定13项)
              -> 点击Add按钮 -> 选择以下内容:
               1)Memory中有4项:(内存)
                 Available MBytes            -> Add
                 %Committed Bytes in Use   -> Add
                 Page Faults/sec              -> Add
                 Pages/sec                    -> Add
               2)Network Interface中有2项: (网络)
                 Bytes Total/sec -> MS TCP Loopback inter...回环-> Add
                         本地主机才选回环
                 Packets/sec     -> MS TCP Loopback inter...回环-> Add
                         本地主机自己和自己通信,用回环
               3)PhysicalDisk中有4项(2个队列):(磁盘)见到Total就选
                 Avg.Disk Queue Length      ->  Total  -> Add
                 Current Disk Queue Length  ->  Total  -> Add
                 Disk Read Bytes/sec         ->  Total  -> Add
                 Disk Write Bytes/sec        ->  Total  -> Add
               4)Processor中有2项:(进程)
                 %Processor Time    -> Total  -> Add    Total表示总和
                 %User Time         ->  Total  -> Add
               5)System中有1项: (系统)
                 Processor Queue Length   -> Add
               -> OK
               以上一共13项,先了解名字,后续再强化。
        5)-> 加完资源,可以运行场景
            点击Start Scenario
    
        注意:运行过程中如果有错误,观察Scenario Status中的Errors 部分  0  (点开链接,寻找出错原因)
            如果是场景设置问题,需要重新设置场景,重新运行
            如果是脚本的问题,需要停止场景并调试脚本,重新运行
    
        运行过程中,要关注几幅图的含义:
            Running Vusers - whole scenario:
                表示整个正在运行的虚拟用户 10个
            Trans Response Time - whole scenario:
                表示事务响应时间,比如蓝色线表示login,较短表示所有虚拟用户全部登录了,点击某条线看到具体信息
            Hits per Second - whole scenario:
                表示点击率,刚开始比较高,后来平稳了,因为刚开始有登录操作,看性能,主要看折现是否较陡,或看单位时间内的情况
            Windows Resources - Last 60 sec:
                表示
    
        注意:
          a)当场景中Duration到达指定时间时,会向所有的VUs发出退出系统的指令,所有VUs要运行完当前的Action后,退出系统。
    
          b)错误查看方式:
            如果发现Error,点击打开Output窗口,选中错误 -> 点击Details按钮-> 显示错误的详细信息
          c)如果场景中监控服务器资源为负值,不是问题。不需要停止场景。
            如果发现设置不合理,或者脚本错误导致场景中出现大量错误,则需要停止场景,重新调试脚本,刷新,部署好,再运行。
    
        监控的服务器资源出处:
             控制面板 -> 管理工具 -> 性能 -> 添加计数器
        5)打开Analysis,保存结果报告,之后再分析
            将场景文件保存:day05ctrl10用户综合场景测试
            将结果报告保存:day05
    esult10用户综合场景测试 之后分析
    
    
    综合场景案例2:(先思考)
    1、使用手工设置方式进行综合场景测试,11用户,
        其中一个用户执行注册脚本,注册得到的用户名为其它脚本提供数据池(测试数据)。
    2、综合场景中的脚本:
        注册reg、
        购买机票buy(登录时:用户名、密码要做参数化 共享参数池name.dat UEA组合:唯一+每次迭代+放弃VU)、
        搜索航班search、
        浏览路线scan
      注意细节:
         注册需要先执行,获取参数池的数据,该数据也被buy脚本共享
         登录脚本需要放到Action中,参与迭代
         注册先于其它开始执行,采用Group组方式:
            选中“注册”->点击Start Group->Action type Start Group
            第1项:Start immediately after the scenario begins
                当场景开始时马上开始
            第2项:Start _(HH:MM:SS) after the scenario begins
                当场景开始__时间后才开始
            第3项:Start when group—__finishes(关注此项)
                当某个脚本执行完后再执行
            意味着:在Scenario Schedule中, 
    
    
            Schdule by: 将Scenario换成 Group方式
        注意:4个脚本需要单独设置场景
    
    操作说明:控制台中四个常用按钮
        运行、Run-time Settings、脚本修改后的刷新、从场景中打开脚本
        (脚本运行出错,从场景中直接打开脚本:Design -> View Script
         从错误提示信息中也可打开,直接定位到出错的位置)
    
     1、录制脚本,添加事务、检查点、参数化 (保存在day06中)
        (1)reg脚本   注册
            录制过程:
                 New -> 选Action -> 点击Sign up now 
                 -> 输入Username: tom  Password:1   Confirm: 1
                 -> 开始事务 reg ->  Continue -> 进入欢迎页面
                 -> 插入检查点 "Thank you, tom" -> 结束事务
                 -> 切换成vuser_end -> 点击Continue
                 -> Sign Off退出 -> 关闭浏览器 -> Stop 
    
             参数化 name和pwd,在name.dat中,使用ww1~ww11,检查光标停留在下一行:
                 name,pwd
                 ww1,1
                 ww2,2
                 ...
                 ww11,11
             使用的参数化策略:
               针对name:  (UEA组合)
                 Select next row: Unique 从第一行开始唯一向下选取
                 Update value on: Each iteration  每次迭代时更新
                 When out of values: Abort Vuser 放弃VU
               针对pwd:
                 Select next row: Same line as name  和name步调一致
             注意:修改后记得编译
    
        (2)buy脚本   购票脚本
             注意:将登录操作也录制在Action中,目的是便于按照SE组合取参数池的数据。
             录制过程:
                 New -> 选择Action -> 输入jojo和bean 
                 -> 开始事务login -> 点击Login -> 欢迎页面:
                 -> 插入检查点"Welcome, jojo," -> 结束事务login
                 -> 点击Flights -> 选择城市Denver 到 London
                 -> Continue -> Continue -> 开始事务buy -> Continue
                 -> 插入检查点"Denver for London" -> 结束事务buy
                 -> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
    
             参数化:
              将参数池准备好,拷贝reg目录中name.dat到buy目录中
              针对name: (以后常用的SE组合 80%情况)
                选择文件name.dat
                Select next row: Sequential  顺序的
                Update value on: Each iteration 每次迭代时
              针对pwd:
                选择文件name.dat
                By number: 2
                Select next row: Same line as name
    
        (3)search脚本
             New -> vuser_init -> 输入jojo和bean 
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action  -> 点击Flights按钮 
             -> 选择城市从Denver 到 Paris -> 开始事务search
             -> 点击Continue -> 添加检查点"Denver to Paris" 
             -> 结束事务search
             -> 改为vuser_end -> Sing Off -> 关闭浏览器 -> Stop
    
        (4)scan脚本
             New -> 改为vuser_init -> 输入jojo和bean
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action -> 插入事务scan -> 点击Itinerary按钮
             -> 设置检查点"A total of" -> 结束事务scan
             -> 改为vuser_end -> Sing Off -> 关闭浏览器 -> Stop 
    
        (5) 注意:检查所有脚本,对lr_think_time(..)进行调整,移动到事务之外。全部都编译一次。
               检查buy脚本中的参数池数据,要和reg脚本中的保持一致。
            到此,脚本录制、调试完成。
            
     2、打开控制台,配置综合场景
         创建一个新的场景,Browse加入day06下的4个脚本:reg、buy、search、scan
         选择Schedule by: Group模式 (组模式)
         注意:依次选择每个脚本,选择Run Mode: -> Basic schedule(不能只点1次,要点4次,分别设置)
           Script Path            Quantity
             reg.1                   1
             buy                     2
             search                  3
             scan                     5
    
         注意:由于使用Group组模式,(左下角)每个脚本要逐一设置:
        (1)reg脚本(选中)1人
             Start Group: 改为Start immediately after the scenario begins (在场景启动后,立即开始)
             Initialize: 不变 Initialize each Vuesr just before it runs
                         (在每个VU开始运行前初始化)
             Start Vusers: 不变 Start all Vusers simultaneously
                         (所有VU同时开始)   因为就1个VU
             Duration: 不变 Run until completion (运行直到结束)
    
            打开Run-Time Settings:
                 Run Logic: 循环11次    
                 Pacing: 选中第2项 随机random  2~3秒
                 Log:   默认不变
                 Think time:  50%   150%
                 Miscellaneous(杂项):Errror Handling 不选择Continue on error
                    原因:目前是做数据,如果出错,就不能继续往下跑,以免影响后续脚本执行。
                 Speed Simulation: 速度模拟 (不变)
                 Browser Emulation: 选择Simulate browser cache 
                   原因:做数据测试,利用缓存cache容易成功
                 Proxy: 代理 (不变)
                 Preferences:  Option参数 (先不动)
                 (其余的都不动)
    
        (2)buy脚本 (选中)2人
             Start Group: 选第3项 Start when group reg.1 finishes
             Initialize: 不变  在每个VU开始运行前初始化
             Start Vusers: 1 Vusers every 00:00:01 (HH:MM:SS) (每隔1秒加载1个VU)
                          由于目前VU就2个,数量较少:(採用)
                              可以保持不变 Start all Vusers simultaneously
             Duration: 选第2项 Run for 0 days and 00:30:00(HH:MM:SS)                   (持续运行30分钟)
    
             (注意:觀察Total:2 Vusers 要和Quantity一致)
    
        (3)search脚本 (选中)3人
             Start Group: 选第3项 Start when group reg.1 finishes
             Initialize: 不变  在每个VU开始运行前初始化
             Start Vusers: 1 Vusers every 00:00:01 (HH:MM:SS)
                              (每隔1秒加载1个VU)
             Duration: 选第2项 Run for 0 days and 00:30:00(HH:MM:SS)                   
                     (持续运行30分钟)
    
        (4)scan脚本 (选中) 同search脚本     5人
    
        (5)查看配置效果图:
            reg.1 虚线表示时间不确定
            其它3条平行线  纵坐标:0  1  2  3  5(表示虚拟用户数)
    
        (6)
            注册reg的Run-time Settings已经单独设置好了,
            继续统一设置其它三个:选中buy、search、scan 
    
                 -> 设置Run-Time Settings -> Share RTS方式 (共享方式)
                  Number of Iterations: 1
                  Pacing: 选第2项 随机random 2~3秒
                  Log: Send messages only when an error occurs 出错时发送
                  Think Time: 随机 100%  200%
                  Miscellaneous(杂项):
                     Error Handling: 只选中 Continue on error
                     Multithreading: 选择Run Vuser as a thread 以线程方式
                  Speed Simulation:  最大带宽 Use maximum bandwidth
                  Browser Emulation: 不选择 Simulate browser cache
                                       原因:进行比较严格的测试
                          选择 Download non-HTML resourses
                          选择 Simulate a new user on each iteration
                              选择 Clear cache on each iteration
                  Proxy: 代理  不要代理  
                          选择No Proxy(direct connection to the Internet)
                  Preferences: 暂时不选 Enable Image and text check
                          Options 参数 (后续单独设置)
                  其余不动 -> OK
    
            (7)之后依次buy、search、scan 设置Options:
                   选择buy脚本 -> Run-time Settings -> Preferences:
                   ->Options... 打开
                   ->将三个120改为600 指的是超时时间(时间充足,保证成功)
                   包括:HTTP-request connect timeout(sec) -> 600
                          HTTP-request receive timeout(sec) -> 600
                          Step download timeout(sec)         -> 600
                   同样设置search和scan脚本...
    
            (8)    最后配置Windows Resaources: 13+1项  (Run视图 右下角)
                   补充:Memory中  Page Reads/sec (页面读取率)
    
                 13项参考之前的笔记:(资源图.doc)
                   右击窗口-> Add Measurements... ->
                  Monitered Server Machines: 选机器  点击Add.按钮 ->
                    Machine Information:
                       Name: localhost  指定监控服务器的IP地址,主机名
                                           目前就是本地主机
                       Platform: WINXP
                    -> OK
                  Resource Measurements on: localhost  清空里面所有选项
                   自己完成选项的添加(固定13项)
                  -> 点击Add按钮 -> 选择以下内容:
                   Memory中有4项:(内存)
                     Available MBytes            -> Add
                     %Committed Bytes in Use   -> Add
                     Page Faults/sec              -> Add
                     Pages/sec                    -> Add
                   Network Interface中有2项: (网络)
                     Bytes Total/sec -> MS TCP Loopback inter...回环-> Add
                             本地主机才选回环
                     Packets/sec     -> MS TCP Loopback inter...回环-> Add
                             本地主机自己和自己通信,用回环
                   PhysicalDisk中有4项(2个队列):(磁盘)见到Total就选
                     Avg.Disk Queue Length      ->  Total  -> Add
                     Current Disk Queue Length  ->  Total  -> Add
                     Disk Read Bytes/sec         ->  Total  -> Add
                     Disk Write Bytes/sec        ->  Total  -> Add
                   Processor中有2项:(进程)
                     %Processor Time    -> Total  -> Add    Total表示总和
                     %User Time         ->  Total  -> Add
                   System中有1项: (系统)
                     Processor Queue Length   -> Add
                   -> OK
                   再追加一项:
                   Memory中:Page Reads/sec  页面读取率
                   以上一共14项,先了解名字,后续再强化。(高级部分)
    
                -> 加完资源,可以运行场景
                点击Start Scenario
    
    二、综合场景测试设置要点
        1、Continue on error: 
         (Run-time Settings -> Miscellaneous杂项中 Error Handling)
            1)综合场景测试过程中要选择该项
            2)做测试数据时(数据参数化的时候),由于要保证数据成功,失败应及时停止场景,所以该项不要选择
    
        2、模拟浏览器的Cache:   缓存
            1)综合场景中如果严格测试,不选择
            2)如果做测试数据,利用Cache容易成功,需要选择。
    
        3、监控资源时,添加一些:Page reads/sec   页面读取率
    
            思考:正常的性能测试,两人参与:
                 一人负责场景的启动;一人负责监控Linux的系统资源
                 问题:是场景先启动,还是Linux系统资源监控先启动?
    
        4、在场景启动之前,服务器资源监控应该提前启动。确保资源(服务器)连接无误后,再开始场景。
    
        5、在综合场景启动时开始,要密切关注,必须保证所有用户全部上线(登录成功),才称为多用户在线综合场景。
    
        6、当所有用户上线后,也要密切关注,控制台中各个主要的图表,当图表走势不正常时,代表系统不稳定,要及时查找原因,如果是综合场景设置的问题,甚至是脚本的问题,要及时停止场景,调试后重新测试。
    
        场景运行结束后 -> 打开Analysis -> 将结果文件保存:
            result/day06/11用户综合场景_reg  后续还会分析
    
        关注:
            Transaction:
             Transaction Name  事务名称
             Minimum   最小值
             Average   平均值
             Maximum  最大值
             Std. Deviation    标准方差值
             90 Percent        90% 响应时间
    
    三、报告讲解
        1、90 Percent响应时间:表示该组中90%的用户都能在该时间内响应(完成该操作)
    
         90 Percent 表示90%的用户在 0.xxx 秒内完成操作
         可以通过Properties中 Percentile  90
         可以修改 -> Additional Settings -> Transaction Percentile
           若改为80,表示80%的用户。 再改回90%
    
        2、一个事务,100用户执行,其中一个用户执行时间1000秒,其他99%的用户响应时间为0.001秒。
         则该情况下90% 和 平均响应时间 哪个更准确? 90 Percent
    
        3、标准方差值:越小越好。越趋近于0,表示所有用户执行该事务的响应时间越接近,表示系统越稳定。
        (数学中知识)
         Mininum   Average   Maximum    Std.Deviation
          0.203    0.313      0.404         0.095
    
          说明前面几个值比较接近,比较稳定。
    
        4、网络带宽充足的情况下,当吞吐量(Throughput)随着点击率(Hits per second)的升高而升高,说明AUT的服务器处理能力充足。
    
        高级部分再继续分析结果报告。
    
    四、LR流程
        1、性能测试的基本概念
    
        2、LR的三大组件协同工作(基准测试、并发测试、综合场景测试)
    
        3、三大组件:(加* 表示高级部分  **扩展部分)
        1)脚本生成器(录制、事务、检查点、并发点、参数池、参数池策略*、关联*)
         后续详细讲解:参数池策略、脚本关联技术
    
        2)控制台(基本参数设置、后续细化研究*)
    
        3)结果生成器(简单查看结果[服务器资源分析*]、性能测试综合分析*--瓶颈定位*--性能调优*)**
    
        4、整个系统的性能分析 **
    
    五、为了使网站的页面响应速度更快,可以将页面中图片、视频、音频等元素尽量减少,进而减少客户端向服务器的访问次数,减少传输信息,加快访问速度。
    
    六、脚本录制
        1、选择协议,如果正常协议(Web)无法成功录制脚本,可以根据系统(如C/S系统),选择Winsock协议(万能协议)。
        说明:C/S系统越来越少,逐步被B/S取代,大部分都是Web项目
    
        测试脚本的主要部分: 4部分
            vuser_init     初始化  仅执行一次
            Action         核心脚本 可多次
            vuser_end     结束脚本  仅一次
            global.h       头文件 包含重要函数的声明
    
        2、LR的脚本中Action越少越好,便于性能分析。 
            对比:QTP中的Action较多,因为功能多
    
        3、性能测试中AUT的服务器(应用服务器、数据库服务器),要分开部署。
            原因:便于性能分析,大多数问题一般是数据库服务器的性能问题
    
        案例(了解):录制多Action  将多个功能放在不同Action中
        思路:边录制边添加
            New -> 改为vuser_init -> 输入jojo和bean -> Login
             -> 点击按钮 Create New Action 增加Action -> 修改名字 buy
             -> 开始订票 选择城市 -> continue -> continue -> continue 
             -> 再加一个Action  修改名字scan -> 点击 Itinerary 浏览路线
             可以继续添加...
             -> 退出系统 -> 关闭浏览器 -> 结束录制
    
        4、VUG中窗口内容:
            1)脚本(上部)中记录的是客户端的请求。
               (请求:网页、图片、链接、表单提交)
            2)Replay Log: 记录脚本回放(执行)日志。(较常用)
            3)Recording Log: 记录LR客户端和服务器二者之间对话的数据包大小。 (较少使用)
            4)Generation Log: 记录LR客户端和服务器二者之间全部对话。
              (关联技术时经常使用)
            说明:Correlation Results 自动关联是的结果 (关联时介绍)
    
        5、脚本中的LR函数,LAST是函数的结束符。
    
    作业:
    1、综合场景测试(课上练习:按照场景方式--最常用、重要)
      10用户综合场景、11用户综合场景_reg
    
    2、知识点复习:基准测试、并发测试、综合场景
    
    3、预习参数池策略
    
    4、重要的笔试题
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    笔试题:
      1、LR脚本为何要做检查点?你能写出的检查点函数?
        (文法:LR执行报告中显示Pass,是否说明脚本执行正确?)
         LR执行报告中的Pass只表明服务器已经接收到客户端请求包,并且提供应答信息,
        但是信息中内容是否正确,则无法确定。所以需要用户手工(写函数)验证页面中内容的正确性。
      检查点函数:
        web_reg_find("Text=xxxx", LAST);
        web_reg_check();
            LR函数、含有reg字样,注册性函数,写在相应请求之前。
    ss
      2、如何让一半的用户实现并发?
        思路:并发测试的策略选取
        并发测试:特点是让多用户 形成一个瞬时的压力,是严格的测试。
                先设置集合点,之后在控制台场景中设置并发策略。
            1)选择第一项:设置50%用户
            2)选择第三项:设置固定用户数
        集合点函数:lr_rendezvous("名称");
           LR函数、必须写在Action中,在事务开始之前:
              lr_start_transaction("事务名称");
    
      3、参数池的策略?(HP公司)
    
      4、Think time和Pacing值的区别?
        Think time:一个是步骤(请求)之间的间隔;
        Pacing:一个是迭代之间的间隔(Action脚本),单位都是秒
      5、写出这4天学习过程中还不清楚的地方?
    
    
    性能测试的策略
    基础测试:单用户测试
      方法一:设置循环次数5次
        Run-time Setting 中的设置
            a)Run logic:循环的次数--设置5次
            b)Pacing:两次循环之间的时间间隔--随机2-4s
            c)Tink Time:思考时间,忽略
        监控资源:服务器的资源
        客户端的资源:自己随时把握一下即可,不要成为测试的瓶颈即可,各项资源正常
      方法二:持续运行1分钟
        Duration和Run-time Setting中的Run logic;前者优先级较高。二者循环的都是Action
            a)Duration设置1分钟
            b)Run logic:--设置1
            c)Pacing:随机2-4s
            d)Tink time:忽略思考时间
    
    并发测试:多用户测试
      1)脚本中
        a)录制需要执行并发测试的业务脚本
        b)把关心的业务操作放在事务中
        c)在事务之前添加集合点
        d)添加检查点,验证脚本的正确性
        e)保存脚本,编译调试脚本
      2)控制台设置
        a)把调试成功的脚本添加到控制台中
        b)设置5个VU
        c)设置并发策略,选择第一项(设置n%的用户到达集合点时开始并发执行)
      3)Run-time Setting –忽略思考时间
    
     综合场景测试注意要点?(整体策略)
        1)没有特殊说明,则为在线的综合场景测试
        2)所有的用户都要成功登录(上线)
        3)多个脚本,要超过3个脚本
        4)要运行一个小时左右(长一些)
        5)要添加think time(转移到事务范围之外)
        注意:如果系统不能够支持要求的用户数,即无法保证所有用户成功登录,就无需继续测试。

    LR11 并发测试-参数化-综合场景测试(引用)

       LR11-03
    
    一、并发测试(n VU)
      1、并发测试两个条件
        1)脚本中要有 集合点(并发点)
        2)控制台中要设置并发策略(选择第一项,所有虚拟用户到达集合点后释放)
    
     集合点: 5个线程,代表5个VU 并发执行一次购票
      o------------|o------
      o------------|o------
      o------------|o------
      o------------|o------
      o------------|o------
                     此时设置集合点(并发点)
     等所有线程到达集合点时,才一起释放,此时的压力最大(瞬时压力)。
     注意:在事务开始之前,设置并发点
    
      2、并发点 只有在并发测试中使用。(在单脚本中用不到,可以注释掉,在控制台中做并发测试,要)
             案例:在脚本中添加并发点,执行并发测试
               需求:并发购票
              (1)修改脚本(VUG中)
               注意:在事务脚本之前添加
                  lr_start_transction("buy");
         在事务开始之前 -> 点击Insert -> Rendezvous
             -> 输入集合点名称Rendezvous Name: buy  一般与事务名相同
             就会生成脚本:lr_rendezvous("buy");
             -> 编译 Compile(同时会立即保存)
             注意:修改完脚本,要及时编译。
    
         打开控制台,进行并发测试。
             加载day/buy脚本。注意,如果加载后修改脚本,需要在控制台中刷新脚本。
             右击脚本文件路径 -> Details 细节 -> Refresh 下拉菜单,
                    选中Script: 刷新脚本  (很常用)
                        选中Runtime Settings: 控制台中的设置被覆盖 (不常用)
             提示:可以在控制台中,打开某个脚本  View Script 按钮
    
          脚本中发生变动(加了检查点、集合点、代码等)
            1)一定要点击编译 Compile按钮,同时也会自动保存
            2)在控制台中要刷新脚本
             (2)设置并发策略(Controller中)
        控制台中要设置并发策略:(参考:并发点策略_2.png)
    
        选择Scenario菜单 -> Randezvours...  并发点-> 打开窗口,设置策略  ->  点击Policy按钮 (策略)
             第1项:Release when 100% of all Vusers arrive at the rendezvous.   (选择此项)
                   当100%虚拟用户到了集合点时释放虚拟用户VU
                   (所有VU的n%)  10个VU 都算  10 * n%
             第2项:Release when 100% of all running Vusers arrive at the rendezvous.
                   当100%正在运行的VU到达集合点时释放VU
                   (所有正在运行的VU的n%)
                       如果10个VU只有5个正在运行,5 * n%
             第3项:Release when 1 Vusers arrive at the rendezvous.
                   指定n个虚拟用户达到集合点,再释放
                Timeout between Vusers: 30 sec
                 超时时间:两个虚拟用户之间的 (一般到不了,默认不改)
    
        完成5个VU的并发:
             控制台 -> Basic schedule -> Quantity 改为 5
             Start Vusers: 用户数少,登录时间快,不用改
             Duration: 选Run until completion  表示瞬时压力
            继续设置Run-time Settings:
                 Run Logic: 迭代次数  1
                 Pacing: 改为As soon as the previous iteration ends.
                 Log: 默认
                 Think time: 默认 忽略 Ignore think time
                      好比:不停地发请求,不给喘息时间
    
        并发测试:注意think time要忽略。
            原因:think time时间越长,对AUT的压力越缓,而并发测试是严格的测试,所以要忽略该时间。
            目的:将最大的压力模拟出来。
    
        配置完毕 -> 运行场景 -> 查看结果报告
    
    并发测试要点回顾:
         1)事务前设置并发点  
         2)控制台中设置并发策略
         3)要忽略Think time
    
    
    二、参数化
        类似于QTP的参数池,比如可以模拟不同的用户进行登录
        以不变的业务(脚本),处理不同的数据
    
        提示:如何提高技术表达能力?
            阅读大量技术评论文章,包括每天的笔记。多熟悉技术术语。
             找机会多说。
            独立写出技术文章。
    
     1、定义
        对脚本中的常量进行参数化,让不同的VU在执行相同的脚本时,分别使用参数池的不同数据替代这些常量,从而达到模拟多用户真实使用系统的情况。
    
     2、步骤:
        1)确定需要参数化的数据
        2)准备数据 (参数池)
        3)参数化
    
       先打开WebTours首页,注册一个用户qq 密码qq
         首页 -> Sign up now  开始注册
           Username: qq
           Password: qq
           Confirm:   qq
           ...不填
    
        注册后会以文件方式保存用户信息:(模拟数据库)
        C:Program FilesHPLoadRunnerWebToursMercuryWebToursusers
    
       针对buy脚本进行参数化:
        为了便于还原,备份buy脚本,
        另存为day03uy1   File -> Save As
          找到init脚本需要参数化的常量: jojo
              双击jojo 选中 -> 右击
               -> Replace with Parameter  用一个参数代替
               -> 弹出窗口:
                 Parameter name:  name    参数名称
                 Parameter type:  File   文件类型,大部分都选
                 Original value: jojo    例子
               -> {name}
              密码也类似:将bean 用同样办法替换为{pwd}
              到此,定义好两个参数。
    
        接着考虑参数的数据准备:VuGen
          倒数第2个图标按钮:Open Parameter List-> 参数池 窗口
          左侧可选择不同的参数名称,可编辑
          点击name-> Edit with Notepad 按钮 使用记事本来编辑
              name
              jojo
              qq
              注意:用ctrl+a检查 确保光标在最后一行的下一行开头
                    保存关闭
              First data: 1改为 2  从第2行开始取数据(原数据还在)
          同理:pwd也加1行值:qq
                 First data: 也改为 2(从第2行开始取数据,原数据还在)
          -> Close
          参数池数据准备完毕
    
        编译脚本 -> 运行脚本
    
        如果运行失败,根据回放日志Replay Log查看原因:
              Script Aborted! 脚本被放弃了!
        原因:其它位置(检查点函数)使用了jojo,也需要进行参数化
          选中jojo -> 右击 -> Use Existing Parameter -> 选name-> {name}
    
        新的需求:让jojo和qq各自订一张票
         首先清空AUT中jojo和qq的订票记录,观察新的结果
         在Parameter List中,First data: 1  从jojo开始取
         在Run-time Settings中:迭代次数:2 (Action)
             编译 -> 运行
         遇到的问题:jojo登录1次,订票2次
                  init和end只会执行一次,Action可以迭代多次
         解决方法:将init中的脚本剪切到Action中,参与迭代
         注意:保留原有函数的语法格式(类C语言)
             vuser_init(){
                return 0;
             }
         重新编译 -> 回放
         说明:只要不退出,就是在线,就可以一直发请求。
              LR主要关注的是数据包,而QTP主要关注的是界面。
    
     3、要点归纳
        1)参数化时,参数池中的数据写好后,要让光标停留在新的一行。
    否则可能导致出错(白行或者缺少数据)。
            技巧:ctrl + a 观察格式
        2)init只执行一次,Action参与迭代,在参数化时需要注意。
        3)LR依靠网络协议录制脚本,脚本中记录的是请求数据包信息,只要用户在线(登录成功),则可以继续发送请求到达任意界面,也可实现循环操作。
    
     4、参数池的策略初步(Parameter List窗口中设置)
         特点:功能强大,LR产品的一个卖点(出彩) BS/MS题 拔高点
        1、Select next row (取值方式 How?)
           Sequential  顺序的(默认) 取完第1行,取第2行...
           Random   随机取
           Unique    唯一取
           Same line as pwd..   和xxx步调一致pwd取法一样
        2、Update value on (更新方式 When?)
           Each iteration   每次迭代时取值 (取值)
           ...
    
    作业:
    1、对于查询订单,进行基准测试和5用户、10用户的并发测试,并记录其平均响应时间。(生成3项)
    2、回顾之前所有内容(尤其是测试理论、数据库)
    
    
    一、继续学习参数化
      案例:注册30个用户,脚本要求:
        1)脚本中一定有检查点
        2)保证30个用户全部成功
        3)用单机执行还是控制台? 使用单机VuGen
        原因:使用VuGen 单机,压力较缓,容易成功。
               测试数据,尽量不用控制台
        提示:1VU,使用迭代
        每注册1个用户,会在C:Program FilesHPLoadRunnerWebToursMercuryWebToursusers中会多1个以新注册的用户名 命名的文件
    
      先准备用户数据:使用Excel 设计 qq1~qq30   1~30
      开始录制注册脚本:
         New ->  New Virtual User界面说明:
          左侧:
          New Single Protocol Script 新的单协议脚本(较简单)
          New Multiple Protocol Script 新的多协议脚本(较复杂)
          New Script Recent Protocol 刚打开过的协议
          上方:
          Ajax..异步通信,局部刷新支持、
          Flex 就是Flash动画协议、
          Oracle[2-Tier]两层协议、
          Oracle NCA 是.Net新技术、
          Web Services技术(异构平台之间互操作  C <--> Java)
          最常用的:Web[HTTP/HTML] 协议
    
         Create -> 输入URL -> Action 注册需要迭代 -> OK
         等待events数字不动后 (页面下载完毕)
         -> 点击Sign up now
         -> 输入Username: www   Password: 1  Confirm: 1
         -> 开始事务reg -> Continue -> 进入欢迎页面
         -> 插入检查点: Thank you, www, 
         -> 结束事务reg
         -> 切换为vuser_end -> 点击Continue -> Sign Off
         -> 关闭浏览器 -> Stop
    
      保存脚本:script/day04/reg
        将脚本进行备份:另存为day04/reg1    File-> Save as ...
          提示:LR脚本编辑器有局限,撤销ctrl+z 步数是有限的。
          技巧:多备份
    
      配置方法(2种)
      方式一:做两个参数池 name 和 pwd
          双击www选中 -> 右击 -> Replace with a Parameter 
            -> 命名 name -> {name}
          双击 1 选中 -> 右击 使用参数代替 -> 命名pwd -> {pwd}
          双击 1 选中 -> 右击 Use Existing Parameter 
           使用已存在的参数 -> 选中 pwd -> {pwd}
          再检查需要替代的固定值:检查点中需要替换
           双击www -> 替换成已存在的 {name}
    
        将参数池添加完整:
         Open Parameter List... -> 进入参数池配置窗口
         先填name -> 将Excel中的name值拷贝 -> name.dat  
           -> Edit with Notepad   name后粘贴   qq1~qq30
         再填pwd -> 拷贝1~ 30 -> pwd.dat
           -> Edit with Notepad   pwd后粘贴  1~30   注意格式!(光标在最后1行开始,用ctrl+A检查)
         关闭窗口
    
         准备运行脚本(不用打开控制台)
            -> 打开Run-time Settings:
              Run Logic -> Number of Iterations: 10  
              Pacing -> 选第2项:random 随机 2 ~ 3 秒
                After the previous iteration ends:with a random delay of 2.000to 3.000 sec
               提示:机器配置高,一般配置2~3秒;若配置低,延长些:6~9秒
              Log 不变 当前是标准日志,如果让日志更详细,可使用扩展日志
                      Standard Log  标准日志
                    Extended Log  扩展日志                 选择
                    Parameter subsitution 进一步查看 参数替代信息  选择
              Think time -> 单选 Replay think time 
                -> Use random percentage of recorded think time:
                   Min: 50%    Max: 150%
                根据录制时间给出百分比,比如录制10秒,50%到150%就是5到15秒
                    原因:(做数据,要保证成功)
         配置完成,开始运行...
            10次迭代,大约10分钟、
        方法一的局限:如果是1个大型项目,用户名和密码较多,多个用户名和密码一般在一起
        问题:2个参数值,能否写在一起?
        解决:name.dat、pwd.dat-》xxx.dat(分列方式)采用方式二
      方式二:将两个参数表的参数放在一起。
         name的本质:就是一个name.dat文件 进入脚本文件夹 打开
         将reg另存为reg2    File -> Open -> reg
    
         做两个参数池:{name}  {pwd}
           选中www -> 替换为参数 -> {name}
           选中1   -> 替换为参数 -> {pwd}
           选中1   -> 使用已有的代替 -> {pwd}
           检查点 选择www -> 使用name代替 -> {name}  
    
         Open Parameter List... -> 配置参数池
           选择name -> Add Column  加列 -> 起列名 pwd  名字任意
               Edit with Notepad 编辑文本 
               -> 大量替换:将Tab字符全部替换成逗号,  -> 关闭
                name,pwd
                qq1,1
                qq2,2
                ...
                qq30,30
              此时,完成两列数据写在一个文件中。
              在File format中,默认指定Column: Comma  逗号分隔
                    还可以选择:Tab 制表符 或 Space 空格
           选择pwd参数 -> File 选成 name.dat 共享一个文件
              之后针对name和pwd选择列:
              Select column: 两种办法
                 By number: 1   列号    name选1  pwd选2
               或By name: 根据列名指定
              避免数据重复,First Date都从11行开始
              -> Close  编译
          打开Run-time Settings:
            Run Logic: 迭代 10次
            Pacing: 第2项 随机 2~3秒
            Log: 选择扩展日志,进一步查看参数替代信息
            Think time: 单选Replay think time
                        使用随机的 50%  150%
         配置完成 -> 运行脚本
    
      结论:推荐使用第二中方式,比较常用。
        (曾经的一道上机题,主要考察参数化、关键是参数池策略)
    
    二、参数池的策略 (BS/MS题:讲讲参数池的策略)
      1.参数化:(关心的是数据)
          1)、含义:同样的业务,出现不同的数据,考虑采用脚本参数化技术
          2)、步骤:
              确定参数化的数据-->准备数据->提供策略-->参数化
          3)、准备数据 (目前:File方式)
            <1> 每个参数使用独立文件 (参数池)
            <2> 多个参数共享同一个文件 (常用)
              Excel工具、Column(序号、列名)、First Data(从哪开始)
          4)、参数池策略 (重点、难点)
             Select next row:  选择下一行(How?如何取?)
                 a) Sequential   默认 顺序的
                 b) Random      随机取
                 c) Unique       唯一取
                 d) Same line as xxx   和xxx步调一致
             Update value on: 更新方式(When?何时取)
                 a) Each iteration    默认  每次迭代
                 b) Each occurrence  每次遇到该参数时取值
                 c) Once  取值仅一次
            When out of values: 数据不足时的处理情况
                 a)放弃虚拟用户  Abort Vuser
                 b)以循环的方式继续  Continue in a cyclic manner
                 c)持续取最后一个值  Continue with last value(原地踏步)
    
    
    
            1、选择下一行 (How? 如何取?)Select next row
                1)顺序的 Sequential :从第一行开始顺序向下取值
                2)唯一的 Unique: 从第一行开始,唯一的向下取值
                            (用过了,就取新的值)
                       例如:数据a b c d e f g ...,现有3个用户(甲乙丙)取值;循环2次。
                    A) 顺序方式:甲(a, b) 乙(a, b) 丙(a, b)
                    B) 唯一方式:甲(a, b) 乙(c, d) 丙(e, f)
                             如果是注册,采用唯一方式,用过了就不能再用
                    c) 对于单用户来说,顺序和唯一取值序列是相同的。
                3)随机的 Random: 随机取值。(值可能重复)
                4)Same line as xxx: 取值策略与xxx相同  (行相同)
            2、更新方式(When? 何时取?)Update value on
                1)每次循环 Each iteration: 每次迭代时取值 (常用)
                     指的是:Action中的脚本,每次迭代时更新值
                2)每次遇到 Each occurrence: 每次遇到该参数时取值
                     指的是:比如每次遇到{name}时,都会换一次值
                3)取值一次 Once: 脚本运行过程中只取值一次
                     值的是:一次选择,终身不变
                另外,When out of values: 当选择Unique时才出现,表示取值越界后的处理方式
            3、数据不足时的处理情况(只有选择Unique时适用)
                说明:顺序、随机时认是数据时充足的
                规律:当选择顺序方式时,数据取到最后一行,再循环从第一行选取。
               When out of values: 有三种策略
                    1)放弃虚拟用户  Abort Vuser
                    2)以循环的方式继续  Continue in a cyclic manner
                    3)持续取最后一个值  Continue with last value(原地踏步)
    
         5)、需求:注册脚本,多用户,则数据池取值策略?
            注册脚本,多用户 --- UEA组合(Unique+Each iteration+Abort Vuser)(唯一+每次迭代+放弃虚拟用户)
              另外常见的组合:-----SE组合(Sequential+Each iteration)(顺序 + 每次迭代)
      Parameter List窗口中:
    
    
    
    三、综合场景测试 --- 号称能够最真实的模拟实际生产环境
    
    综合场景案例1
        综合场景的几个要素:
            多用户、
            多个脚本(至少3个)、
            在线执行(多种操作)一段时间(1小时、50分钟等),一般是不加并发点。
        注意:只要是多用户,就存在并发
              综合场景测试过程中,所有用户循环执行相应的操作。
    
      1、录制三个脚本(测试点):购买机票、查询线路、浏览航班;每个脚本都加检查点(手工)。准备进行综合场景。
    
        首先做一个设置:(目的:为了让页面标题变为自动的检查点)
            VuGen中 点击录制选项按钮 Edit Recording Options 
                General-> 选择第三项 Recording  脚本录制方式 不用改  (默认选择HTML方式)
            HTTP Properties-》选择HTML Advanced高级 ->
                选择Preferences复选框:
                      Generate web_reg_find functions for page titles
                    为页面标题生成检查点函数
                          再选择:Support charset -> UTF-8  对中文网站支持比较好
             -> OK
             以后都可生效。
    
            练习:录制一个登陆脚本,查看配置效果
                 新建脚本 -> OK -> 输入jojo和bean 
                 -> 开始事务login -> 点击Login按钮 -> 结束事务login
                 -> 插入检查点"Welcome, jojo, to the"
                 -> 改为vuser_end  -> Sign Off -> 关闭浏览器 -> Stop
    
            发现:web_reg_find("Text=Web Tours", LAST);
            每个页面都有,只验证页面的标题。比如:跳转到错误页面,则标题是不同的。
            规律:虽然在事务结束后,插入检查点,由于web_reg_find函数是注册性函数,
                所有还是在相应请求之前。
    
        开始练习录制脚本:day05目录下/ buy search  scan
        (1)购买机票  buy
             录制过程和之前一样,注意添加检查点、事务点
        (2)查询路线  search
             New脚本 -> vuser_init -> 输入jojo和bean
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action -> 点击Flights按钮
             -> 选择城市从Denver到 Paris  -> 开始事务search
             -> 点击Continue -> 添加检查点 "Denver to Paris"
             -> 结束事务search
             -> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
        (3)浏览航班  scan
             New新建 -> 改为vuser_init -> 输入jojo和bean
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action -> 开始事务scan -> 点击Itinerary按钮
             -> 设置检查点 "A total of" -> 结束事务scan
             -> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
    
        注意:检查点会浪费性能,所以手工添加检查点时,只需1~2个即可
        场景设置的前提:确保脚本录制、调试、回放成功。
    
      2、需求:10用户综合场景
        综合场景设置要求:
            1)修改脚本:
            2)设置场景:
            3)虚拟用户加载部署情况:
            4)Run-time Settings设置
    
    
        1)修改脚本:
          脚本事务中的think time时间要删除或或者移到事务之外。
          原因:如果综合场景测试保留think time,在事务之内会起作用,从而影响事务的响应时间,导致结果不准确。
    
        操作:对三个脚本都要移动 buy  search  scan
            (包括:init、Action、end都要找遍)
          lr_think_time(25);
          lr_start_transaction("login");
          ...其中没用思考时间...
          lr_end_transaction("login", LR_AUTO);
    
        注意:修改后脚本都需要重新编译
            如果脚本中有并发点,要注释掉;因为综合场景中有并发,但是不需要产生瞬时压力,无需设置集合点。
            //lr_rendezvous("buy"); 
    
        2)设置场景:
          打开控制台 -> New Scenario -> Browse 浏览 找到具体的脚本
          -> 依次选择 day05/下的三个脚本 -> OK
          -> 进入场景配置界面 保证3个脚本都打钩
          -> 单选 Basic schedule
          Group Name 默认就是脚本名   Quantity
            buy.3                             2
            search                            4
            scan                              4
          一共10个VU,保持合适的比例,平时根据客户的需求
    
        接着还需处理Scenario Schedule:
          Schedule by: 
            Scenario  默认按照场景方式 (选择)
                          特点:所有脚本共享同一场景
                    按场景:场景中,多个VU统一配置、行动 
               或 Group 按组方式,分组设置场景
                按组:每个组,组内VU统一行动 (按组行动)
    
        重点设置左下角Global Schedule:
             以上三个脚本都选中,一次配置三个(出现黑框) ->
             Start Vusers双击-> 设置一个小的递增  单选第2项
             ->  1     00:00:01 [HH:MM:SS] -> OK
                 每隔1秒钟加载一个VU
             -> 及时观察右边效果图:锯齿状
    
         Duration 双击
             -> 单选第2项:Run for 0 days and 00:30:00 (HH:MM:SS)
             -> OK  确定指定的时间 30分钟 (项目中一般50分钟、1小时)
              如果第1项:Run until completion 直到结束,适合于循环,确定次数;
              如果第3项:Run indefinitely  一直跑,直到手动停止
    
        虚拟用户加载部署情况:
            A)每隔1秒钟加载1个VU
            B)Duration: 30分钟
            说明:由于Duration运行的是Action部分,
                所以指的是VUs登录后运行30分钟。10个虚拟用户,10个线程,各自运行,模拟实际生产环境。
    
        3)Run-time Settings设置
            设置左上角按钮:Run-time Settings (细节较多)
              选择三个脚本(出现黑框)-> 点击按钮 Run-time Settings
             ->弹出窗口,选择“多”运行模式  RTS的简写 
                   Share RTS 共享  / Individual RTS 独立的
            先选择Individual RTS 独立的,会依次配置每个脚本,配置完某个脚本会自动打开窗口配置后续的。
            1)General
             Run Login -> Number of Iterations:  1  不变
            Pacing -> 改为第2项After the previous iteration ends:  随机间隔2~3秒
            Log -> Enable logging (选择)
                     Log options:
                           Send messages only when an error occurs 出错时才发日志(选择)
                           Alwarys send message  总是发日志
                         Log message at the detail level of:
                               Standard log  标准日志(选择)
                               Extended log  扩展日志
    
             Think time: 随机百分比,可以适当调大些  
                     Use random percentage of recorded think time:
                       Min: 200%    Max: 300%
              Additional attributes:  附属选择/特殊参数值,目前不配置
              Miscellaneous:  杂项
                     Error Handling中 -> Continue on error  打钩 出错时继续
                  原因:长时间测试过程中会执行大量的事务,不要因为某个错误而停止场景的运行。
                    说明:
                 a)Error Handling中:
                  Continue on error    出错时继续(选择)
                      Fail open transactions on lr_error_message  使用不多
                      Generate snapshot on error 出错时,生成快照,使用不多
                          原因:会增加工具资源消耗,影响测试结果
                   b)Multithreading中:    Thread 线程
                    Run Vuser as a process  以进程方式 (比较消耗资源)
                    Run Vuser as a thread  以线程方式(比较省资源)默认(选择)
                   c)Automatic Transactions中: 自动定义事务 (不设置)
                    Define each action as a transaction:  
                           每一个Action都作为一个事务,比如:脚本中有3个
                    Define each step as a transaction:
                           每一个步骤都作为一个事务(每一句代码,产生过多的响应时间结果)
                       过于热闹,主次不分,出现过多的响应时间结果
            2)Network 
                Speed Simulation -> Network Speed  模拟网速
                    Use maximum bandwidth: 使用最大带宽 (选择)
                              准备一个充足的带宽,将最大压力呈现给服务器
                        Use band 使用选择的带宽
                        Use custom bandwidth(bps): 使用用户自定义带宽
            3)Browser 
                 Browser Emulation -> 模拟浏览器
                Browser properties  属性配置
                    User-Agent 浏览器信息...
                         Simulate browser cache 模拟浏览器的Cache 缓存
                           目的:提高客户端的浏览速度  -> (去掉打钩!)  
                            Cache URLs requiring content [HTMLs]
                        Check for newer versions of stored pages every visit to the page.
                    Download non-HTML resources 下载非HTML资源 (打钩)
                    Simulate a new user on each iteration 模拟新用户(打钩)
                        Clear chache on each iteration 每次迭代清缓存(打钩)
            4)Internet Protocol 
                Proxy:  No proxy 默认不要代理 (默认打钩)
                      Use custom proxy 如果使用公司代理服务器,则选择
                  Preferences:  都不要改
                       -> Options... 打开 -> 将三个120改为600
                        指的是超时时间,保证充分时间,达到成功
                包括:HTTP-request connect timeout(sec) -> 600
                       HTTP-request receive timeout(sec) -> 600
                       Step download timeout(sec)          -> 600
            点击OK后 -> 开始第二脚本的设置(和之前一样,复习一遍)
         依次完成:buy.3、 search、 scan的设置。
    
        run-time settings设置总结:
          说明:迭代次数默认1 具体次数由持续时间决定
            (1) pacing: 随机4-6秒 或 5-9秒,选择第2项
                  正常:2-3秒,教学机较慢,设置偏大些,保证不出错
            (2) 日志log: 保留原有选项(出错时发送)
                  原因:大量日志也会占用磁盘空间。
            (3) Think time: 随机百分比,适当调大 200% - 300%
            (4) Continue on error: 错误时继续
                  原因:长时间执行大量事务,个别出错继续运行,不影响全局。
            (5) Vuser选择 线程 方式。节省系统资源
            (6) 网络:模拟用户的网络,使用最大带宽
            (7) 模拟缓存:选择不模拟
                   使用场合:1、对AUT实施严格测试  2、门户网站
            (8) Option 选项:3个120改为600
                   一般疲劳测试设置600足够了。
            (9) 选择监控AUT服务器资源时注意:
                网络选loopback(回环,前提当前服务器为本机;如果服务器不是本机,一定不能选回环);
                选择磁盘(或CPU)资源时,遇到total就选total.
            (10) 加完资源,就可以运行场景。
        4)Windows resources配置
          (Run视图 右下角窗口)
           右击窗口-> 
           Add Measurements... ->
              Monitered Server Machines: 选机器  点击Add.按钮 ->
                    Machine Information:
                           Name: localhost  指定监控服务器的IP地址,主机名
                                   目前就是本地主机
                           Platform: WINXP
           -> OK
             Resource Measurements on: localhost  清空里面所有选项
    
               自己完成选项的添加(固定13项)
              -> 点击Add按钮 -> 选择以下内容:
               1)Memory中有4项:(内存)
                 Available MBytes            -> Add
                 %Committed Bytes in Use   -> Add
                 Page Faults/sec              -> Add
                 Pages/sec                    -> Add
               2)Network Interface中有2项: (网络)
                 Bytes Total/sec -> MS TCP Loopback inter...回环-> Add
                         本地主机才选回环
                 Packets/sec     -> MS TCP Loopback inter...回环-> Add
                         本地主机自己和自己通信,用回环
               3)PhysicalDisk中有4项(2个队列):(磁盘)见到Total就选
                 Avg.Disk Queue Length      ->  Total  -> Add
                 Current Disk Queue Length  ->  Total  -> Add
                 Disk Read Bytes/sec         ->  Total  -> Add
                 Disk Write Bytes/sec        ->  Total  -> Add
               4)Processor中有2项:(进程)
                 %Processor Time    -> Total  -> Add    Total表示总和
                 %User Time         ->  Total  -> Add
               5)System中有1项: (系统)
                 Processor Queue Length   -> Add
               -> OK
               以上一共13项,先了解名字,后续再强化。
        5)-> 加完资源,可以运行场景
            点击Start Scenario
    
        注意:运行过程中如果有错误,观察Scenario Status中的Errors 部分  0  (点开链接,寻找出错原因)
            如果是场景设置问题,需要重新设置场景,重新运行
            如果是脚本的问题,需要停止场景并调试脚本,重新运行
    
        运行过程中,要关注几幅图的含义:
            Running Vusers - whole scenario:
                表示整个正在运行的虚拟用户 10个
            Trans Response Time - whole scenario:
                表示事务响应时间,比如蓝色线表示login,较短表示所有虚拟用户全部登录了,点击某条线看到具体信息
            Hits per Second - whole scenario:
                表示点击率,刚开始比较高,后来平稳了,因为刚开始有登录操作,看性能,主要看折现是否较陡,或看单位时间内的情况
            Windows Resources - Last 60 sec:
                表示
    
        注意:
          a)当场景中Duration到达指定时间时,会向所有的VUs发出退出系统的指令,所有VUs要运行完当前的Action后,退出系统。
    
          b)错误查看方式:
            如果发现Error,点击打开Output窗口,选中错误 -> 点击Details按钮-> 显示错误的详细信息
          c)如果场景中监控服务器资源为负值,不是问题。不需要停止场景。
            如果发现设置不合理,或者脚本错误导致场景中出现大量错误,则需要停止场景,重新调试脚本,刷新,部署好,再运行。
    
        监控的服务器资源出处:
             控制面板 -> 管理工具 -> 性能 -> 添加计数器
        5)打开Analysis,保存结果报告,之后再分析
            将场景文件保存:day05ctrl10用户综合场景测试
            将结果报告保存:day05
    esult10用户综合场景测试 之后分析
    
    
    综合场景案例2:(先思考)
    1、使用手工设置方式进行综合场景测试,11用户,
        其中一个用户执行注册脚本,注册得到的用户名为其它脚本提供数据池(测试数据)。
    2、综合场景中的脚本:
        注册reg、
        购买机票buy(登录时:用户名、密码要做参数化 共享参数池name.dat UEA组合:唯一+每次迭代+放弃VU)、
        搜索航班search、
        浏览路线scan
      注意细节:
         注册需要先执行,获取参数池的数据,该数据也被buy脚本共享
         登录脚本需要放到Action中,参与迭代
         注册先于其它开始执行,采用Group组方式:
            选中“注册”->点击Start Group->Action type Start Group
            第1项:Start immediately after the scenario begins
                当场景开始时马上开始
            第2项:Start _(HH:MM:SS) after the scenario begins
                当场景开始__时间后才开始
            第3项:Start when group—__finishes(关注此项)
                当某个脚本执行完后再执行
            意味着:在Scenario Schedule中, 
    
    
            Schdule by: 将Scenario换成 Group方式
        注意:4个脚本需要单独设置场景
    
    操作说明:控制台中四个常用按钮
        运行、Run-time Settings、脚本修改后的刷新、从场景中打开脚本
        (脚本运行出错,从场景中直接打开脚本:Design -> View Script
         从错误提示信息中也可打开,直接定位到出错的位置)
    
     1、录制脚本,添加事务、检查点、参数化 (保存在day06中)
        (1)reg脚本   注册
            录制过程:
                 New -> 选Action -> 点击Sign up now 
                 -> 输入Username: tom  Password:1   Confirm: 1
                 -> 开始事务 reg ->  Continue -> 进入欢迎页面
                 -> 插入检查点 "Thank you, tom" -> 结束事务
                 -> 切换成vuser_end -> 点击Continue
                 -> Sign Off退出 -> 关闭浏览器 -> Stop 
    
             参数化 name和pwd,在name.dat中,使用ww1~ww11,检查光标停留在下一行:
                 name,pwd
                 ww1,1
                 ww2,2
                 ...
                 ww11,11
             使用的参数化策略:
               针对name:  (UEA组合)
                 Select next row: Unique 从第一行开始唯一向下选取
                 Update value on: Each iteration  每次迭代时更新
                 When out of values: Abort Vuser 放弃VU
               针对pwd:
                 Select next row: Same line as name  和name步调一致
             注意:修改后记得编译
    
        (2)buy脚本   购票脚本
             注意:将登录操作也录制在Action中,目的是便于按照SE组合取参数池的数据。
             录制过程:
                 New -> 选择Action -> 输入jojo和bean 
                 -> 开始事务login -> 点击Login -> 欢迎页面:
                 -> 插入检查点"Welcome, jojo," -> 结束事务login
                 -> 点击Flights -> 选择城市Denver 到 London
                 -> Continue -> Continue -> 开始事务buy -> Continue
                 -> 插入检查点"Denver for London" -> 结束事务buy
                 -> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
    
             参数化:
              将参数池准备好,拷贝reg目录中name.dat到buy目录中
              针对name: (以后常用的SE组合 80%情况)
                选择文件name.dat
                Select next row: Sequential  顺序的
                Update value on: Each iteration 每次迭代时
              针对pwd:
                选择文件name.dat
                By number: 2
                Select next row: Same line as name
    
        (3)search脚本
             New -> vuser_init -> 输入jojo和bean 
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action  -> 点击Flights按钮 
             -> 选择城市从Denver 到 Paris -> 开始事务search
             -> 点击Continue -> 添加检查点"Denver to Paris" 
             -> 结束事务search
             -> 改为vuser_end -> Sing Off -> 关闭浏览器 -> Stop
    
        (4)scan脚本
             New -> 改为vuser_init -> 输入jojo和bean
             -> 开始事务login -> 点击Login -> 结束事务login
             -> 改为Action -> 插入事务scan -> 点击Itinerary按钮
             -> 设置检查点"A total of" -> 结束事务scan
             -> 改为vuser_end -> Sing Off -> 关闭浏览器 -> Stop 
    
        (5) 注意:检查所有脚本,对lr_think_time(..)进行调整,移动到事务之外。全部都编译一次。
               检查buy脚本中的参数池数据,要和reg脚本中的保持一致。
            到此,脚本录制、调试完成。
            
     2、打开控制台,配置综合场景
         创建一个新的场景,Browse加入day06下的4个脚本:reg、buy、search、scan
         选择Schedule by: Group模式 (组模式)
         注意:依次选择每个脚本,选择Run Mode: -> Basic schedule(不能只点1次,要点4次,分别设置)
           Script Path            Quantity
             reg.1                   1
             buy                     2
             search                  3
             scan                     5
    
         注意:由于使用Group组模式,(左下角)每个脚本要逐一设置:
        (1)reg脚本(选中)1人
             Start Group: 改为Start immediately after the scenario begins (在场景启动后,立即开始)
             Initialize: 不变 Initialize each Vuesr just before it runs
                         (在每个VU开始运行前初始化)
             Start Vusers: 不变 Start all Vusers simultaneously
                         (所有VU同时开始)   因为就1个VU
             Duration: 不变 Run until completion (运行直到结束)
    
            打开Run-Time Settings:
                 Run Logic: 循环11次    
                 Pacing: 选中第2项 随机random  2~3秒
                 Log:   默认不变
                 Think time:  50%   150%
                 Miscellaneous(杂项):Errror Handling 不选择Continue on error
                    原因:目前是做数据,如果出错,就不能继续往下跑,以免影响后续脚本执行。
                 Speed Simulation: 速度模拟 (不变)
                 Browser Emulation: 选择Simulate browser cache 
                   原因:做数据测试,利用缓存cache容易成功
                 Proxy: 代理 (不变)
                 Preferences:  Option参数 (先不动)
                 (其余的都不动)
    
        (2)buy脚本 (选中)2人
             Start Group: 选第3项 Start when group reg.1 finishes
             Initialize: 不变  在每个VU开始运行前初始化
             Start Vusers: 1 Vusers every 00:00:01 (HH:MM:SS) (每隔1秒加载1个VU)
                          由于目前VU就2个,数量较少:(採用)
                              可以保持不变 Start all Vusers simultaneously
             Duration: 选第2项 Run for 0 days and 00:30:00(HH:MM:SS)                   (持续运行30分钟)
    
             (注意:觀察Total:2 Vusers 要和Quantity一致)
    
        (3)search脚本 (选中)3人
             Start Group: 选第3项 Start when group reg.1 finishes
             Initialize: 不变  在每个VU开始运行前初始化
             Start Vusers: 1 Vusers every 00:00:01 (HH:MM:SS)
                              (每隔1秒加载1个VU)
             Duration: 选第2项 Run for 0 days and 00:30:00(HH:MM:SS)                   
                     (持续运行30分钟)
    
        (4)scan脚本 (选中) 同search脚本     5人
    
        (5)查看配置效果图:
            reg.1 虚线表示时间不确定
            其它3条平行线  纵坐标:0  1  2  3  5(表示虚拟用户数)
    
        (6)
            注册reg的Run-time Settings已经单独设置好了,
            继续统一设置其它三个:选中buy、search、scan 
    
                 -> 设置Run-Time Settings -> Share RTS方式 (共享方式)
                  Number of Iterations: 1
                  Pacing: 选第2项 随机random 2~3秒
                  Log: Send messages only when an error occurs 出错时发送
                  Think Time: 随机 100%  200%
                  Miscellaneous(杂项):
                     Error Handling: 只选中 Continue on error
                     Multithreading: 选择Run Vuser as a thread 以线程方式
                  Speed Simulation:  最大带宽 Use maximum bandwidth
                  Browser Emulation: 不选择 Simulate browser cache
                                       原因:进行比较严格的测试
                          选择 Download non-HTML resourses
                          选择 Simulate a new user on each iteration
                              选择 Clear cache on each iteration
                  Proxy: 代理  不要代理  
                          选择No Proxy(direct connection to the Internet)
                  Preferences: 暂时不选 Enable Image and text check
                          Options 参数 (后续单独设置)
                  其余不动 -> OK
    
            (7)之后依次buy、search、scan 设置Options:
                   选择buy脚本 -> Run-time Settings -> Preferences:
                   ->Options... 打开
                   ->将三个120改为600 指的是超时时间(时间充足,保证成功)
                   包括:HTTP-request connect timeout(sec) -> 600
                          HTTP-request receive timeout(sec) -> 600
                          Step download timeout(sec)         -> 600
                   同样设置search和scan脚本...
    
            (8)    最后配置Windows Resaources: 13+1项  (Run视图 右下角)
                   补充:Memory中  Page Reads/sec (页面读取率)
    
                 13项参考之前的笔记:(资源图.doc)
                   右击窗口-> Add Measurements... ->
                  Monitered Server Machines: 选机器  点击Add.按钮 ->
                    Machine Information:
                       Name: localhost  指定监控服务器的IP地址,主机名
                                           目前就是本地主机
                       Platform: WINXP
                    -> OK
                  Resource Measurements on: localhost  清空里面所有选项
                   自己完成选项的添加(固定13项)
                  -> 点击Add按钮 -> 选择以下内容:
                   Memory中有4项:(内存)
                     Available MBytes            -> Add
                     %Committed Bytes in Use   -> Add
                     Page Faults/sec              -> Add
                     Pages/sec                    -> Add
                   Network Interface中有2项: (网络)
                     Bytes Total/sec -> MS TCP Loopback inter...回环-> Add
                             本地主机才选回环
                     Packets/sec     -> MS TCP Loopback inter...回环-> Add
                             本地主机自己和自己通信,用回环
                   PhysicalDisk中有4项(2个队列):(磁盘)见到Total就选
                     Avg.Disk Queue Length      ->  Total  -> Add
                     Current Disk Queue Length  ->  Total  -> Add
                     Disk Read Bytes/sec         ->  Total  -> Add
                     Disk Write Bytes/sec        ->  Total  -> Add
                   Processor中有2项:(进程)
                     %Processor Time    -> Total  -> Add    Total表示总和
                     %User Time         ->  Total  -> Add
                   System中有1项: (系统)
                     Processor Queue Length   -> Add
                   -> OK
                   再追加一项:
                   Memory中:Page Reads/sec  页面读取率
                   以上一共14项,先了解名字,后续再强化。(高级部分)
    
                -> 加完资源,可以运行场景
                点击Start Scenario
    
    二、综合场景测试设置要点
        1、Continue on error: 
         (Run-time Settings -> Miscellaneous杂项中 Error Handling)
            1)综合场景测试过程中要选择该项
            2)做测试数据时(数据参数化的时候),由于要保证数据成功,失败应及时停止场景,所以该项不要选择
    
        2、模拟浏览器的Cache:   缓存
            1)综合场景中如果严格测试,不选择
            2)如果做测试数据,利用Cache容易成功,需要选择。
    
        3、监控资源时,添加一些:Page reads/sec   页面读取率
    
            思考:正常的性能测试,两人参与:
                 一人负责场景的启动;一人负责监控Linux的系统资源
                 问题:是场景先启动,还是Linux系统资源监控先启动?
    
        4、在场景启动之前,服务器资源监控应该提前启动。确保资源(服务器)连接无误后,再开始场景。
    
        5、在综合场景启动时开始,要密切关注,必须保证所有用户全部上线(登录成功),才称为多用户在线综合场景。
    
        6、当所有用户上线后,也要密切关注,控制台中各个主要的图表,当图表走势不正常时,代表系统不稳定,要及时查找原因,如果是综合场景设置的问题,甚至是脚本的问题,要及时停止场景,调试后重新测试。
    
        场景运行结束后 -> 打开Analysis -> 将结果文件保存:
            result/day06/11用户综合场景_reg  后续还会分析
    
        关注:
            Transaction:
             Transaction Name  事务名称
             Minimum   最小值
             Average   平均值
             Maximum  最大值
             Std. Deviation    标准方差值
             90 Percent        90% 响应时间
    
    三、报告讲解
        1、90 Percent响应时间:表示该组中90%的用户都能在该时间内响应(完成该操作)
    
         90 Percent 表示90%的用户在 0.xxx 秒内完成操作
         可以通过Properties中 Percentile  90
         可以修改 -> Additional Settings -> Transaction Percentile
           若改为80,表示80%的用户。 再改回90%
    
        2、一个事务,100用户执行,其中一个用户执行时间1000秒,其他99%的用户响应时间为0.001秒。
         则该情况下90% 和 平均响应时间 哪个更准确? 90 Percent
    
        3、标准方差值:越小越好。越趋近于0,表示所有用户执行该事务的响应时间越接近,表示系统越稳定。
        (数学中知识)
         Mininum   Average   Maximum    Std.Deviation
          0.203    0.313      0.404         0.095
    
          说明前面几个值比较接近,比较稳定。
    
        4、网络带宽充足的情况下,当吞吐量(Throughput)随着点击率(Hits per second)的升高而升高,说明AUT的服务器处理能力充足。
    
        高级部分再继续分析结果报告。
    
    四、LR流程
        1、性能测试的基本概念
    
        2、LR的三大组件协同工作(基准测试、并发测试、综合场景测试)
    
        3、三大组件:(加* 表示高级部分  **扩展部分)
        1)脚本生成器(录制、事务、检查点、并发点、参数池、参数池策略*、关联*)
         后续详细讲解:参数池策略、脚本关联技术
    
        2)控制台(基本参数设置、后续细化研究*)
    
        3)结果生成器(简单查看结果[服务器资源分析*]、性能测试综合分析*--瓶颈定位*--性能调优*)**
    
        4、整个系统的性能分析 **
    
    五、为了使网站的页面响应速度更快,可以将页面中图片、视频、音频等元素尽量减少,进而减少客户端向服务器的访问次数,减少传输信息,加快访问速度。
    
    六、脚本录制
        1、选择协议,如果正常协议(Web)无法成功录制脚本,可以根据系统(如C/S系统),选择Winsock协议(万能协议)。
        说明:C/S系统越来越少,逐步被B/S取代,大部分都是Web项目
    
        测试脚本的主要部分: 4部分
            vuser_init     初始化  仅执行一次
            Action         核心脚本 可多次
            vuser_end     结束脚本  仅一次
            global.h       头文件 包含重要函数的声明
    
        2、LR的脚本中Action越少越好,便于性能分析。 
            对比:QTP中的Action较多,因为功能多
    
        3、性能测试中AUT的服务器(应用服务器、数据库服务器),要分开部署。
            原因:便于性能分析,大多数问题一般是数据库服务器的性能问题
    
        案例(了解):录制多Action  将多个功能放在不同Action中
        思路:边录制边添加
            New -> 改为vuser_init -> 输入jojo和bean -> Login
             -> 点击按钮 Create New Action 增加Action -> 修改名字 buy
             -> 开始订票 选择城市 -> continue -> continue -> continue 
             -> 再加一个Action  修改名字scan -> 点击 Itinerary 浏览路线
             可以继续添加...
             -> 退出系统 -> 关闭浏览器 -> 结束录制
    
        4、VUG中窗口内容:
            1)脚本(上部)中记录的是客户端的请求。
               (请求:网页、图片、链接、表单提交)
            2)Replay Log: 记录脚本回放(执行)日志。(较常用)
            3)Recording Log: 记录LR客户端和服务器二者之间对话的数据包大小。 (较少使用)
            4)Generation Log: 记录LR客户端和服务器二者之间全部对话。
              (关联技术时经常使用)
            说明:Correlation Results 自动关联是的结果 (关联时介绍)
    
        5、脚本中的LR函数,LAST是函数的结束符。
    
    作业:
    1、综合场景测试(课上练习:按照场景方式--最常用、重要)
      10用户综合场景、11用户综合场景_reg
    
    2、知识点复习:基准测试、并发测试、综合场景
    
    3、预习参数池策略
    
    4、重要的笔试题
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    笔试题:
      1、LR脚本为何要做检查点?你能写出的检查点函数?
        (文法:LR执行报告中显示Pass,是否说明脚本执行正确?)
         LR执行报告中的Pass只表明服务器已经接收到客户端请求包,并且提供应答信息,
        但是信息中内容是否正确,则无法确定。所以需要用户手工(写函数)验证页面中内容的正确性。
      检查点函数:
        web_reg_find("Text=xxxx", LAST);
        web_reg_check();
            LR函数、含有reg字样,注册性函数,写在相应请求之前。
    ss
      2、如何让一半的用户实现并发?
        思路:并发测试的策略选取
        并发测试:特点是让多用户 形成一个瞬时的压力,是严格的测试。
                先设置集合点,之后在控制台场景中设置并发策略。
            1)选择第一项:设置50%用户
            2)选择第三项:设置固定用户数
        集合点函数:lr_rendezvous("名称");
           LR函数、必须写在Action中,在事务开始之前:
              lr_start_transaction("事务名称");
    
      3、参数池的策略?(HP公司)
    
      4、Think time和Pacing值的区别?
        Think time:一个是步骤(请求)之间的间隔;
        Pacing:一个是迭代之间的间隔(Action脚本),单位都是秒
      5、写出这4天学习过程中还不清楚的地方?
    
    
    性能测试的策略
    基础测试:单用户测试
      方法一:设置循环次数5次
        Run-time Setting 中的设置
            a)Run logic:循环的次数--设置5次
            b)Pacing:两次循环之间的时间间隔--随机2-4s
            c)Tink Time:思考时间,忽略
        监控资源:服务器的资源
        客户端的资源:自己随时把握一下即可,不要成为测试的瓶颈即可,各项资源正常
      方法二:持续运行1分钟
        Duration和Run-time Setting中的Run logic;前者优先级较高。二者循环的都是Action
            a)Duration设置1分钟
            b)Run logic:--设置1
            c)Pacing:随机2-4s
            d)Tink time:忽略思考时间
    
    并发测试:多用户测试
      1)脚本中
        a)录制需要执行并发测试的业务脚本
        b)把关心的业务操作放在事务中
        c)在事务之前添加集合点
        d)添加检查点,验证脚本的正确性
        e)保存脚本,编译调试脚本
      2)控制台设置
        a)把调试成功的脚本添加到控制台中
        b)设置5个VU
        c)设置并发策略,选择第一项(设置n%的用户到达集合点时开始并发执行)
      3)Run-time Setting –忽略思考时间
    
     综合场景测试注意要点?(整体策略)
        1)没有特殊说明,则为在线的综合场景测试
        2)所有的用户都要成功登录(上线)
        3)多个脚本,要超过3个脚本
        4)要运行一个小时左右(长一些)
        5)要添加think time(转移到事务范围之外)
        注意:如果系统不能够支持要求的用户数,即无法保证所有用户成功登录,就无需继续测试。
     
    分类: loadrunner
     
    好文要顶 关注我 收藏该文  
    0
    0
     
     
     
    « 上一篇:性能测试过程中:造数据
    » 下一篇:unittest测试驱动之HTMLTestRunner.py(五)

    posted on 2016-10-26 16:54 竹雨阑珊1 阅读(3153) 评论(0编辑 收藏

     
    < 2018年3月 >
    25 26 27 28 1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28 29 30 31
    1 2 3 4 5 6 7

    导航

    统计

    • 随笔 - 115
    • 文章 - 0
    • 评论 - 1
    • 引用 - 0

    公告

    昵称:竹雨阑珊1
    园龄:1年10个月
    粉丝:13
    关注:10
  • 相关阅读:
    模拟退火求二维费马点
    二叉查找树
    Linux中让普通用户拥有超级用户的权限
    python 正则表达式应用——缩写词扩充
    解决单链表中的环问题
    python数学函数
    train,dev,test数据集作用
    朴素贝叶斯法(二)——基本方法
    生成模型与判别模型
    ImportError: cannot import name wordnet
  • 原文地址:https://www.cnblogs.com/minkillmax/p/8677648.html
Copyright © 2011-2022 走看看