目录
性能理论知识
LR基本知识点
1、LR工作原理:
2、LR脚本支持的语言有:
3、LR的四大组件
4、Vugen的选项:
5、事务的响应时间查看
6、性能测试目的
7、常见单词:
LR性能问题
1、请简述性能测试的过程。
2、请写出基准测试的两种方式。
LoadRunner 较深理解
1、协议:
2、开始录制
3、调字体-----字体:
4、注释单行:
5、常见函数
注解(事务/为什么添加检查点)
6、看请求发送之后的页面:
7、生成脚本之后,编译一下脚本;
8、日志
9、runtime setting:运行时设置;
10、recording options:录制选项设置;
11、tasks:任务:
12、controller里面的runtime
13、迭代优先级
14、参数化 Open Parameter
Update value on:该选项是用来控制参数获取、更新参数值的时机、条件
Select next row:该选项是用来控制参数获取、变更参数值的方式
参数化取值方式
LR基准测试基础---知识
1、 基本使用方法
2、Recording options:录制选项(详解)
HTML mode:HTML模式
URL mode:URL模式
Port Mapping
3、录制乱码
Support:该选项和LR中录制、生成脚本时的乱码有关。
乱码问题:乱码问题的产生,本质上就是编码不一致导致的。
4、runtime setting :运行时设置
5、log:日志
6、lr_think_time:思考时间:
7、Agent(代理程序):
8、添加集合点(三种方式):
9、XXXXX
10、LR脚本增强操作主要有
LR基准测试
LR并发测试
LR第四大组件问题
LR深入性能问题
1、如何实现一半用户的并发?请写出并发测试的详细步骤;
2、参数化策略的常用组合有哪几种?请写出参数化的详细步骤;
3、LR迭代什么意思:
4、如何减少客户端对服务器的压力:
5、请写出文本检查点的函数,并说明函数的注意点;
6、手动关联的步骤;
1、软件的性能,包含两个特性:包含两个特性:【时间资源和空间资源】
1) 时间资源是指:系统处理客户请求的响应时间;
2) 空间资源是指:系统资源消耗的情况,常见的系统资源主要包括:CPU、内存、网络、磁盘;
2、用户的感性时间和真正的响应时间;
感性时间:从客户端提交请求到系统开始返回时间;
真正的响应时间:从客户端提交请求,到系统将全部数据呈现出来的时间;
3、响应时间:
网络消耗的时间+应用服务器处理的时间+数据库服务器处理的时间;
响应时间:做一个操作或是一系列消耗的时间;
响应时间=网络消耗的时间+应用服务器处理的时间+数据库服务器处理的时间
1)用户体验时间:带有主观性,从请求发出,到收到数据开始,就认为这是响应时间
2) 真正的响应时间:从请求发送出去,到所有数据全部返回,这才是真正的响应时间
4、吞吐量:
单位时间内服务器处理的字节数(byte/sec)
5、吞吐率:
单位时间内服务器返回的字节数(吞吐量/测试时间);
吞吐率的值越大,系统的负载能力越强。
6、思考时间:
是指用户在进行操作时,每个请求之间的时间间隔;lr_thank_time();
7、TPS(transaction per second):
表示服务器每秒处理的事务数。
8、点击率:
每秒钟用户向服务器提交的HTTP数量
1)点击率不是用户的单击次数
2)点击率越大,对服务器的压力就越大
9、资源利用率:
指服务器系统不同硬件资源(CPU、内存、网络、磁盘)被使用的程度
10、性能计数器:
是描述服务器或者操作系统性能的一些数据指标;
1)在性能测试中常用资源利用率进行横向对比。
11、基准测试(单用户测试):
运行一种或者多种业务,将测试结果作为基线数据,为系统调优或者评测提供参考;
·目的:测试获取系统响应时间的基准值。
·操作:模拟一个用户多次请求服务器,取响应时间的平均值即可。
12、负载测试(最大处理能力):
负载测试:是通过对被测试系统不断加压,直到超出了预定的指标或者是部分资源已经达到了饱和程度,来测试系统的最大负载。
·目的:是测试系统的最大处理能力和系统的最佳性能表现。
·方式:通过模拟不同量级的负载用户数来进行测试。
13、压力测试(稳定性):
系统已经达到饱和程度,来测试系统处理业务能力以及系统是否会出错误;
压力测试:指系统到达饱和程度(CPU、磁盘、已经处于饱和程度)
·目的:是测试系统的稳定性,评估系统在极限负载情况下的稳定性如何。
·方式:极限不等于最大。时间一般建议是7×24小时。至少12-24小时。
14、容量测试(不同容量):
·目的:评估、预估系统在不同容量级别下的性能表现。
15、配置测试
·目的:通过测试,获取系统的最低配置和推荐配置。
是通过调整系统软硬件环境,了解各种不同环境对系统性能的影响,从而找到最优质的配置;
16、并发测试(用户同时发送)
1)概念:同一时间与服务器进行数据交互的所有用户数量;
2)两个要点:同一时刻(瞬时压力)、要与服务器有数据交换;
3)误区:a、不是所有的用户都叫并发用户; b、不是所有在线的用户都是并发用户;
·目的:测试系统是否存在资源争用、事务冲突、锁的升级等现象。
·方法:一般通过严格的并发来实现。
17、思考时间:
是指用户在进行操作时,每个请求之间的时间间隔(步骤之间的等待时间);lr_thank_time();
18、性能测试的方法主要方法包括:
基准测试/并发测试
负载测试/压力测试
配置测试/可靠性测试
19、可靠性测试:
是指当系统处于一定业务压力下,让系统持续运行一段时间,观察系统是否达到要求的稳定性;
1)对与给定的被测系统(B/S、C/S),VUGen会根据所选择的协议,进行录制和捕捉用户操作,生成脚本,可以对脚本进行调试增强(事务、检查点、集合点、参数化、关联),并且可设置runtime setting(运行时设置),形成一个简单的场景;
2)在controller中,可以联合LoadRunner模拟虚拟用户,创建设置运行监控场景,收集数据;
3)生成测试报告和图表(.doc/execl/html),对测试结果进行分析(合并图表、设置目标、细分图、钻取);
java、c、Visual Basic、vbscript
Vugen:Virtual User Generator,虚拟用户生成器,是LR中用来录制、生成、调试脚本的组件。
虚拟用户,在LR中,脚本就是虚拟用户。严格来说脚本只是虚拟用户的行为模板。
在Vugen中,只能模拟一个“用户”(线程)的行为,不能模拟多个用户的行为。
Controller:控制器,是LR中用来设计、实现和执行场景的组件。
场景:就是指很多用户执行脚本的场景。
在Controller中,实现的是多用户的行为模式。
Analysis:分析器,是LR中用来收集、整理测试结果,并且出具初步的性能测试报告和图表的工具
该工具只是提供了各种用于数据处理、分析的选项和功能,帮助用户去完成数据分析、定位瓶颈的工作。
Load Generator:负载生成器,是LR中用来实现“虚拟用户”,即线程/进程申请、调度的工具。
PS:一般来说,安装LR就会包含这四个核心组件。。然后Load Generator组件是可以独立安装,且可以安装在非windows环境下。负载机上可以只安装Load Generator组件。
在LR的Vugen中,选项整体是分为三类:
·Recording options:录制选项,控制的是脚本的录制、脚本的生成。
·Runtime settings:运行时选项,控制的是脚本实际运行时的一些选项。
·General options:常规选项,控制的是Vugen自身的一些运行设置。
事务的响应时间在 analysis、controller 组件中,进行查看。
性能测试的目的是为了测试产品性能是否达标,监控时间资源和空间资源,分析性能瓶颈,提供调优方案,达到产品标准
1)Runtime setting:运行时设置
Runlogic:设置迭代次数
Pacing:设置迭代间隔
Log:设置日志相关
Think time:设置思考时间
2)edit recording options:编辑录制选择
Recording:设置HTML的录制还是URL的录制
Advanced:设置支持的字符集--UTF-8
Correlation:设置关联规则
3)vusers_init:一般录制初始化过程(比如登录)
action:一般录制关心的操作
vusers_init:一般录制结束操作(比如退出)
globals.h:声明函数
PS:init和end与action:
① Action里面可以设置迭代和集合点,Init和end不可以设置。
② init和end可以设置插入事务和检查点
制定测试计划---生成测试脚本----创建、设置、运行、监控、场景、收集数据-----分析测试结构
设置迭代次数、设置持续时间
1)single 单协议;(web (HTTP/HHTML)、Ajax)
2)multiple:多协议;
3)recent:最近使用过的协议
1)application type:interner(B/S) win32(C/S)
2) program to record:用哪个浏览器去录制;
3) URL address:被测试系统的地址
4)Record into action :把脚本录制到那个action里面
Vuser init :初始化脚本(一般会录制打开浏览器以及登录操作)
Action:一般录制关心的动作(Action功能会强大一些,如迭代,集合点)
Vuser_end:结束脚本,一般录制退出和关闭浏览器的操作
Globals.h:头文件、声明函数
Ps:1)init、action、end只能从前往后选,不能到回去选;
2)如果只是录制登录操作,那么其实关心的就是登入,可以把登入
直接录制到action;
LR界面相关大小:直接 ctrl + 鼠标光标滚动即可
LR脚本字体大小:tools----general Option ------- evnvironment----editor
双斜杆 //XXXXXXXXXXXXXXXXXXXX
Web_URL(); //发送页面请求的函数
web_reg_find(); //1)放在相应请求之前;
2)检查的文案在源码中查找;
web_find(); //1)放在相应请求之后;
2)检查的文案直接在页面中查找;
3)查找内容的左右相反;
4)运行时设置里面允许图像和文本检查点
web_image_find(); //图像检查点函数
lr_rendezvous(“buy”); //集合点函数
lr_output_message(); //输出函数
lr_eval_string(); //把lr的变量介绍给C使用,lr的变量不需要定义
lr_start_transaction(“login”); //开始事物login
lr_end_transaction(“login”,LR_AUTO); //结束事物 login
其中LR_AUTO,自动判断事物的状态《pass、fail、stop》
ps: 1)以是否运行结束事务的函数来判断事务的状态
2)开始事务和结束事务是成对出现的;
lr_think_time(150); //思考时间(单位:秒)
思考时间:表示有150s的时间没有做任何操作,没有与服务器进行任何数据交换;
web_submit_form(); //发送表单请求的函数;
PS:①LR_AUTO自动判断事务状态(pass、fail、stop)以是否运行结束事务函数来判断
② 为什么要插入检查点:因为事务状态是通过是否运行结束事务来判断,lr验证的是数据的交换,没有校验数据包的数据是否正确,所以要插入检查点。
光标放在相应的请求函数,切换到tree视图,可以看到相应的页面(快照)
编译脚本可以发现语法错误(无法发现逻辑错误),修改脚本之后,进行编译;
replay log:回放日志;
recording log:录制时的日志;
correlation results:关联结果;
generation log:生成日志;
runtime setting:运行时设置;是用来控制脚本的运行相关的选项。
PS:在Vugen和Controller中都可以对脚本的运行时设置选项进行设置。
录制选项该选项是用来控制LR录制和生成脚本的模式,模式有两大类三小类
两大类:HTML mode:HTML模式,又叫主请求模式
URL mode:URL模式,又叫http模式
三小类:HTML下基于用户行为模式(由HTML模式拆分两个)
HTML下基于URLs模式(由HTML模式拆分两个)
URL mode:URL模式,又叫http模式(不变)
1)recording:开始录制的入口,录制概要(协议、action、事务);
2)replay:再次回放;
3)enhancements:脚本增强(事务、参数化、检查点)
4)prepare for load:准备负载(迭代、并发用户数)
Setting优先于VUGen里面的runtime setting
controller里面的持续时间(duration)优先于runtime setting 里面的迭代次数
Each Iteration:每次迭代,是指在每一次迭代开始之前,参数会去获取、更新参数值。在下一次迭代开始之前,不论参数是否被调用,调用一次还是多次,参数的值都不会发生变更
Each Occurrence:每次出现,是指每一次参数被调用,参数就会去获取、更新参数值。调用一次,变更一次
Once:仅一次,是指参数第一次被调用时,参数会获取一个参数值,在虚拟用户的生命周期中,参数的值不再发生变更
Sequential:顺序取值
Random:随机取值
Unique:唯一取值
Same line as XXX:该选项仅当脚本中存在2个及2个以上的文件类型的参数时才会出现。作用:当参数B选择了Same line as 参数A,则表示参数B被调用时,会使用和参数A相同行号的值
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
医生 甲、乙、丙
病人 甲1、甲2、甲3、甲4、乙1、乙2、乙3、乙4、丙1、丙2、丙3、丙4
甲医生只能对甲X病人操作,不能对其他乙、丙病人操作;作业:以分块方式进行参数化LR
英文简称 | 中文描述 | Vuser1 |
Vuser2 |
Sequential + Each Iteration | 顺序取值 + 每次迭代 | AA|BB | AA|BB |
Sequential + Each Occurrence | 顺序取值 + 每次出现 | AB|CD | AB|CD |
Sequential + Once | 顺序取值 + 仅一次 | AA|AA | AA|AA |
Random + Each Iteration | 随机取值 + 每次迭代 | XX|YY | MM|NN |
Random + Each Occurrence | 随机取值 + 每次出现 | X1X2|X3X4 | M1M2|M3M4 |
Random + Once | 随机取值 + 仅一次 | XX|XX | MM|MM |
Same line as XXX | 同一行 XXX() | AA|BB | AA|BB |
Alocale X values for each Vuser | 以X个虚拟用户做为块 | Aa1a2|Bb1b2 | Aa1a2|Bb1b2 |
1)在controller里面测试:第二个组件才能收集数据
2)基准测试:设置迭代次数(number of iterations)、设置持续时间(duration)
该选项是用来控制LR录制和生成脚本的模式
HTML mode:HTML模式又叫主请求模式。在该模式下,LR只会对主请求进行解析、生成脚本函数。
特征:脚本中的请求函数会包含:mode=HTML
优点:录制生成的脚本简单。
缺点:可能会遗漏某些ajax类型的请求。
HTML模式又分为两种子类型:
①HTML下基于用户行为模式:该模式下,LR会通过上下文(Context)的方式来建立上下相邻的两个请求之间的依赖,是脚本层面的强制依赖。在该模式下,从第二个请求开始,每一个请求的执行都是建立在前一个请求的响应的基础上。
优点:对于业务中本身就存在上下依赖的请求,不需要做关联处理。
缺点:脚本的耦合度高,可编辑性几乎为0.
②HTML下基于URLs模式:该模式下,LR生成的请求都是基于纯粹的URL请求的方式来生成,每一个请求之间都是独立的。
缺点:对于业务中的有依赖关系的请求,必须要做关联处理。
优点:脚本的耦合度低,可编辑性高。
URL mode:URL模式又叫http模式。在该模式下,LR会对所有协议级别的请求(包括主请求和子请求)都进行解析、生成对应的脚本函数。
特征:脚本中的请求函数会包含:mode=HTTP
优点:不会遗漏任何协议级别的请求,比如说ajax类请求。
缺点:录制生成的脚本臃肿,可读性较差。
PS:在实际操作过程中,建议采用HTML下基于URLs模式为主,以URL模式为辅助。
Port Mapping:和代理录制、https等有关。Capture level:默认是socket级别。
勾选Support,则LR在录制生成脚本时,会自动对服务器响应的utf-8编码的数据进行解码,转化为本地编码的脚本。
不勾选Support,则LR在录制生成脚本时,不会自动对服务器响应的utf-8编码的数据进行解码,直接将UTF-8编码的数据存为本地编码的脚本,此时就会产生乱码。
在LR中,乱码问题的总结如下:
脚本中是否存在乱码,对于脚本本身的执行其实是没有影响的(设置正确的情况)。
Support选项不是直接影响脚本的乱码,而是通过间接的方式影响。真正影响脚本中是否可以存在乱码的是运行时设置选项中的:Convert from/to UTF-8选项。
一旦勾选Support,则生成的脚本会解析UTF-8数据,会将Convert选项设置为1(Yes),这就意味着脚本中可以直接使用本地编码的数据。
一旦不勾选Support,则生成的脚本不会解析UTF-8数据,会将Convert选项设置为0(No),这就意味着脚本中不可以直接使用本地编码的数据。
1)run logic :设置迭代次数(只有 action会参与)vuser_init,vuser_end不参与迭代
2) pacing:迭代间隔;as soon as:前一次迭代一结束,马上开始下一次迭代;
the previous iteration ends:
①fixed:前一次迭代结束之后固定多长时间再开始下一次迭代;
②random:前一次迭代结束之后随机多长时间再开始下一次迭代;
At XX intervals:
①fixed:两次迭代之间间隔固定多长时间
②random:两次迭代之间间隔随机多长时间
Ps) 1.注意intervals是前一次迭代开始就计时,而不是等前一次迭代结束;
3)设置迭代间隔,可以减少单位时间客户端对服务端的压力;
only:只有出错时才发送日志
always:总是发送日志
日志信息的等级:
standard:标准日志
extended:扩展日志:
parameter:参数替换
data:从服务器返回的
advanced:高级跟踪
忽略思考时间、回放思考时间
as:按照录制时候的时间回放
multiply:按照录制时间的倍数进行回放
use random percentage:按照录制的随机百分比进行回放
limit:限制思考时间最大为多长时间
ps:1)limit可以和前面三项一起使用;
2)设置思考时间,可以减少单位时间内对服务器的压力
右下角有一个雷达的标志(LoadRunner agent process)
1) 每一台负载机都需要安装agent,并且打开
2) 可以接受来自总控制的命令
3) 打开agent :程序----LoadRunner----advanced setting----lr agent process
集合点测试方法:lr_rendezvous(“XXX”);
A.录制时添加
B.菜单栏insert-----rendezvous
C.在相应位置----右键----insert----rendezvous
all vusers:当所有的用户的百分比达到集合点的时候释放
all running vusers :当所有运行中的虚拟用户的百分比到达集合点的时候释放
XXX vusers :设置具体的虚拟用户数到达集合点的时候释放
Timeout between vusers :虚拟用户之间的超过时间:30s;
参数化
关联
事务
检查点
思考时间
集合点
1)设置迭代次数步骤:runtime setting:
①runlogic:8(迭代次数)
②pacing:随机2-3s(迭代间隔)
③log:出错时发送标准日志
④lr_think_time:50%-150%
加载方式: ①运行之前初始化 ②同时加载用户;③duration:运行到脚本结束就停止
2)设置持续时间步骤:runtime setting:
①runlogic:1
②pacing:随机2-3s
③log:出错时发送标准日志
④lr_think_time:50%-150%
加载方式:①运行之前初始化 ②同时加载用户;③duration:设置持续3分钟 ④stop:同时结束(释放)虚拟用户
3)添加负载机(添加的负载机是已经ping通过的):design视图-----load generator 处add----IP和平台
4)连接添加的负载机:工具栏(菜单scenario)------load generator----连接;
借助其他的机器产生负载进行性能测试
1.要有集合点 2.并发策略(controller中设置)
并发用户数的设置:VUGen里面是单用户,到controller里面才可以设置多用户;
基本步骤:
1. 准备脚本(并且插入集合点)
2. 设置并发策略
3. 同时加载所有用户
4. Runtime setting 中忽略思考,设置迭代为1
1)设置迭代次数步骤:runtime setting:
①runlogic:8(迭代次数)
②pacing:随机2-3s(迭代间隔)
③log:出错时发送标准日志
④lr_think_time:50%-150%
加载方式:①运行之前初始化 ②同时加载用户; ③duration:运行到脚本结束就停止
2)设置持续时间步骤:runtime setting:
①runlogic:1
②pacing:随机2-3s
③log:出错时发送标准日志
④lr_think_time:50%-150%
加载方式:①运行之前初始化 ②同时加载用户;③duration:设置持续3分钟 ④stop:同时结束(释放)虚拟用户
Load generator 负载生成器 Mmdrv.exe 用来实现虚拟用户的进程
一个进程大概支持50个线程
1)先确定一个负载机可以支持多少个用户;(看一个进程占用多少资源)
2)确定需要多少个负载机
在并发策略里,设置第一项为50%或者第三项设置具体虚拟用户的一半
步骤:
1) 准备脚本(脚本中插入集合点)
2) 设置并发策略controller
3) 加载方式中设置同时加载所有用户
4) 运行时设置里忽略思考时间,迭代间隔迭代1次
参数取值方式:
UEA:唯一+每次迭代更新+超出范围时放弃
SE:按顺序+每次迭代更新
步骤:
1) 找到需要参数化的常量
2) 参数替换常量
3) 准备参数池(数据和参数取值策略)
4) 设置迭代
重复,action(action的第一行脚本到action的最后一行脚本)参与迭代;
1)在脚本中添加思考时间,把思考时间延长;
2)在运行时设置里面thank time和pacing设置调大一些;
3)调整虚拟用户数量;
4)加载用户的间隔延长;
Web_reg_find();
1)放在相应请求之前;
2)检查的文案在源码中查找;
Web_find();
1)放在相应请求之后;
2)检查的文案直接在页面中查找;
3)查找内容的左右相反;
4)运行时设置里面允许图像和文本检查点
Web_reg_save_param();
1) 找到动态数据
2) 在生成日志中找到左右边界
3) 找到生成动态数据的相应请求
4) 在相应请求之前写上关联函数----关联函数:web_reg_save_param();
5) 替换动态数据
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------