LoadRunner 完整教程:从入门到精通
LoadRunner 是 Micro Focus(原 HP)公司开发的一款业界顶级的性能测试和负载测试工具,它通过模拟成千上万的用户并发访问,对应用系统进行负载测试和压力测试,以帮助用户找出系统性能瓶颈。

LoadRunner 简介
1 核心组件
LoadRunner 主要由以下几个核心组件构成:
- Virtual User Generator (VuGen):脚本录制与生成器,用于录制、编辑和调试用户在业务流程中的操作,并将其转化为可执行的脚本(C 语言或 API)。
- Controller:负载运行控制器,用于创建、管理和监控负载测试场景,你可以定义虚拟用户数量、运行方式、思考时间、IP 欺骗等,并实时监控系统的各项性能指标。
- Analysis:结果分析器,用于收集、处理和展示负载测试期间产生的数据,生成图表和报告,帮助你分析系统性能瓶颈。
- LoadRunner Professional / Enterprise:包含了上述所有组件,并提供了额外的功能,如 TruClient (支持 Web/HTML5/Flex 等技术)、Mobile 和 API 测试等。
2 测试流程
一个典型的 LoadRunner 测试流程如下:
- 计划测试:明确测试目标、测试场景(用户数量、业务流程)、监控指标等。
- 录制脚本:使用 VuGen 录制用户的业务操作流程。
- 完善脚本:在 VuGen 中对录制的脚本进行参数化、关联、添加检查点和自定义逻辑,使其更接近真实用户行为。
- 设计场景:在 Controller 中设计负载测试场景,定义虚拟用户如何加载到系统上。
- 执行场景:运行负载测试,并实时监控系统性能。
- 分析结果:在 Analysis 中分析测试结果,定位性能瓶颈,并生成测试报告。
第一步:录制与编辑脚本 (VuGen)
这是 LoadRunner 测试的起点,我们以一个最常见的 Web HTTP/HTML 协议为例。
1 创建新脚本
- 打开 VuGen。
- 选择 File -> New Script。
- 在弹出的对话框中,选择 Web - HTTP/HTML 协议(这是最常用的协议),然后点击 OK。
- VuGen 会创建一个空的脚本模板,包含
vuser_init、Action和vuser_end三个部分。vuser_init:虚拟用户初始化部分,通常用于登录等只需执行一次的操作。Action:主要业务逻辑部分,会被重复执行。vuser_end:虚拟用户结束部分,通常用于注销等清理操作。
2 录制脚本
- 在 VuGen 工具栏中,点击 Record 按钮。
- 在 Recording Options 对话框中:
- URL Address:输入你要测试的网站地址,
http://demoaut.katalon.com。 - Record into Action:选择将录制内容放到哪个部分,默认是
Action。 - Recording Mode:通常选择 HTML-based script,它更容易理解和修改,如果应用是单页面应用,可以选择 URL-based script。
- URL Address:输入你要测试的网站地址,
- 点击 OK 开始录制。
- 系统会打开一个浏览器(通常是 IE 或 Chrome),在浏览器中,执行你想要测试的业务流程,
- 访问首页。
- 点击“登录”链接。
- 输入用户名和密码。
- 点击“登录”按钮。
- 浏览一些商品页面。
- 注销登录。
- 完成操作后,回到 VuGen,点击 Stop 按钮停止录制。
3 查看与理解脚本
录制完成后,你会看到自动生成的 C 语言脚本,它会包含很多 web_url()、web_link()、web_submit_data() 等函数。

