性能测试工具LoadRunner
前言👀~
上一章我们介绍了性能测试的一些基本概念,重要的是性能测试的各项指标,今天我们使用性能测试工具LoadRunner简单的完成一次性能测试
性能测试Load Runner
LoadRunner是什么?
LoadRunner安装
LoadRunner脚本录制
1.录制基本的用户脚本
2.删减无用脚本
3.编译
4.运行(回放)
LoadRunner脚本加强
1.插入事务
2.插入集合点
3.插入检查点
4.参数化
5.打印日志
掌握Controller的使用
1.创建场景的方式
2.场景的设置
3.场景的运行
掌握analysis的使用(重要)
如何生成测试报告?
图表分析
如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,讲解的内容我会搭配我的理解用我自己的话去解释如果有什么问题的话,欢迎各位评论纠正 🤞🤞🤞
个人主页:N_0050-CSDN博客
相关专栏:java SE_N_0050的博客-CSDN博客 java数据结构_N_0050的博客-CSDN博客 java EE_N_0050的博客-CSDN博客
性能测试Load Runner
LoadRunner是什么?
LoadRunner是一种适用于许多软件体系架构的自动负载测试工具,可用来模拟用户负载完成性能测试工作,从用户关注的响应时间、吞吐量, 并发用户和性能计数器等方面来衡量系统的性能表现,辅助用户进行系统性能的优化。简单点说就是一个性能测试工具,通过模拟用户负载对系统操作来完成性能测试,然后验证系统的各项性能指标是否符合预期
原理:LR启动以后,在任务栏会有一个Agent进程,通过Agent进程,监视各种协议的Client与Server端的 通讯,用LR的一套C语言函数来录制脚本,所以只要LR支持的协议,就不会存在录制不到的,然后LR调用这些 脚本向服务器端发出请求,接受服务器的响应。至于服务器内部如何处理,它不关心
LoadRunner性能测试流程:

LoadRunner安装
这里我就不演示了,安装包在开头拿去下载就行了,如果下载不了私我我发你,因为我已经下载过了,删掉重新装有点麻烦,就是点击可执行文件.exe然后一路安装下去,直到出现HP身份认证设置的时候不勾选接着一路点下去即可
为什么选择LoadRunner:
1.具有强大的录制功能
2.可以设计丰富且灵活的场景
3.能够产出丰富且详细的性能测试报告
LoadRunner三大组件之间的关系:
VUG:录制脚本和生成脚本模拟用户的行为(编写性能测试脚本)

Controller:针对脚本以及具体场景来设置测试场景,然后执行性能测试脚本(设计场景、运行以及监控场景)

Analysis:根据性能测试的结果,然后产出性能测试报告

LoadRunner脚本录制
这里我们录制LoadRunner自带的系统webTours(软件/系统)
如何启动webTours?
1.下载完成LoadRunner,找到你安装路径下的webTours文件,然后双击

2.进入选择webTours文件后,双击startServer.bat

3.然后就是下面这样,注意webTours启动后不要关闭

4.接着找到conf文件夹下的httpd文件查询端口号

5.结合刚才打开的webTours中IP地址去我们的浏览器中输入 http://上图中自己的地址IP:1080/WebTours内容即可访问到webTours,然后注册,也可以不用注册使用自带的jojo密码bean

如果要注册点这里


接着创建完后,可以去webTours文件下的cgi-bin文件夹下的user文件夹中就可以看到你刚才创建的账号名和密码了


1.录制基本的用户脚本
首先打开VUG软件,然后创建一个脚本文件


创建好了后,对图中三个脚本文件进行解释

然后开始录制

然后它会自动的跳转到刚才的我们WebTours那个界面去,我们登录后点击停止就会自动生成脚本了


注意:如果录制不到脚本可以试试打开如下图中的选项


2.删减无用脚本
然后删除一些没用的脚本,根据你实际的进行删除,我这边使用的360极速浏览器脚本产生的比较多,之前也用过chrome录制过,脚本内容有点少

3.编译

4.运行(回放)
点击运行后,如果是下图这样的效果就是成功了

