news 2026/5/12 3:19:40

LoadRunner入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LoadRunner入门

简介

LoadRunner是由Micro Focus公司开发的一款专业性能测试工具,也是目前行业内最常用、最成熟的性能测试工具之一,主要用于模拟多用户并发访问系统,测试系统在不同压力下的性能表现,帮我们发现系统的性能瓶颈、稳定性问题。
简单来说,我们平时手动操作软件,一次只能模拟1个用户的行为;而LoadRunner可以“伪装”成上百、上千甚至上万个用户,同时对系统发起请求,模拟真实场景下的用户访问压力,比如:电商平台双十一的峰值流量、APP上线后的大规模用户访问,这些场景我们无法手动模拟,就需要借助LoadRunner来实现。

核心用途

我们使用LR,核心是解决3个关键问题,也是我们做性能测试的核心目标:

  1. 测试系统的并发能力:系统能同时承受多少个用户正常访问,不会卡顿、崩溃;
  2. 排查系统的性能瓶颈:比如响应变慢、报错、宕机,到底是服务器、数据库还是接口的问题;
  3. 验证系统的稳定性:系统在长时间、高并发压力下,能否持续正常运行(比如连续运行24小时无异常)。

LoadRunner的核心组件

LR的操作主要依赖3个核心组件:

  1. VuGen(虚拟用户生成器):核心是“录脚本”——模拟单个用户的操作流程(比如登录、查询、提交表单),生成可重复执行的测试脚本;
  2. Controller(控制器):核心是“设场景”——设置虚拟用户数、并发模式(比如我们之前聊的集合点、Pacing),启动压力测试,实时监控测试过程;
  3. Analysis(分析器):核心是“看结果”——测试结束后,生成详细的性能报告,帮我们分析响应时间、每秒请求数、错误率等关键指标,定位性能问题。

    图标颜色分别为 黄色、绿色、蓝色,为方便记忆可与七色谱顺序对应,其顺序也与实际使用的顺序一致,即先录制脚本,再设置场景,最后查看结果

组件介绍

Generator

新建:script和solution

  1. Script(脚本):是性能测试的“操作指令集”,记录单个虚拟用户的完整操作流程(如登录→查询→退出),是压测的基础单元,每个Script对应一个具体的业务场景,可单独编辑、调试和运行,脚本由Vuser_init、Action、Vuser_end三部分组成,其中Action可进行多次迭代,而前两者仅执行一次。
  2. Solution(解决方案):是Script的“容器”,用于管理多个相关联的Script,比如一个电商压测场景,可将“登录脚本、商品查询脚本、下单脚本”放在同一个Solution中,方便统一编辑、维护和调用,新建VuGen时,默认会创建一个Solution,再在其中创建或添加Script,一个Solution可包含多个不同业务场景的Script,便于批量管理测试相关脚本资源。
脚本面板

录制脚本

  1. 点击录制按钮。
  2. 设置Recording mode中的内容,其他内容保持默认,点击Start Recording

Record:录制类型
Web Browser,即告诉LR要录制网页。
Windows Application:本地 Windows 桌面客户端
Remote Application via LoadRunner Proxy:远程 / 非本地应用(部署在其他机器上的应用、移动端 APP(配合手机代理设置))
Captured Traffic File Analysis:已捕获的流量文件

Application:应用程序

URL adress:目标地址

录制面板

录制时,在事务开始前点击添加事务(事务名可自定义),事务结束后,点击结束事务。
比如一个查询操作,需要在查询前点击添加事务,查询后点击结束事务。

开始事务

结束事务

停止录制



点击停止录制后,gen会自动生成脚本。

注意
可能存在脚本录制不上的情况,考虑重新录制或更换浏览器。

脚本调试

经过上个步骤录制的脚本会有很多多余的内容,需要手动调试人工判断,可借助F12,查找目标接口。
先将多余接口注释掉,若可成功回放则可删除注释内容。不要一上来就删除,可能导致脚本缺少信息而无法回放成功!!!
目标接口之后的内容均可删除,注意要保留事务结束标志return 0

一个登录接口:

//集合点 lr_rendezvous("jihe"); //检查点 web_reg_find("Search=All", "Text=createBy", LAST); lr_start_transaction("login"); lr_think_time(1); web_custom_request("login", "URL=http://192.168.1.250/prod-api/login", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/login?redirect=%2Findex", "Snapshot=t45.inf", "Mode=HTML", "EncType=application/json;charset=UTF-8", "Body={\"username\":\"user01\",\"password\":\"password01\"}", LAST); lr_end_transaction("login",LR_AUTO); return 0;

回放


查看回放内容与录制内容:snapshot。将光标放在对应接口代码块上,点击snapshot。

函数
集合点(类比JM的同步定时器)

如果涉及并发,需要添加集合点。不涉及并发可以不加。
右击-insert-Rendezvous

lr_rendezvous("jihe");

检查点(类比JM的断言)

回放之后成功只能代表接口是通的,不能代表返回的信息一定正确,可能异常被try catch返回,也可能被分支处理了。
直接在snapshot中选中需要断言的字符串,右击-Add Text Check Step

