LoadRunner学习备份--04
复习:3W+1H (What? Why? Where? How?)
1、什么是性能测试?
性能测试是测试的一种方法,在给定的负载条件下,测试被测系统的各项指标是否符合预期要求。
比如:给定内存、CPU、磁盘、事务响应时间等指标
如果发现与需求不一致,就发现性能瓶颈。
2、性能测试的目的?
识别系统中的弱点、评估系统能力、进行系统调优,提高系统的可靠性、稳定性。
3、什么时候需要进行性能测试?
对系统性能比较高的行业:通信、银行、金融、证券、医疗、保险、搜索引擎(百度、谷歌)等多用户的系统。
4、性能测试的工具--LoadRunner11 的组成部分?
(重点掌握3大组件,有时+1 Load Generator)
1)虚拟用户脚本生成器(Virtual User Generator)
捕获用户的业务流程和创建自动性能测试脚本,模拟单用户
2)压力调度控制台(Controller)
根据场景的设置,配置虚拟用户,运行场景,收集测试数据
3)压力结果分析器(Analysis)
分析测试结果
4)负载生成器(Load Generator)压力生成器
通过运行虚拟用户产生实际的负载
5)代理程序(Agent)
部署在各个客户端(负载机),协调得到步调一致的虚拟用户
6)监控程序(Monitor)
监控主要的性能计数器
5、如何进行性能测试?
思路:围绕LoadRunner 性能测试工具
三大组件:1、VuGen 2、Controller 3、Analysis
LR测试流程:
使用VuGen录制脚本 -> 录制后需要调试脚本
(1、参数化;2、检查点;3、事务点; 4、集合点;5、关联;
6、流程控制、函数调用等)
脚本分为:init 、 Action、 end
添加事务的目的:控制台运行后,会收集到事务的响应时间。
对事务进行并发测试:在事务之前,加入集合点
注意:集合点只能加在Action中
检查点函数:web_reg_find();
带有reg的函数,注册性函数,放在相应请求之前。
不同文件的格式和后缀:
脚本文件 *.usr
控制台文件 *.lrs 场景文件
结果分析文件 *.lra 分析文件
控制台结果文件 *.lrr Results -> Results Settings...
将调试好的脚本 -> 控制台中
可以选择:手工设置(Manual Scenario)
或 基于目标的设置 (Goal-Oriented Scenario)
一般选择手工方式,可以进一步选择是否以百分比方式划分VU
选择场景的类型:
场景中虚拟用户数
对虚拟用户的设置:
(初始化、开始运行、持续时间、何时停止)
可以监控系统资源:
可以监控某台服务器 192.168.0.68 AUT的多台服务器
或本地主机 localhost (学习时)
Run-time Settings (场景的优先级高)
迭代次数: 针对Action迭代
Pacing: 每次迭代之间的时间间隔
Log: 日志控制
Think time: 思考时间,每次请求之间的时间间隔
运行场景 ->
结果分析器: 查看结果是否符合性能需求
概要:事务平均响应时间、吞吐率、场景运行人数...
平均事务响应时间
吞吐率
点击率
资源图
...
提示:结合LR原理图分析
一、继续学习参数化
案例:注册30个用户,脚本要求:
1)脚本中一定有检查点
2)保证30个用户全部成功
3)用单机执行还是控制台? 使用单机VuGen
原因:使用VuGen 单机,压力较缓,容易成功。
测试数据,尽量不用控制台
提示:1VU,使用迭代
先准备用户数据:使用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 步数是有限的。
技巧:多备份
方式一:做两个参数池 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 注意格式!
关闭窗口
准备运行脚本(不用打开控制台)-> 打开Run-time Settings:
Run Logic -> Number of Iterations: 10
Pacing -> 选第3项:random 随机 2 ~ 3 秒
提示:机器配置高,一般配置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%
(做数据,要保证成功)
配置完成,开始运行...
方式二:将两个参数表的参数放在一起。
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: 第3项 随机 2~3秒
Log: 选择扩展日志,进一步查看参数替代信息
Think time: 单选Replay think time
使用随机的 50% 150%
配置完成 -> 运行脚本
结论:推荐使用第二中方式,比较常用。
(曾经的一道上机题,主要考察参数化、关键是参数池策略)
二、参数池的策略 (BS/MS题:讲讲参数池的策略)
Parameter List窗口中:
Select next row: 选择下一行
Sequential 默认 顺序的
Random 随机取
Unique 唯一取
Same line as xxx 和xxx步调一致
Update value on: 更新方式
Each iteration 默认 每次迭代
Each occurrence 每次遇到该参数时取值
Once 取值仅一次
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
4、需求:注册脚本,多用户,则数据池取值策略?
Unique + Each iteration + Abort Vuser
--- UEA组合。(唯一 + 每次迭代 + 放弃虚拟用户)
另外,SE组合也很常用:(顺序 + 每次迭代)
三、综合场景测试 --- 号称能够最真实的模拟实际生产环境
综合场景的几个要素:多用户、多个脚本(至少3个)、在线执行(多种操作)一段时间(1小时、50分钟等),一般是不加并发点。
注意:只要是多用户,就存在并发
综合场景测试过程中,所有用户循环执行相应的操作。
1、录制三个脚本(测试点):购买机票、查询线路、浏览航班;每个脚本都加检查点(手工)。准备进行综合场景。
首先做一个设置:(目的:为了让页面标题变为自动的检查点)
VuGen中 点击录制选项按钮 Edit Recording Options
-> 选择第三项 Recording 脚本录制方式 不用改 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)脚本事务中的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");
打开控制台 -> 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 默认按照场景方式 (选择)
特点:所有脚本共享同一场景
或 Group 按组方式,分组设置场景
后续设置...
回顾参数化:(关心的是数据)
1、含义:同样的业务,出现不同的数据,考虑采用脚本参数化技术
2、步骤:
确定参数化的数据-->准备数据->提供策略-->参数化
3、准备数据 (目前:File方式)
<1> 每个参数使用独立文件 (参数池)
<2> 多个参数共享同一个文件 (常用)
Excel工具、Column(序号、列名)、First Data(从哪开始)
4、参数池策略 (重点、难点)
Select next row: How?
顺序、唯一、随机、与xx相同行
Update value on: When?
每次迭代、每次遇到、取值一次
When out of vaues: 仅在Unique时配置
放弃VU、循环继续、原地踏步
5、经典需求:注册脚本,多用户 --- UEA组合
另外常见的组合:SE组合
作业:复习一周内容
复习之前的所有内容 BS、MS题
用自己的话语进行描述(多用术语、言简意赅)

浙公网安备 33010602011771号