但是里面的思考时间没有被执行,如果脚本中有写到思考时间去设置,这样在运行的时候也会被执行,如下图

还要设置一个,设置完这个选项后就能看到运行回放的界面了

LoadRunner脚本加强
为什么要对脚本加强?
1.录制的测试脚本达到不了预期的测试目的(也就是达不到预期的测试效果)
2.缺乏针对性
当录制完一个基本的用户脚本后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。通过一些方法来完善测试脚本,如果就单单一个简单的脚本是无法观察到这些性能指标,所以我们需要对脚本进行加强
脚本如何加强?
1.插入事务
开始事务:lr_start_transaction("事务名称");
结束事务:lr_end_transaction("开始时事务取的名称", LR_AUTO);
添加事务有两者方式:
1.直接在代码手动添加,就把上面的函数写到你要插入的位置即可
2.录制的时候手动插入事务,如下图


日志输出效果

注意:事务函数有开始就有结束,开始事务和结束事务的事务名称必须一致,可以试试不一致,在日志中会有报错信息
2.插入集合点
集合是什么?
就类似军训中一说集合大家同一时间快速集合到一起,但每个人到位置的时间点都不同,所以在使用性能测试工具的时候我们该如何实现集合的效果让用户都集中到一起并且同时请求从而实现并发的效果呢?
集合点
集合点是LoadRunner为了实现并发而进行的一种运行机制,让虚拟用户进行短暂的集合,在满足特定的条件下然后放行达到并发的效果也就产生了并发数
集合点函数:lr_rendezvous("集合名称");
和事务一样可以在右侧搜索后进行添加


注意:集合点函数只能放到action中,并且集合点应当放到事务之前
3.插入检查点
什么是检查点?
检查点相当于"断言",在进行压力测试时,为了检查服务器返回的网页是否正确。在VUG中这些检查点验证网页上是否存在指定的Text
检查点函数:web_reg_find("Text=想要匹配的关键字",LAST);


日志输出效果

注意:检查点函数一般放在页面请求之前
4.参数化
概念:使用变量代替脚本中的常量,目的是通过虚拟用真实的模拟现实用户对系统进行操作
右击一个变量后如下操作

注意创建后点No,如果选择yes替换掉所有相同的变量话如果url中带有这个变量的话会出错

然后左侧点击可以看到我们刚才创建的参数,我们还可以添加多个

要想看到参数的具体信息,我们需要修改日志等级

日志输出效果

只有一个参数的具体信息,我们需要设置Action脚本运行次数

日志输出效果

5.打印日志
函数:lr_log_message("输入你想要输出的内容");
if(strcmp("jojo",lr_eval_string("{UserName}"))==0){lr_output_message("OK %s",lr_eval_string("{UserName}"));}
如果当前登录的用户是对应的TestNan,就输出TestNan,这个lr_eval_string函数的意思就是把UserName的值输出和前面的进行比较。下面是日志输出效果

掌握Controller的使用
目的掌握创建场景、运行和监控场景,可以通过Controller设计简单的测试场景,并且可以简单的分析性能测试报告
为什么要把脚本放到Controller中运行,而不是选择在VUG里呢?
什么是性能测试不要忘记了,测试人员借助性能测试工具,模拟系统在不同场景的各项性能指标是否满足需求,所以我们需要观察系统的性能指标,在VUG中运行看不到系统的性能指标
1.创建场景的方式
第一种是在VUG中对写好的脚本创建场景


第二种是手动打开Controller进行脚本的添加并创建场景,其实和上面的差不多

2.场景的设置
1.设置初始化

2.设置启动机制

3.设置性能测试脚本的执行时间,这块可以理解为对系统的可靠性测试,因为你可以设置脚本的运行时间

4.设置虚拟用户退出机制

设置场景的运行方式

1.按照场景的方式运行:不论场景中脚本的数量有多少,所有的脚本都是统一调度和运行的
2.按照Group运行:场景中脚本有各自设计运行方式,所以根据脚本各自设计的运行方式运行
设置完成后右侧的图表会发生变化

3.场景的运行
下图是运行场景中的各个区域,对于监控区域的数据都是上一篇性能测试中的性能指标介绍的