web_reg_find("Search=All", "Text=createBy", LAST);

思考时间(类比JM的固定定时器)

lr_think_time(1);
缓解服务器压力,模拟用户真实操作。

其他函数

web_reg_save_param()
web_set_max_html_param_len()
lr_convert_string_encoding()
lr_output_message()
web_add_auto_header()

拓展
关联

适用于:token短期变化刷新

/* 登录 */ web_reg_save_param("token0", "LB=token\":\"", "RB=\"", LAST); web_set_max_html_param_len("99999"); web_custom_request("login", "URL=http://192.168.1.250/prod-api/login", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/login?redirect=%2Findex", "Snapshot=t45.inf", "Mode=HTML", "EncType=application/json;charset=UTF-8", "Body={\"username\":\"user01\",\"password\":\"password01\"}", LAST); lr_convert_string_encoding(lr_eval_string("{token0}"),"utf-8",NULL,"auth"); lr_output_message("login转换编码----%s",lr_eval_string("{auth}")); ("Authorization",lr_eval_string("Bearer {auth}")); //集合点 lr_rendezvous("jihe"); //检查点 web_reg_find("Search=All", "Text=createBy", LAST); lr_start_transaction("search"); lr_think_time(1); web_url("list_2", "URL=http://192.168.1.250/prod-api/system/industryType/list?pageNum=1&pageSize=10&industryTypeCode=financial", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/industryType", "Snapshot=t51.inf", "Mode=HTML", LAST); lr_end_transaction("search",LR_AUTO); return 0;
参数化

添加参数文件:Design-Parameters-Parameters List


将实参替换为形参:选中实参,右击-Replace with Parameter-选择参数

//集合点 lr_rendezvous("jihe"); //检查点 web_reg_find("Search=All", "Text=createBy", LAST); lr_start_transaction("login"); lr_think_time(1); web_custom_request("login", "URL=http://192.168.1.250/prod-api/login", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/login?redirect=%2Findex", "Snapshot=t45.inf", "Mode=HTML", "EncType=application/json;charset=UTF-8", "Body={\"username\":\"{account}\",\"password\":\"{pwd}\"}", LAST); lr_end_transaction("login",LR_AUTO); return 0;

取值顺序内容见LoadRunner参数化属性设置_单个参数

Controller

跳转&新建

跳转

在generator中点击:

新建

打开软件后选择脚本导入
file - new-Add Scripts

场景设置

在design面板设置

start Vusers:设置虚拟用户数,可立即启动、梯度启动。

Duration:运行时间,运行完停止、持续运行

Stop Vusers:释放虚拟用户,可立即释放、梯度释放。

运行场景

在run面板:
左侧可添加其他图表,如系统资源等。
图标添加完毕后,点击Start Scenario开始运行。

Analysis

跳转&新建

跳转

在controller中,

新建

打开Analysis后,

结果导出

解析完成的结果文件,点击Reports-HTML Report即可导出HTML文件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 3:18:12

05——多 Agent 架构

多 Agent 架构:什么时候需要,以及如何避免过度设计开篇:多 Agent 看起来很先进,为什么项目反而更难交付 很多团队在做 Agent 应用时,都会很快走到这个节点: 单 Agent 版本已经能跑但复杂任务完成率不稳定于…

作者头像 李华
网站建设 2026/5/12 3:10:49

HomeAssistant Docker版安装后必做的5件事:从基础配置到性能优化

HomeAssistant Docker版安装后必做的5件事:从基础配置到性能优化 当你第一次在Docker中成功运行HomeAssistant后,面对那个简洁的登录界面,可能会感到一丝茫然——"接下来该做什么?" 与传统的智能家居平台不同&#xff0…

作者头像 李华
网站建设 2026/5/12 3:07:40

Redis 无锁化库存扣减方案(INCR + SETNX 实现,高并发不超卖)

在高并发场景(如秒杀、抢购)中,库存扣减是核心业务,也是最容易出现问题的环节——超卖、锁竞争、死锁、不知道扣减对应哪个库存节点,这些都是开发者常踩的坑。本文将分享一种 Redis INCR SETNX 组合的无锁化库存扣减方…

作者头像 李华
网站建设 2026/5/12 3:04:38

分数阶傅里叶变换在声纳阵列分析中的应用与优化

1. 分数阶傅里叶变换在声纳阵列分析中的核心价值在水下声学工程领域,准确计算声纳阵列的辐射模式一直是个技术难点。传统FFT算法虽然计算效率高,但在处理特定方位角的辐射特性时存在明显的精度局限。2005年日本防卫厅技术研究本所的这项研究,…

作者头像 李华
网站建设 2026/5/12 3:04:38

全栈AI智能体开发实战:基于LangGraph与Next.js的工程化模板解析

1. 项目概述:一个全栈AI智能体模板的诞生 最近在GitHub上看到一个挺有意思的项目,叫 vstorm-co/full-stack-ai-agent-template 。光看名字,你可能会觉得这又是一个“AI全栈”的缝合怪,或者是一个过度包装的概念。但作为一个在AI…

作者头像 李华