3.Loadrunner
Loadrunner
简介:
三大组件:
- Virtual User Generator --- 录制和生成脚本;
- Controller --- 创建测试场景、运行和监控场景;
- Analysls --- 分析测试结果,出测试报告;
模块介绍:
- Virtual User Generator:记录客户端和服务器之间的数据交互,模拟用户行为,记录真实的用户行为;生成测试脚本(代码);
- Controller:创建和设计测试场景、运行测试脚本(VuGen生成的脚本)、监控场景运行,收集测试过程的数据;
- Analysis:分析测试结果(Coontreller中运行工程的结果,保存在响应的数据中),出测试报告和各种图表,供测试人员分析性能问题和瓶颈,方便找出和定位,提供基本的优化方向;
Virtual User Generator:
脚本录制:
1.选择协议类型:
- Single Protocol:使用单协议的Vuser脚本;
- Multiple Protocols:多个协议的Vuser脚本;
- Recent:最近创建脚本所用到的协议;
- Mobile:移动应用脚本所用到的协议;
- Popular:常用的协议;
2.确定使用的协议:
- 一般根据被测应用是B/S结构还是C/S结构来选择协议;
- B/S结构,一般选择Web(HTTP/HTML)协议;
- C/S结构,可以根据后端数据库的类型来选择;
- 也可以使用Protocol Advisor进行检测;
- 其他第三方协议测试工具;
- 向开发人员询问;
3.脚本录制位置的说明:
- vuser_init:存放应用程序初始化脚本(只执行一次)
- vuser_end:存放应用程序注销和关闭时的脚步(只执行一次)
- Action:存放实际的操作脚本(可以有多个,可以多次执行)
4.选择程序类型和程序地址:
5.录制过程中的控制:
6.查看脚本,脚本回放:
-
查看脚本:点击Action脚本,来查看里面的代码;
-
脚本回放,用以查看脚本录制的内容和运行是否符合要求;
常用函数:
概念:
在录制完脚本后,脚本代码中,有一些代码是与该脚本无关的,可以将它删除,所以我们需要知道一些常用的函数意思;
web_link():
简介:
- 模拟人为点击超链接,需要页面支持;
web_url():
简介:
- 页面的访问函数,无需页面支持。使用频率很高;
web_submit_from():
简介:
- 页面表单数据提交,需要页面有from表单;
web_submit_data():
简介:
- 页面数据提交,无需页面的支持。使用频率很高;
lr_think_time():
简介:
- 思考时间,两次请求间隔时间;
web_reg_save_param:
简介:
- 用于获取服务端数据,使用左右边界,只提取被左右边界包裹的值;
web_add_auto_header:
简介:
- 在下面的所有请求,添加自定义请求头信息;
web_add_header:
简介:
- 在下面的一次请求,添加自定义请求头信息;
VuGen脚本的设计和强化:
简介:
- 强化的原因:
- 脚本不能达到测试预期;
- 脚本过于简单
- 强化手段:
- 插入事务:局部操作的汇总,是TPS的基础;
- 检查点功能:就是断言;
- 集合点设置:虚拟用户集合在一起,实现并发操作;
- 参数化运行;
- Runntime settings(运行时设置)
事务:
简介:
- 定义事务时,首先在脚本中找到事务的开始和结束位置,然后分别插入一个事务起始标记;
- 在脚本运行完毕以后,系统会在结果信息中单独反映每个事务的运行结果;
- 事务函数:局部代码的性能分析;
事务函数:
- lr_start_transaction(""):开始事务,参数为事务的名称(普通变量的命名方式);
- lr_end_transaction("",LR_AUTO):结束事务,参数一为事务开始的名称,参数二为固定常量LR_AUTO;
分析和使用:
- 阅读运行日志,分析和查看食物的运行状态(Passed/Failed),性能表现;
- 事务可以在将脚本中直接添加,也可以在录制脚本时,进行添加;
- 事务可进行嵌套,可以更加详细的统计事务;
关联知识点:
- 事务的成功率;
- 每秒钟事务数;
- 事务的响应时间;
集合点(Rendezvous):
简介:
- Loadrunner中为了实现真正意义上的并发而进行的一种运行机制,会让虚拟用户短暂的集合,在满足特定条件的情况下开始放行,产生并发数;
- 注意:
- 集合点的代码不可以放在初始化(vuser_init)脚本中,或者结束(vuser_end)脚本中;
- 集合点一般要放在事务之前(集中力量在做某一件事,并发);
集合点函数:
- lr_rendezvous():参数为集合点的名称;
操作步骤:
- 在脚本中写入集合点函数;
- 打开Controller组件,既场景;
- 在场景中开启和设置集合点;在Scenario下Rendezvous中;
- 设置集合点释放策略(Policy);有三种方式:
- 百分比虚拟用户都到集合点位置;
- 百分比运行的用户到集合点位置(最常用);
- 固定数目的虚拟用户到集合点位置;
- 虚拟用户的超时设置;
- 集合点运行结果查看;
检查点:
简介:
- 相当于Loadrunner中的"断言";
- 主要用于检查在服务器压力较大时,是否能够准确的返回指定的测试对象;
检查点函数:
- web_reg_find():实现对文本内容的检查;reg是注册的意思,要在网页请求之前就进行检查点的注册,检查点函数一般放在页面请求之前;
操作步骤:
-
在使用检查点之前,需要先开启检查点功能;
- 打开运行时(Runtime Settings)设置,在Internet Protocol,选择Preferneces,勾选Enable image and text checks来开启检查点;
-
在脚本中插入检查点函数,在打开的步骤选择器中找到web_reg_find()函数;
- 在导航栏上的Design中,选择Insert in Script下的New Step,在打开的选择器中查找web_reg_find()函数;
-
设置检查点内容;
-
Search for specific Text:根据完整字符串进行匹配;
-
Search for Text by start and end of string:根据字符串的开头和结尾进行匹配;
-
三种检查方式:
- match case:匹配大小写;
- binary data:二进制数据;
- use # for any digit:用#代替任何一个数据所有数字和字符串;
-
Search in:
- Body:搜索Body标签范围内的内容;
- Headers:搜索head标签范围内的内容;
- All:搜索整个网页范围内的内容;
-
Save count:统计并保存该字符串匹配的次数;
-
Fail if:
- NotFound:没有找到就判定为失败
- Found:找到了就算失败
-
注意:检查点一般要放在web_url()之前;
-
-
查看检查点运行结果
参数化:
参数类型:
- Date/Time:日期/时间
- File:文件
- Group Name:组名称
- Iteration Number:迭代数
- Load Generator Name:负载发生器名称
- Random Number:随机数字
- Table:表格
- Unique Number:唯一编号
- User Defined Function:自定义功能
- Vuser ID:Vuser ID
- XML:XML
操作步骤:
-
选择参数化数据,将常量用变量代替;
- 右键常量,选择Replace with Parameter下的Create New Parameter,创建新的参数化列表;也可以用Parameters List来用之前用过的;
-
设置参数列表;在侧边导航栏中的Parameter来打开参数列表进行设置;
-
设置参数化的数据和运行方式;
- Add Column:添加数据列;
- Add Row:添加数据行;
- 设置参数选择模式;
- By number:通过序号选择列;
- By name:通过名称选择列;
- 选择文件格式;
- 选择下一行数据的方式(Select next row);
- Sequential 顺序选择;
- Random:随机选择;可能出现重复;
- Unique:唯一选择;只能选择一个;
- 数据更新模式(Update value on)
- Each iteration:每次迭代取新的数据;在每一次执行中,不论出现多少次这个参数,都是同一个参数;
- Each occurrence:每次取值更新;在每一次执行中,出现多少次这个参数,就会更新多少次,使之为不同的参数;
- Once:每个用户只取一个值;不论如何都只有一个参数;
- 模拟运行情况查看(Simulate Parameter);
-
设置多次运行脚本;
- 在侧边导航栏下Runtime Settings中General下的Run Logic *中的Number of iterations设置运行次数;
-
打开运行查看参数:
- 在侧边导航栏下Runtime Settings中General下的Log * 中的Detail Level中的Extended log下的Parameter substitution将其勾选;
脚本运行时设置(Runtime Settings):
General(基本设置):
Run logic(运行流程,即循环):
- 主要作用用于设计脚本和循环运行次数;
- init和end脚本文件都只能运行一次;
- 其他脚本文件,可以设置运行多次(一起运行多次,不能单独设置);一个虚拟用户运行100次;
Pacing(间隔):
- 特指脚本运行时上一次迭代和后一次迭代之间的时间间隔;
- 三种方式:
- 尽快开始迭代,在上一次结束之后;
- 指定迭代之间的延迟:可以是固定的时间(秒),也可以是两个时间间隔的随机值(上一迭代完成后);
- 新的迭代在指定的或者随机的时间(秒)之后,直接开始。(不管上一次迭代有没有完成);
Log(日志):
- 提供给测试人员(运行人员查看脚本的运行过程);
- Enable logging:启用日志;
- Log Options:日志内容设置,包括:
- Always:总是显示日志;
- 其他:可以设置为当脚本运行错误的时候显示,而不需要总是显示日志;
- Extended log(扩展日志):增加日志显示的内容,包括:
- Parameter substitution:显示参数的使用情况;
- Data returned by server:显示服务器的返回数据;
- Advanced trace:跟踪,显示请求该网址需要经过的网络节点;
Think time(思考时间):
- 两次请求之间的时间间隔
- 有5种方式可以选,第五种用于与其他搭配使用,包括:
- 忽略思考时间,脚本回放可以忽略。实际场景中,一般不会忽略;
- 按照录制的思考时间进行回放;
- 倍数运行思考时间;
- 随机取值录制的思考时间的中间比例;
- 限制思考时间的最大值(秒),不和忽略思考时间一起使用,超过指定数值的,按照指定数值运行;不超过的按照实际数值运行;
Miscellaneous:
-
错误处理方式: 一般是检查点错误;
-
一共有三种方式,可以随意搭配:
-
Continue on error:遇到错误时继续运行,最常使用;
-
Fail open transactions on lr_error_message():执行到事务中调用lr_error_message()函数时将事务的结果置为Failed;
-
Generate snapshot on error:对错误进行快照;
-
多线程(Mutilthread):
- 在Miscellaneous选项中;
- 进程(Process):系统资源(CPU、内存)分配的基础;
- 线程(thread):系统进行任务调度的一个最小单位;
- 关系:一个进程可能会包含多个线程。在一个进程中的多个线程,共享进程分配的资源;线程是软件能够支持并发的一个重要运行机制;开发过程中,大多数系统会使用支持多线程的开发语言;
- Run Vuser as a thread:将虚拟用户作为线程运行;
- Run Vuser as a process:将虚拟用户作为进程运行;
- 总结:
- 以线程的方式运行虚拟用户,消耗的资源数量少;
- 在计算机的资源量一定的情况下,使用线程的方式,可以模拟出更多的虚拟用户;
- 使用线程,可以更加真实的模拟出并发操作;
Internet Protocol(网络协议的设置):
Preferences(表现):
- 设置检查点的开启;
- enable image and text checks 选择后,可以进行检查点的功能。用于web_reg_find()函数进行检查点功能;
Controller场景设计
Controller基础:
两种场景:
- Manual Scenario(手工场景):
- 手工设置虚拟用户量,加压、减压、持续时间等内容;
- 手工的场景适用场合比较广泛,灵活,可以设置并发(集合点)以及其他设置。通过测试可以了解系统的多方位的性能指标;
- Goal Oriented Scenario(目标导向型场景):
- 根据设定的目标进行运行;只要设计好目标,其他的用户量、时间、并发等等都不需要单独设置;
- 目标导向的场景适用场合比较少。不灵活,不能设置并发和其他操作。只能针对特定目标的一种测试;
面向目标的场景设计(Goal Oriented Scenario):
- Goal Profile Name:可以设计目标的名称(new、edit、del)
- Goal Type:选择场景目标的类型
- Virtual Users:虚拟用户量;验证所需支持的用户数
- Hits per Second:每秒钟点击数;服务请求响应数,验证每秒可处理请求数
- Transactions per Second:每秒钟事务数;验证系统处理操作能力
- Transaction Response Time:事务响应时间;验证系统压力下所需要的响应时间
- Pages per Minute:每分钟页面数;验证系统整理处理能力
- Run for <HHH:MM:SS> after the target has been:设置运行时间,可以设置为目标达成后运行的时间
- If target cannot be reached:目标没有达到的选择
- Stop scenario and save results:停止场景并保存结果
- Continue scenario without reaching goal:在没有达到目标的情况下继续场景
- Receive notification:收到通知
- Do not change recorded think time:不改变记录的思考时间吗
- Load Behavior:负载行为
- Automatic:自动达到虚拟用户数目标
- Reach target number of virtual users after:指定时间后达到虚拟用户数目标
- 每个指定时间段内达到指定的虚拟用户数目标
(手工)场景设计:
脚本组的设计:
- 为场景添加、删除脚本;
- 为脚本体检虚拟用户量;
- 配置多机联合负载。(控制多台计算机运行脚本并返回测试结果数据)
- 通过Load Generators程序完成;
- Load Generators:运行脚本,产生压力数据;
- 使用Load Generators实现多机联合负载:
- 点击Scenario然后查看Load Generators信息列表
- 添加Load Generators
- 输入Load Generators机器的信息(name中只输入IP地址即可,选择系统的平台Windows/Liunx)
- 测试并连接Load Generators,如果连接成功,则会显示Ready
- 将远程Load Generators机器分配给指定的测试脚本
- 运行场景,查看结果分析(Controller自动收集远程Load Generators上的数据)
场景运行方式设置:
按照Scenarlo(场景)运行:
- 无论场景中的脚本数量有多少,所有脚本统一调度和运行;
- 没有Start Group
- 根据脚本数量平均分配;
按照Group运行:
-
场景中的脚本各自设计运行方式;
-
双击Start Group,打开对应的窗口来单独设置
-
单个脚本。单独设定开始时间
- 场景开始运行就运行
- 在指定的时间后开始运行
- 在某一个脚本运行结束后开始运行
总结:
- Group方式运行场景会更加灵活,可以体现出测试脚本的先后顺序,可以更加真实的模拟出软件或者系统承受压力的情况;
脚本运行计划设计:
- Start Group:
- 脚本开始运行的设置;
- Group模式下才能单独设置,Scenario模式不可以设置;
- Initialize:
- 初始化虚拟用户设置;
- 专门用来设置初始化虚拟用户的速度的效率;
- Initialize all vusers simultaneously:同时初始化所有vusers;
- Initialize 用户 vusers every 时间:每隔一段时间初始化一些虚拟用户;
- Initialize each vuser just before it runs:在每个虚拟用户运行之前初始化它;
- Start Vusers:
- 启动虚拟用户;
- 设置启动数量;设置启动频率(一次几个,每次的间隔时间);
- Duration:
- 设置脚本(Group模式)或场景(Scenario模式)的运行时间;
- Stop Vusers:
- 停止虚拟用户;
- 设置停止数量;设置停止频率(一次几个,每次的间隔时间);
IP欺骗策略:
简介:
- 为了使同一台主机的虚拟用户,发送请求时,更加真实和有效,服务器端能够体会到真实的用户请求的数据(避免相同IP地址的虚拟用户被屏蔽);
步骤:
- 启动IP配置工具(IP Wizard)
- 不支持DHCP,需要提前配置静态IP地址;
- 启动工具,创建新的IP设置(Createing new Settings),点 下一步
- 输入本机的IP地址;
- 在IP地址列表中,点击 add,添加其他IP地址;
- 通过ipconfig命令,查看本机的IP地址数量;(你添加好的IP地址都上去了,说明成功了)
- 在Controller中开启IP欺骗策略;
- 上方导航栏Scenario下的Emable IP Spoofer;
- 保证场景中的脚本均以线程方式运行虚拟用户;
- 保证场景中的一个设置;一个线程使用一个IP地址在Tools中 先设置 expert mode,后再次点击Options;在General中找到IP地址的设置,将其设置为IP地址对应为线程;
- 运行脚本,然后查看虚拟用户运行时使用的IP地址;查看Vuser Log中的IP地址,如果IP欺骗配置成功,每一个虚拟用户的IP地址都会不同;
Controller资源监控
简介:
- 在Controller的Run界面中,五大区域
- ① ② ③ ④ ⑤
- ①区域的作用就是显示场景中每一个脚本组(Group)的虚拟用户的运行状态;
- ②区域的左右一个是控制场景的运行,另一个作用是显示当前场景运行的状态(Error、Falied、Password等事务的数量);
- ③区域主要是显示当前可以查看的监控数据;(勾选的是可以查看的,不勾选时不可查看的);
- ④区域主要展示③区域中可供查看的资源的实时动态变化;
- ⑤区域主要展示资源图的各种详细资料和内容;
各个区域内的详细状态:
①虚拟用户的运行状态:
Down:虚拟用户离线 | Pending:待定的 | init:初始化 | Ready:准备 |
---|---|---|---|
Run:运行 | Rendez:集合 | Passed:通过 | Failed:失败 |
Error:错误 | Gradual Exiting:准备退出 | Exiting:正在推出的 | Stop:结束、停止 |
②控制和显示当前场景的运行状态:
-
控制场景运行:
Start Scenario:启动场景 Stop停止场景 Reset:重置整个场景 Vusers:查看当前的虚拟用户状态 Run/Stop Vusers:启动或者停止虚拟用户 -
显示当前场景运行的状态:
Running Vusers:当前运行的虚拟用户量 Elapsed Time:当前脚本运行的时间 Hits/Second:每秒点击数 Passed Teansactions:通过的事务数 Failed Transactions:失败的事务数 Errors:错误数 Service Virtualization:服务虚拟化
③可用资源列表:
-
Runtime Graphs:运行视图;主要表现的是运行过程中,虚拟用户的运行情况;
-
Transaction Graphs:事务图;表现运行过程中,场景中事务的运行状态;
- Total Trans/Sec(Passed):每秒钟事务数;
- Trans Response Time:事务响应时间;
-
Web Resource Graphs:网页资源图;主要表现web测试中,几个重要的数据图;
- Hits per Second:每秒钟点击数;每秒钟客户端向服务器端发起的http请求个数;
- Throughput:吞吐量;服务器接收数据和响应数据的总和;
- HTTP Responses per Second:每秒钟的HTTP响应;
- Pages Downloaded per Second:每秒钟下载的页面数;
- Connections:连接数;
- Connection per Second:每秒钟连接数;
- SSL per Second:每秒钟SSL数量;
-
System Resource Graphs:系统资源图;操作系统的资源消耗图,需要单独设置,并且需要连接服务器;
- Windows Resources:windows资源;
-
Network Graphs:主要监控网络的延迟;
-
Web Server Resource Graphs:web服务器的资源消耗,Apache和IIS;
④分析不同的数据,及其关联效果:
- 每秒点击数的图和每秒钟事务数的图走势相同。造成这种现象的原因:用户的完成食物,一定会发送页面请求(模拟的点击操作);
- 每秒点击数的图和吞吐量的图 走势基本相同,吞吐量的图数值变化要更加剧烈一些。造成这种现象原因:用户发送请求之后,服务器不但要接收数据,还有响应数据,所以吞吐量的变化趋势要更加剧烈;
- Runtime Graphs视图:
- 运行中(Running)的用户量10个开始,运行时间到大后,开始逐步退出,最终减少为0;
- 完成的(Finished)的用户量0个开始,运行时间到达后,运行中的用户开始退出,开始逐步增加,最终增加到10;
- Trans Response Time视图:
- 事务响应时间异常数据。Action_Transaction响应时间最大值为1563秒。
- 造成这种情况的原因:有两个虚拟用户,一直等待退出,但是没有退出,其中一个后来还运行了一下,导致一个响应时间超长;
- SSL per Second(会话)视图:、
- 新会话和再利用的会话之间的关系为,走势相同,但是数量之间有倍数关系。
- 造成这种现象的原因:一次请求成功后,建立了会话,后面还可以再用;
服务器系统资源监控:
监控前服务器系统的准备(window版):
Controller软件中监控:
- 勾选监控的服务器系统类型,点击ADD打开弹窗,体检对应的ip地址和查看的服务器监控资源;
- 在弹出的窗口中,点击Add添加地址的窗口,在Add Machine窗口中Name写入IP地址;
- 点击Add按钮,输入账号和密码后,添加想要监控的资源;
Analysis:
简介:
- 主要作用就是针对Controller中的运行结果进行分析;
- 给出相应的图表和结果报告;
使用Analysis分析运行场景监控出来的数据:
- 在Controller中点击Results下的ResultsSetting,在出现的窗口设置存放分析数据的位置;
- 点击Analyze Results来分析查看监控出来的数据或资源,并获得报告;
一、测试结果概要报告:
1.概要内容:
- 脚本场景开始运行时间;
- 场景运行持续时间;
- 场景内容名称;
- 运行结果的名称;
2.概要数据:
- Maximum Running Vusers:运行的虚拟用户量;
- Total Throughput(bytes):总吞吐量(字节);
- Average Throughput(B/s):每秒钟吞吐量;
- Total Hits:总点击量;
- Average Hits per Second:每秒钟点击数;
- Passed Transactions Ratio:通过事务比例;
3.事务统计:
- init、end这种Loadrunner自带的事务;
- 用户自定义的事务;
- 脚本文件产生的事务;Loadrunner自定义一个脚本文件,作为一个事务;例:Action_Transaction;
4.HTTP请求的概要统计:
- 响应的状态码;
- 响应的总次数和平均每秒钟次数;
二、各种数据的统计图表:
1.打开图表:
- 双击Graphs文件夹下的对应图表的文件,会在右侧显示出来
2.添加图表:
- 右键Graphs文件夹后点击Add New item下的Add New Graph,打开窗口;
- 在窗口中选择想要添加的图表;
三、对两次(多次)测试结果的对比和判断:
- 在file菜单中,选择Cross with Result;
- 主要作用:用来分析相同场景的,再对服务器做测试的情况下,服务器经过了性能调优后的测试结果分析(回归测试);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!