如下图设置后图表区展示的可多可少

注意:想要查看系统资源图表,需要手动修改配置
1.打开任务管理器,启动对应的服务器

2.选中监控区域中的System Resource Graphs下的Windows Resource,然后在指标详细数据区域右键,选中add Measurements


3.监控指标的选择,选择你要观察的系统资源即可

4.观察设置后的效果

开启场景:
下图是运行起来的效果


运行结束的效果

仔细观察图表各项指标会发现有一共有四个事务,为什么有四个事务呢?

LR中认为每一个脚本文件都是一个事务,图中的vuser_init、action、vuser_end三个脚本文件就是三个事务,其中action是用户自定义事务,ts这个事务就是我们自己加的
分析Controller中的运行时图:

Running这条紫色的折线表示正在进行测试的用户数量,测试初期,需要时间来分配资源或初始化用户,也就是刚开始的时候虚拟用户需要初始化,所以一开始是0随着虚拟用户的启动,折线逐渐上升,随着虚拟用户都启动完成,折线趋于平稳。当运行时间到了,折线逐渐下降
Ready这条棕色的折线代表处于就绪状态但尚未进入测试的用户数量,测试系统开始调用这些就绪的用户进行实际的测试任务,用户的状态从就绪转为运行,这条折线不断下降直至所有的虚拟用户都转为运行状态,最终变为0。这里一开始就在2和我们前面设置了每5秒生成一个虚拟用户有关系,其中一部分用户先进入就绪状态然后被调到测试中,所以Ready这条线先上后降
finished这条黄色的折线代表已经完成测试的用户数量,随着测试即将结束时也就是Running这条折线逐渐下降的时候,finished折线才不断上升,表明所有的虚拟用户几乎在同一时间完成了测试
注意:这里设置的虚拟用户和运行时间是我们一开始设置所以根据你设置的观察
掌握analysis的使用(重要)
生成测试报告,分析测试结果
如何生成测试报告?

首先映入眼帘的是汇总报告,汇总报告包含数据摘要、事务摘要、HTTP响应摘要,其中事务摘要,不要看最大最小值,主要看平均值和标准偏差,标准偏差越大,说明系统越不稳定
图表分析
首先知道下面这两个概念
负载的定义:比较宽广的概念,涵盖了所有影响系统性能的因素,负载更加泛指系统当前的工作状态,它不仅包括负载量,还包括这些负载对系统资源(如CPU、内存、网络等)的使用情况。例如系统的负载可能包括负载量中的用户数,但也会涉及这些用户所执行的操作对服务器硬件的压力
负载量的定义:负载量是负载的一部分,通常是指在特定时间段内系统能处理的工作量(这个"工作"可以是请求数、事务、用户操作等),在性能测试中可以通过负载量衡量系统在特定条件下的性能表现,比如每秒处理请求数、每秒处理的事务数等。也这样理解,负载量是一个用来衡量系统能够处理多少工作的指标
1.运行的虚拟用户图:通过此图可以观察系统运行期间执行脚本的Vuser数量以及状态,可以确定任何给定时刻服务器上Vuser负载,也就是不同时间点系统能处理的并发用户数

2.点击数图:通过此图可以观察系统运行期间Vuser每秒向服务器发送的http请求数,根据点击次数对Vuser生成的负载量(可以理解为请求数)来衡量系统能够处理多少请求数进行评估,前面提到点击数也属于是性能指标之一。此图可以搭配平均事务响应图进行比较,查看点击次数对事务性能的影响,因为请求数增加相对的响应时间可能会变长

为什么说统计在特定时间段内所有虚拟用户总共发起的请求数量来评估负载量呢?
可以通过用户总共发起的请求数量,告诉我们系统需要处理多少个请求,也反映了系统的并发处理能力。如果用户发起的请求数远多于系统能有效响应的数量,这可能指示系统需要优化或增强其处理能力。所以通过负载量帮助我们评估系统在不同压力条件下的性能表现
3.吞吐量图:通过此图我们可以根据服务器的吞吐量对Vuser生成的负载量进行评估,也可以搭配平均事务响应图进行比较,查看吞吐量对事务性能的影响