// Action.c - Action for Recording
#include "lrun.h"
#include "web_api.h"
Action()
{
// 录制的第一个请求
web_url("Welcome",
"URL=http://demoaut.katalon.com/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
// 录制的登录请求
web_submit_data("login",
"Action=http://demoaut.katalon.com/login",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://demoaut.katalon.com/",
"Snapshot=t2.inf",
"Mode=HTML",
"Name=username", "Value=testuser", ENDITEM,
"Name=password", Value="testpass", ENDITEM,
"Login=Login", LAST);
// ... 其他请求 ...
return 0;
}
4 参数化脚本
为什么参数化? 直接将用户名、密码等写死在脚本中,会导致所有虚拟用户使用同一套数据,这不符合真实情况,参数化可以让每个虚拟用户使用不同的数据。
如何参数化?
- 在脚本视图中,选中需要参数化的值,例如用户名 "testuser"。
- 右键选择 Replace with a Parameter。
- 选择参数类型,通常选择 File(从外部文件读取数据)。
- VuGen 会创建一个参数(如
{username}),并弹出一个向导,让你创建一个数据文件(如username.dat)。 - 在数据文件中,每行一个值,
user1 user2 user3 ... - 运行时,LoadRunner 会自动从文件中为每个虚拟用户分配不同的值。
5 关联
为什么需要关联? 很多应用的响应中会包含一个动态变化的值(如 Session ID, JSESSIONID),这个值需要在后续的请求中作为参数传回,关联就是从服务器的响应中“捕获”这个动态值,并保存为一个参数,供后续请求使用。
如何进行关联?

- 在脚本中,找到一个后续请求需要用到动态值的请求。
- 在该请求的函数上右键,选择 Create Correlation。
- VuGen 会扫描前后请求,建议可能的关联点。
- 检查建议是否正确,确认后点击 Create。
- VuGen 会在脚本中插入
web_reg_save_param()函数来捕获动态值,并将该值保存为一个参数(如{SessionID})。
6 添加检查点
检查点用于验证服务器返回的页面内容是否正确,确保你的业务流程被正确执行。
如何添加检查点?
- 在一个请求后,你想检查某个文本是否存在,登录成功后,页面应该显示 "Welcome"。
- 在该请求的函数上右键,选择 Insert -> Checkpoint -> Text Checkpoint。
- 在弹出的对话框中,输入要检查的文本,"Welcome"。
- VuGen 会插入
web_reg_find()函数,它会检查后续响应中是否包含指定的文本,如果找不到,事务会失败。
第二步:设计与运行场景 (Controller)
脚本准备好了,现在需要模拟成千上万的用户来访问它。
1 创建场景
- 打开 Controller。
- 选择 Create a new scenario。
- 在 Scenario Groups 部分,将你在 VuGen 中创建的脚本拖拽到 Available Scripts 区域。
- 将脚本从 Available Scripts 拖拽到 Scenario Groups 中。
2 设计场景
在 Design 视图中,你可以定义负载模型。
- 虚拟用户数量:在 "Ramp Up" 列中,设置需要多少虚拟用户,输入
100。 - 加载方式:
- Ramp Up:在指定的时间内(10 分钟),逐步将虚拟用户增加到目标数量,这是最常用的方式,可以模拟真实用户的逐渐增长。
- Instant:瞬间启动所有虚拟用户,用于压力测试。
- 思考时间:模拟用户在操作之间的停顿,在脚本中,右键点击
lr_think_time()函数,可以全局启用或禁用思考时间,并设置其最小、最大和平均值。 - 运行持续时间:设置场景运行的总时间。
3 添加监控
为了分析性能瓶颈,必须监控服务器和应用的各项指标。
- 点击工具栏上的 New Monitor 按钮。
- 选择你要监控的目标,通常选择 Web Server。
- 在弹出的对话框中,输入你要监控的服务器 IP 地址和登录凭据。
- 常用的监控指标包括:
- 服务器资源:CPU 使用率、内存使用率、磁盘 I/O、网络 I/O。
- 应用服务器资源:JVM 内存、线程数、数据库连接数。
- 数据库资源:CPU、I/O、锁、缓存命中率。
- 网络资源:吞吐量。
4 运行场景
- 确保脚本和监控都已配置好。
- 点击工具栏上的 Start Scenario 按钮。
- 场景开始运行,你可以实时查看以下图表:
- Running Vusers:当前正在运行的虚拟用户数。
- Hits per Second:每秒点击数。
- Throughput:吞吐量(数据传输量)。
- Average Transaction Response Time:事务平均响应时间。
- Errors per Second:每秒错误数。
- 以及所有你添加的监控图表。
运行期间,如果发现性能急剧下降或错误率飙升,可以随时点击 Stop 按钮停止测试。
第三步:分析结果 (Analysis)
测试结束后,使用 Analysis 来挖掘数据,找到问题所在。
- 在 Controller 中测试停止后,选择 Results -> Analyze Results。
- Analysis 会自动加载测试数据。
1 关键分析视图
- Summary Report:概要报告,包含最重要的性能指标摘要,如总吞吐量、平均响应时间、错误率等。
- Graphs:图表视图,可以组合多个图表进行分析。
- 响应时间 vs. 虚拟用户数:这是最重要的图表之一,当响应时间随用户数增加而急剧上升时,通常表明系统已达到性能瓶颈。
- 吞吐量 vs. 虚拟用户数:吞吐量在达到一个峰值后开始下降,也说明系统瓶颈出现。
- 错误分布图:查看哪些事务或请求错误率最高。
- Correlation Graphs:关联图,用于分析两个指标之间的关系,将“响应时间”和“CPU 使用率”放在同一个图中,如果两者同时飙升,说明 CPU 可能是瓶颈。
- Transaction Summary:事务摘要,列出所有事务的平均响应时间、最小/最大响应时间、成功率等。
2 定位瓶颈
通过分析图表,你可以初步定位瓶颈:
- 如果响应时间急剧上升,但服务器 CPU、内存、I/O 都很低:可能是应用代码或数据库查询效率低下。
- CPU 使用率达到 90% 以上:服务器计算能力不足。
- 如果内存使用率达到 90% 以上:服务器内存不足,可能频繁发生内存交换。
- 如果磁盘 I/O 饱和:磁盘读写是瓶颈。
- 如果数据库锁等待时间长:数据库存在并发访问问题。
- 如果网络吞吐量达到上限:网络带宽是瓶颈。
进阶技巧与最佳实践
1 使用 IP 欺骗
如果需要模拟大量来自不同 IP 地址的用户,以避免防火墙或服务器的单 IP 连接限制,可以在 Controller 中启用 IP Wizard,它会为每个虚拟用户分配一个独立的 IP 地址。
2 关联的深入理解
关联是 LoadRunner 的精髓,对于复杂的动态值(如 JSON 中的 Token),可能需要手动编写 web_reg_save_param() 或使用正则表达式来捕获。
3 事务
在脚本中使用 lr_start_transaction("事务名") 和 lr_end_transaction("事务名", LR_AUTO) 来标记一个业务流程的开始和结束,这样可以在 Analysis 中精确衡量每个业务步骤的性能。
4 集成 CI/CD
LoadRunner 可以与 Jenkins、Azure DevOps 等 CI/CD 工具集成,实现性能测试的自动化,将其作为持续交付流程的一部分。
5 最佳实践
- 尽早进行性能测试:不要等到项目末期才做性能测试。
- 建立性能基线:在每次系统变更(如新版本上线)前,先运行一次性能测试建立基线,以便对比。
- 关注关键业务路径:资源有限时,优先测试对业务最核心、用户最常用的流程。
- 持续监控:在测试过程中,要持续关注各个监控指标,而不仅仅是平均响应时间。
- 团队协作:性能测试是开发、运维、测试共同的责任,需要团队协作来定位和解决瓶颈。
学习资源推荐
- 官方文档:Micro Focus 官网提供了最权威的 LoadRunner 文档和教程。
- 官方培训课程:Micro Focus 提供官方的认证培训课程,系统性强。
- 在线视频教程:Bilibili、YouTube 等平台有大量免费的 LoadRunner 入门和实战视频。
- 技术博客和论坛:CSDN、博客园、Stack Overflow 等社区有大量开发者分享的经验和问题解决方案。
希望这份教程能为你提供一个清晰的路线图,LoadRunner 功能强大,但核心思想并不复杂,多加练习,从录制一个简单的脚本开始,逐步深入,你一定能掌握它!
