LoadRunner(5)
一、在线综合场景测试:号称能更真实模拟实际生产环境
又称为:混合交易测试 (交易就是事务 Transaction)
1、三要素:
1)多用户:根据需求指定VU数 压力的来源
2)多任务:根据需求结合多个任务混合执行 3个以上
通过多个脚本体现
3)在线持续运行一段时间:一般1h左右
2、录制脚本时建议进行必要的设置:
1)让页面的标题变为自动的文本检查点。
(<title>标题文本</title>)
建议:开发方在设计网页时,给不同的页面使用不同的标题,用于辅助的检查。比如成功页面和错误页面的标题不同。
操作:VuGen -> Edit Recording Options 编辑录制选项
选择Advanced高级 ->
选择Generate web_reg_find functions for page title.
为页面标题生成检查点函数。
2)为VuGen录制时指定合适的字符编码集:
原因:为了避免录制后脚本中文乱码问题
原理:char c1 = 'A'; 65 打印出 c1 + 1 66
每个字符都对应一个数字 -- 字符编码
常见的字符编码表:
美国 AscII 编码表 1Byte中7bit 0~127 128种字符
字符 十进制数 编码
'0' --- 48
'1' --- 49
'A' --- 65
'a' --- 97
西欧 Latin-1/ISO8859-1 1Byte中8bit 256种字符
任何字符集都和AscII向下兼容
结论:英文和数字不会出现乱码问题
中国:GBK/GB2312 2Byte 表示更多整数 -- 字符
国际通用:UTF-8 可变长 英文1Byte/中文3Byte
支持多种国家的字符集,项目中常用
中文乱码的原理:编解码方式的不统一
编码 解码
'你' '好' GBK 1122 3344 GBK '你' '好'
Latin-1 ?? 不存在
UTF-8 '鍦' '嚎'
操作:建议将字符集改为适合当前项目的编码表
比如常用UTF-8
Support charset -> UTF-8
能够避免录制后脚本中的中文出现乱码。
3、需求:针对WebTours项目核心测试点进行一次综合场景测试,针对购票、查看航班、浏览线路操作进行10用户在线综合场景,持续运行1小时(压缩为20分钟)。
4、先录制脚本:script\day05目录下
注意添加事务、检查点:
核心业务通过事务表示,为不同事务起对应的事务名;
后续场景运行后能够自动获取不同事务的平均事务响应时间、TPS等指标。(混合交易、事务)
1)购票 buy
事务:login 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按钮
-> 结束事务scan
-> 改为vuser_end -> Sign Off -> 关闭浏览器 -> Stop
5、脚本注意事项:
1)合理添加事务:后续场景中针对不同事务自动统计平均事务响应时间、TPS等结果;
2)适合添加检查点:不添加导致结果无法核实,如果添加过多会影响工具性能。建议手工添加1~2个,结合自动页面标题检查点即可。
3)问题:是否启用Think time? 思考时间/等待时间
分析:为了保证业务的真实性,需要思考时间,模拟用户步骤之间的等待;如果事务内含有思考时间,会累加到平均事务响应时间中,对结果产生影响。
结论:建议启用思考时间,并将事务内的lr_think_time();转移到事务开始之前。
操作:对三个脚本的不同部分进行检查,尤其是事务内
buy search scan init 和 Action
注意:及时编译 -> 回放 确保最新版本
4)在线综合场景的脚本中不需要设置集合点,只有并发测试才需要。因为虽然多用户可能存在并发,但无需像并发测试那样形成瞬时压力。如果有集合点,建议注释掉:
//lr_rendezvous("集合点名");
5)参数化:根据业务需要进行,目前暂时忽略。
6)场景设置的前提:确保脚本录制、调试、回放成功。
6、打开控制台Controller,设置10VU综合场景
使用手工场景、不使用百分比方式分配VU
(1)设置场景模式、脚本组:
New Scenario -> Browse 依次载入day05\三个脚本
buy、search、scan 配置脚本组:
-> Basic Schedule
Group Name Quantity
buy.3 2
search 4
scan 4
一共10个VU,根据用户习惯设置合适的比例,模拟真实的访问效果。
(2)场景方式:
Schedule by:
1) Scenario: 默认按照场景方式(选择)
特点:所有脚本组共享同一个场景
2) Group: 按照组方式,分组设置场景
特点:不脚本组可以单独设置场景
用途:适合多个组之间有协作关系时使用,比如reg注册30个账户给buy业务使用,reg组要先于buy组执行,使用组方式。
(3)设置VU的行为:
将三个组都选中(出现黑框),一起设置:
1)初始化:默认运行之前初始化
2)加载方式Start Vusers:设置小递增,每隔1s加载1个VU
双击 -> 单选第2项: 1 00:00:01(HH:MM:SS)
-> OK 效果图:锯齿状
3)持续时间Duration: 指定20分钟(项目中一般1h左右)
-> 单选第2项 Run for 0 days and 00:20:00(HH:MM:SS)
说明:所有VU在20分钟内,循环执行各自Action脚本,时间将至,自动结束退出。
第1项:运行直到结束,适合明确迭代次数时使用;
比如固定注册30个账户
第2项:适合明确持续时间时使用;
第3项:一直运行,直到手工停止。
4)退出方式:可以采用递减退出,避免突然的压力对测试结果产生影响,比如设置为每隔1s减少1个VU.
及时保存场景文件:
D:\work\scenario\day05\10VU在线综合场景 *.lrs
(4)设置Run-time Settings
选中三个脚本组 -> Run-time Settings -> 弹出窗口:
选中多运行模式 RTS:
Sharded RTS 共享 / Individual RTS 独立
所有组统一设置一遍 每个组依次设置一遍
1)迭代次数:1 此处不起作用,由Duration决定 20分钟
2)Pacing: 改为第2项,随机4.000~6.000s
Action迭代的间隔时间
3)Log: 启用 Enable logging (选择)
Log options: 日志选项
Send message only when an error eccurs (选择)
出错时才发消息
Always send message 总是发消息,会写日志文件
Log message at the detail level of: 日志消息级别
Standard Log 标准日志(选择)
Extended Log 扩展日志
4)Think time: 启用,使用随机百分比50%~150%
Use random percentage of recorded think time.
Min: 50% Max: 150%
5)Additional attributes: 附加选项/特殊参数值 不设置
6)Miscellaneous: 杂项/其它
<1> Error Handling 错误处理
-> Continue on error 打钩 错误时继续
原因:长时间测试过程中会执行大量的事务,不用因为个别错误而停止场景的运行。出现大量的错误,需要手工停止并及时纠正。-- 瑕不掩瑜
水至清则无鱼,人至察则无徒
错误率:0.3%以内 1000个事务,错误3个以内可以接受
<2> Multithreading: 多线程 Thread线程 模拟 VU
Run Vuser as a process 以进程方式模拟 相对稳定
Run Vuser as a thread 以线程方式模拟(选择)省资源
<3> 自动定义事务:都不选择
原因:事务由自己定义,如果自动事务过多(每个Action、每个步骤),会导致结果数据多而杂,影响判断。
自己添加的事务:login buy search scan 4种
7)Network网络:Speed Simulation 网速模拟
选择:Use maximum bandwidth 使用最大的带宽
原因:准备充足的带宽,将最大的压力尽快呈现给服务器
带宽:是网速的说法
网速的单位 bps bit per second
比特/秒
比如网速 100Mbps 1Byte 字节 =8bit 位
相当于 100/8 = 12.5MB/s
衡量程序性能的两个角度:
时间复杂度:时间越快越好
空间复杂度:对内存空间的消耗越小越好
8)Browser Emulation: 浏览器模拟
Simulate browser cache 模拟浏览器的缓存 Cache
缓存的原理:拿空间换时间!-- 提高系统性能的重要思想
使用更多的内存空间 赢得 更快的访问时间
结论:目前测试不使用缓存,为了让每次访问都公平对待
如果使用缓存,让客户端更省力,降低后台压力
后续都选中:每次都当做新用户看待 -- 公平
下载非HTML资源、每次迭代模拟新用户、每次迭代清缓存
9)Internet Protocol: 互联网协议
Proxy: 选中No Proxy 不要代理
Preferences: 后续疲劳强度测试也够用
-> Options 选项 -> 将三个120都改为600 (秒)
都是超时时间,保证充分的时间,促进成功率。
连接
包括:Http-request connect timeout(sec) -> 600
接收
Http-request reveive timeout(sec) -> 600
Step download time(sec) -> 600
-> OK 同样是在其它组
(5)配置Windows resources 系统资源监控
(后续查看平均结果作为参考)
配置好Run-time settings后,继续配置Windows resources
(Run视图 右下角窗口)
右击窗口-> Add Measurements... ->
Monitered Server Machines: 选机器 点击Add.按钮 ->
Machine Information:
Name: localhost 指定监控服务器的IP地址,主机名
目前就是本地主机
Platform: WINXP 系统平台
-> OK
Resource Measurements on: localhost 清空里面所有选项
自己完成选项的添加(固定13项+1)
-> 点击Add按钮 -> 选择以下内容:
<1>Processor中有2项:(处理器 CPU)
%Processor Time -> Total -> Add Total表示总和
%User Time -> Total -> Add
<2>Memory中有4+1项:(内存)
Available MBytes -> Add
%Committed Bytes in Use -> Add
Page Faults/sec -> Add
Pages/sec -> Add
Page Reads/sec -> Add 页面读取率
<3>Network Interface中有2项: (网络)
Bytes Total/sec
-> MS TCP Loopback inter...回环-> Add
本地主机才选回环
Packets/sec
-> MS TCP Loopback inter...回环-> Add
本地主机自己和自己通信,用回环
<4>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
磁盘读写率
Disk I/O 磁盘输入/输出 Input/Output
读 写
<5>System中有1项: (系统)
Processor Queue Length -> Add
-> OK
以上一共14项,先了解名字,后续再强化。
-> 运行场景 Start Scenario
(6)注意:
1)当场景中Duration到达指定时间时,LR会向所有VU发出退出系统指令,所有VU运行完当前Action之后,退出系统;
如果无法正常退出,和信号丢失有关,建议手工停止。
2)运行出错,进行分类,依次解决:
<1> 哪些错误不用关心?
少量的非事务错误,可以忽略;
负值分母计数器,和系统资源监控有关,可忽略;
少量事务错误(0.3%以内),也可忽略。
<2> 哪些需要关心?
大量的错误,比如服务器崩溃了,大量无法连接;
大量事务错误,和脚本有关,比如逻辑结构、代码语法、参数化数据等; reg脚本重复使用数据注册会报错
事务有开始,没有结束也会在场景中报错
场景设置出现偏差,会导致一定错误。
<3> 如何解决?
提前结束场景,根据错误信息,点击Details 详细描述,查看错误的位置、原因、解决方法建议;
vuser_end.c(9): Continuing after Error -26366: "Text=Flight Selections" not found for web_reg_find
和页面标题的检查点有关,找不到
针对此次结果打开Analysis:
将结果文件保存:
D:\work\result\day05\10VU综合场景测试_r1*.lra 结果分析文件 analysis
性能分析和结果报告:
Duration: 20 minutes and 52 seconds. 场景运行时间
1、最大在线用户数:10个
2、总吞吐量:7,106,544 Byte
3、平均吞吐率:5,672 Byte/sec
4、总请求数:3,015 个
5、平均点击率:2.406 个/秒 Hits per second
平均每秒客户端向服务器发送2.406个请求
6、总错误数:1 经过分析,影响不大
7、重点关注事务特性
Transaction Name Minimum Average Maximum
Std. Deviation 90 Percent Pass Fail Stop
事务名 最小 平均 最大 标准方差 90%时间 成功 失败
buy 0.205 0.247 0.486 0.058 0.254 35 0 0
login 0.452 0.538 0.791 0.095 0.574 10 0 0
scan 0.444 0.62 0.975 0.102 0.777 157 0 0
search 0.208 0.275 0.629 0.096 0.435 93 0 0
初步分析:不同事务的平均事务响应时间<2s
最大时间<2s 时间效率较高
标准方差:0.058等,说明结果比较稳定
事务成功率:100%
8、Http响应状态码 Http Response Status Code
Http协议通过不同响应码来识别不同响应:成功、失败的信息。使用3位整数 第1位表示类别
请列举常见的Http响应状态码
分类:
1xx: 中间环节
2xx: 成功(正常) 比如 200 OK 成功响应
3xx: 重定向(正常) 比如 302 重定向响应
4xx: 客户端错误(问题)比如 404 资源找不到
5xx: 服务器错误(问题)
比如 500 服务器端程序有异常、错误
Exception 异常
ArrayIndexOutOfBoundsException
数组下标越界异常
Error 错误
W3CSchool全套Web开发手册.chm
HTML -> 参考手册 HTTP消息
9、如何查看TPS? 每秒事务数 系统效率的体现
右击Graphs -> 新的选项 新的图
事务名: TSP 平均值
buy 0.028
search 0.074
scan 0.125
分析:TPS值不高,是因为给的压力不大,请求不密集。
10、如何查看系统资源使用率? 资源监控 计数器
右击Graphs -> 新的选项 新的图
System Resources 系统资源
Windows Resources Windows系统资源
技巧:常看平均值,最大值作为参考
1)CPU使用率:
% Processor Time (Processor _Total):localhost
最小 平均 最大 标准方差
0% 13.304% 85.938% 10.948
初步分析:平均值13.304% 符合要求 < 70%
最大值85.938% 超过阈值 70%
2)Memory的剩余情况:
Available MBytes (Memory):localhost
最小 平均 最大 标准方差
1529 1548.352 1595 9.504
初步分析:平均值 1548.352 MB
阈值:可用物理内存不少于10%即可
比如物理内存2G,目前可用1.512G,没有问题
3)Disk 磁盘读写率
核心硬件:
CPU ----- Memory ----- Disk
中央处理器 内存 磁盘
用途:执行指令 进程、临时数据 文件、程序 calc.exe
大小:最小 较大 最大 海量存储
速度:最快 较快 最慢 5400转/分 7200 15000
读 输入Input <-----
写 输出Output <-----
Disk I/O: 表示磁盘的输入/输出
读 写
Read Write
查询 增加、删除、修改
结论:由于磁盘读写速度远远慢于内存,如果处理一个事务需要频繁访问Disk,会严重影响速度、性能。
建议需要监控Disk的读写率,如果过高,表明磁盘存在性能瓶颈,要么更换更快的磁盘,要么需要增加磁盘数量,要么需要优化程序算法。
阈值:不超过 几MB/sec
Disk Read Bytes/sec (PhysicalDisk _Total):localhost
最小 平均 最大 标准方差
0 4902.783 961513.686 58710.736
大约4KB/sec
Disk Write Bytes/sec (PhysicalDisk _Total):localhost
最小 平均 最大 标准方差 1194.905 43067.941 988807.375 82801.825
初步分析:磁盘目前不存在读写率过高,没有瓶颈。
综上所述:当前测试各项指标都符合性能需求,测试通过。
重要的测试策略:并发测试、在线综合场景测试
练习:20VU在线综合场景
5VU购票 10VU查询航班 5VU查看订票结果
持续执行10分钟。提示:脚本可以复用
LoadRunner(5)的更多相关文章
- 老李分享:性能测试你不应该只知道loadrunner(1)
老李分享:性能测试你不应该只知道loadrunner(1) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试 ...
- LoadRunner(三)——LR相关概念&组成部分
参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.运行机制和主要组成部分 1.LoadRunner主要由VuGen.Controller和Analysis三部分构成: 2. ...
- LoadRunner(一)——性能测试基础及性能指标概述
参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.典型的性能测试场景 某个产品要发布了,需要对全市的用户做集中培训.通常在进行培训的时候,老师讲解完成一个业务以后,被培训用 ...
- LoadRunner(8)
一.脚本关联技术 引入: 打开WebTours首页,点击administration连接: 具有大量管理项,LR为了模拟一些特效设置的选项,实际项目中不存在. -> 选择第三项: Set LO ...
- LoadRunner(4)
一.LoadRunner工具的组成 1.VuGen 虚拟用户脚本生成器 脚本好比:武器 VuGen好比:兵工厂 VU好比:士兵 2.Controller 压力调度控制台 好比:总指挥部 3.Analy ...
- LoadRunner(2)
一.性能测试的基本概念 1.并发和在线的区别:并发的压力是一种瞬时压力,一般针对同一类型业务:在线的压力是一段时间的压力,没有并发那么集中. 规律:一般20用户并发产生的压力相当于200用户在线的压力 ...
- LoadRunner(1)
性能测试:HP LoadRunner11 一.初步概念: 1.功能测试:测试产品的功能是否满足功能需求. 如:ATM取款(在线取款)是否成功或转账操作是否成功 -- 一个用户 2.性能测试:测试产品的 ...
- LoadRunner(7)
一.参数化策略 1.Select next row(How? 如何取?)取值方式 选择下一行 1)Sequential:顺序的 每个VU都从第一行开始,顺序依次向下取值: 数据取完可以从头循环重复使用 ...
- LoadRunner(6)
一.脚本录制技术细节 1.选择合适的协议: 1)B/S架构:常用Web[HTTP/HTML]协议,如果项目中使用了其它技术,比如Ajax.JDBC.FTP等,就需要选择多协议: 2)C/S架构:常用W ...
随机推荐
- How To Use Rocketbots As A Dialogflow CRM
Ever wished you had a CRM for Dialogflow? We did too, so we built one. This is a best practices arti ...
- LeetCode刷题1——只出现一次的数字
一.题目要求 二.题目背景 位运算:或,异或,与,移位 三.解题思路 (1)要求算法时间复杂度是线性的,O(n),想到的是先将列表排序,排序后相同的数值两两之间前后相邻,进行偶数次循环,判断两两数值是 ...
- OpenCV_CS.测试
1.在C#中使用OpenCV(使用OpenCVSharp) - jsxyhelu - 博客园.html(https://www.cnblogs.com/jsxyhelu/p/9669583.html) ...
- shell 入门学习
目录 shell 入门学习 注释 执行与启动 变量 语法 调试 title: shell 入门学习 date: 2019/7/16 15:47:49 toc: true --- shell 入门学习 ...
- CREATE TABLE——数据定义语言 (Data Definition Language, DDL)
Sql语句分为三大类: 数据定义语言,负责创建,修改,删除表,索引和视图等对象: 数据操作语言,负责数据库中数据的插入,查询,删除等操作: 数据控制语言,用来授予和撤销用户权限. 数据定义语言 (Da ...
- 小米Python后端面试题
电话面 时长:30m 说一下对浏览器缓存的理解: 说一下MySQL优化: 说一下redis: 说一下从输入url到返回都发生了什么: 域名怎么解析的: 一面 1h 编程实现翻转单链表: MySQL中v ...
- java源码--Vector和Stack
一.Vector简介 1.1.Vector概述 通过API中可以知道: 1)Vector是一个可变化长度的数组 2)Vector增加长度通过的是capacity和capacityIncrement这两 ...
- 散列查找的C实现
概念 散列查找,类似与查英文字典的过程.如果我们要查找"zoo"(key)对应的释义(value),我们不会从第一页开始逐页查找(顺序查找),而是直接根据大致的推算(Hash函数) ...
- 第10章:深入浅出Ansible
1.Ansible介绍 1).Ansible的优点 Ansible是一个简单的自动化引擎,可完成配置管理.引用部署.服务编排以及其他各种IT需求 Ansible是Python开发并实现的开源软件,其依 ...
- 移动端测试之APP安全测试
现在APP测试已经是测试行业的一个重要分支,对APP测试技能和经验的要求也越来越高,看到一篇关于APP安全测试的总结,分享给需要的朋友.1.软件权限1)扣费风险:包括发送短信.拨打电话.连接网络等2) ...