4.吞吐量和点击数图:通过此图可以观察Vuser生成的负载量以及服务器的吞吐量,会发现吞吐量在点击数之后,首先吞吐量表示系统处理请求的数量也可以理解为响应后返回的资源数量,所以得先有请求才有返回

注意:点击量上升了,但是吞吐量没有上升的情况,有很多种可能例如服务器处理请求的速度慢或硬件设备的问题,或者可能没有收到请求出现丢包的可能等等原因
补充一下如何将两张图表设置成一张进行观察,右击后选择对应的图表即可


5.平均事务响应时间图:通过此图可以观察系统在处理事务时的平均响应时间,可以根据平均响应时间对Vuser生成的负载量进行评估。如果响应时间随着负载增加而显著增加,那么就需要对系统进行性能优化

6.系统资源使用情况图:通过此图查看系统各项资源的使用情况来衡量系统的性能表现,例如运行时cpu使用率、可用的物理内存等

好了以上便是本章的内容,性能测试的内容很多并且不是短时间就能掌握的起码需要几年时间沉淀,并且性能测试的难点就在于性能分析不好分析以及性能优化的解决方案,我们下一章再见💕
相关文章:
性能测试工具LoadRunner
前言👀~ 上一章我们介绍了性能测试的一些基本概念,重要的是性能测试的各项指标,今天我们使用性能测试工具LoadRunner简单的完成一次性能测试 性能测试Load Runner LoadRunner是什么? LoadRunner安装 LoadRunner脚本录制 1.录…...
智能归来:深入探索人工智能回归模型的奥秘
人工智能之回归模型 1. 回归模型的数学基础1.1 回归分析的基本原理1.1.1 目标变量与预测变量的关系1.1.2 线性回归模型 1.2 矩阵形式的回归模型1.2.1 回归方程的矩阵表示1.2.2 矩阵运算的基本性质及其在回归分析中的应用 1.3 总结 2. 最小二乘法 (Ordinary Least Squares, OLS)…...
swift 中,对象() 和 对象.init() 的共同点和异同点
在阅读同事的代码时,不同人对对象的初始化方式是不一样的,例如存在一个对象AController, 有些人创建的方式如下: let controller AController()也有人创建的方式如下: let controller AController.init()下面来说明一下&#…...
Google安装JSON-handle扩展
JSON-hande下载地址: JSON-Handle 官网 - 打开json格式文件的浏览编辑器 1. 重命名扩展文件(crx)后缀 为 zip。 2. 解压zip成文件夹,保存到指定目录。 3. Google浏览器地址栏输入 “chrome://extensions/”回车。然后开启 开发者模式。 4. 点击“加载…...
剖析算法内部结构----------贪心算法
什么是贪心算法? 贪心算法(Greedy Algorithm)是一种在问题求解过程中,每一步都采取当前状态下最优(即最有利)的选择,从而希望导致最终的全局最优解的算法策略。 贪心算法的核心思想是做选择时&…...
uni-app开发微信小程序注意事项,不要用element-ui
前端扩展组件千万不要用element-ui,开发的时候不报错,发布的时候会报错无法发布。 可以用vant weapp【注意是weapp】 iView weapp 附上hbuilder官方文档 组件的概念 | uni-app官网 (dcloud.net.cn)...
Hibernate的检索策略(lazy、fetch、batch-size)
Hibernate的检索策略包括立即检索和延迟检索,可以在配置文件中通过对lazy、fetch、batch-size属性的设置来进行控制。一对多、多对多、多对一和一对一关系下的不同检索策略将影响对数据库访问的效率。 检索策略 立即检索,立即加载检索方法指定的对象延…...
算法训练(leetcode)第四十六天 | 110. 字符串接龙、105. 有向图的完全可达性、106. 岛屿的周长
刷题记录 *110. 字符串接龙105. 有向图的完全可达性邻接矩阵邻接表 106. 岛屿的周长深搜简化代码 *110. 字符串接龙 题目地址 使用广搜。 本题相当于求最短路径,因此使用广搜。如何应用广搜是一个难点,因为题目给的是字符串而非图的表示(邻…...
自定义Mybatis-Plus分布式ID生成器(解决ID长度超过JavaScript整数安全范围问题)
自定义MyBatis-Plus分布式ID生成器(解决ID长度超过JavaScript整数安全范围问题) 版本 MyBatis-Plus 3.4.1 问题 MyBatis-Plus 默认生成的是 64bit 长整型,而 JS 的 Number 类型精度最高只有 53bit,如果以 Long 类型 ID 和前端…...
2024剪辑神器盘点:四大热门剪辑软件推荐!
亲爱的朋友们,想要制作出精彩短视频,却苦于找不到合适的剪辑工具?别担心,今天要向大家推荐几款剪辑软件,它们能帮助大家更好地完成视频创作! 福昕视频剪辑 链接:www.pdf365.cn/foxit-clip/ 对…...
sql注入靶场sqli-labs常见sql注入漏洞详解
目录 sqli-labs-less1 1.less1普通解法 1.在url里面填写不同的值,返回的内容也不同,证明,数值是进入数据库进行比对了的(可以被注入) 2.判断最终执行的sql语句的后面还有内容吗,并且能够判断是字符型的拼接…...
[C++] 模板进阶:特化与编译链接全解析
文章目录 非类型模板类型形参非类型模板参数代码示例 **模板的特化**为什么要有模板的特化函数模板特化使用场景与示例函数模板特化的实现细节 类模板特化全特化示例 偏特化部分优化通过进一步限制模板参数进行特化偏特化为指针类型示例:偏特化为引用类型示例&#…...
oracle-备份
1、逻辑备份(exp) /ljbb/oracle/o19c/bin/exp hr/hr tablesJOBS file/ljbb/bak/system.sql log/ljbb/bak/ststem.log query\where deptno30\ buffer100000000 hr/hr 用户/密码 tablesJOBS 表名:JOBS file/ljbb/bak/system.sql 备份文件路径 log/ljbb/ba…...
oracle 并行parallel的插入insert用法
在Oracle数据库中,INSERT 语句确实可以使用 Parallel(并行)功能。通过并行插入,可以在插入数据时同时利用多个并行操作进程来执行插入操作,从而显著提高插入操作的速度和效率。这对于需要处理大量数据插入的场景尤为有…...
夜莺监控使用指南
夜莺监控使用指南 本文用于解决在部署和应用夜莺监控中遇到的一些问题以及官方文档缺失的某些步骤可能会遇到的坑。 安装过程 我使用是NightingaleCategrafPrometheus的架构。 Nightingale安装文档:https://flashcat.cloud/docs/content/flashcat-monitor/night…...
MySQLDM笔记-查询库中是否存在列出的表名及查询库中列出的不存在的表名
如下表名: aaa,bb,cc,ccs,dds,csdf,csdfs,sdfa,werwe,csdfsd 在MySQL库中,查询哪些表名在数据库中 SELECT table_name FROM information_schema.tables WHERE table_schema your_database_name_here AND table_name IN (aaa, bb, cc, ccs, dds, csdf…...
第9天 xxl-job
使用xxl-job需要建表 引入依赖 添加配置 Bean public XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor new XxlJobSpringExecutor();xxlJo…...
C++字符串<string>库
一:string及其标准库 C中使用string类需要添加<string>库。 string初始化: string str1 "Hello"; string str2; str2 "World"; string str3 str1 str2; string在变量的声明以及初始化与C语言的char类字符串一致。但是str…...
智能分析,安全无忧:AI视频分析技术在安全生产中的深度应用
在当今快速发展的科技时代,视频智能分析技术(Intelligent Video Analysis,简称IV)已经成为提升安全生产水平的重要手段。这一技术通过计算机图像视觉分析技术,实现了对场景中目标的自动识别和追踪,有效提升…...
02 Canal的安装使用
1 下载Canal Cannal下载地址如下:https://github.com/alibaba/canal/releases,这里选择Canal 1.1.4版本下载。2 上传解压 #首先创建目录 “/software/canal” [rootnode3 ~]# mkdir -p /software/canal#将Canal安装包解压到创建的canal目录中 [rootnode3 ~]# tar …...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...


