LoadRunner 使用教程:从入门到实战
LoadRunner 是业界领先的性能测试工具,由 Micro Focus 公司开发,它通过模拟成千上万的用户并发访问应用系统,来测试系统的负载能力和性能瓶颈。
本教程将分为以下几个核心部分:
- LoadRunner 核心概念与工作流程
- 实战第一步:录制你的第一个脚本
- 脚本增强与参数化
- 设置场景与执行测试
- 分析测试结果
- LoadRunner 最佳实践与进阶
第一部分:LoadRunner 核心概念与工作流程
在开始之前,必须理解 LoadRunner 的几个核心组件和整个工作流程。
核心组件
-
VuGen (Virtual User Generator) - 虚拟用户生成器
- 作用:录制、编辑和增强脚本,它是你创建测试脚本的地方。
- 产出物:一个
.c(C语言) 或.vbs(VBScript) 格式的脚本文件。
-
Controller - 控制器
- 作用:设计和执行负载测试场景,你可以在这里定义虚拟用户数量、运行方式、负载机等,并实时监控测试过程。
- 产出物:一个场景文件
.lrs。
-
Analysis - 分析器
- 作用:收集、合并和分析测试结果,它会生成各种图表和报告,帮助你定位性能瓶颈。
- 产出物:分析报告。
LoadRunner 性能测试工作流程
这是一个经典的迭代过程,通常遵循以下步骤:
- 计划测试:明确测试目标、测试范围、业务场景、用户数量、思考时间等。
- 创建 Vuser 脚本:使用 VuGen 录制或编写脚本,模拟一个真实用户的操作。
- 设计场景:在 Controller 中,将脚本组织成一个或多个场景,模拟成千上万的用户并发操作。
- 运行场景:执行测试,并实时监控系统性能指标(如响应时间、吞吐量、错误率等)。
- 分析结果:使用 Analysis 工具分析测试数据,找出瓶颈,生成报告。
- 优化与迭代:根据分析结果,开发人员优化系统,然后重复步骤 2-5,验证优化效果。
第二部分:实战第一步:录制你的第一个脚本
假设我们要测试一个简单的登录功能。
前提条件
- 安装好 LoadRunner。
- 确保你的电脑可以访问到要测试的 Web 应用(
http://example.com/login)。
操作步骤
-
打开 VuGen
启动 LoadRunner,选择 "Virtual User Generator"。
-
创建新脚本
- 在 VuGen 的欢迎界面,选择 "New Script"。
- 在弹出的协议选择对话框中,选择 Web - HTTP/HTML,这是最常见的 Web 应用协议,点击 "OK"。

- 录制选项
- VuGen 会弹出 "Recording Options" 窗口,你需要配置录制的内容。
- URL Address: 输入你要测试的网站地址,
http://example.com。 - Recording Mode: 选择 HTML-based script,这是最常用的模式,它会录制用户的点击和导航,并生成对应的 Web 函数(如
web_url,web_link)。 - Advanced...: 点击 "Advanced",在 "Support Charset" 中,确保选择了正确的字符集(通常是 "UTF-8"),这能避免中文等特殊字符乱码。
- 点击 "OK" 开始录制。

- 执行录制操作
- VuGen 会自动打开一个基于 IE 内核的浏览器(或你系统默认的浏览器)。
- 像真实用户一样操作:
- 访问登录页面
http://example.com/login。 - 输入用户名和密码。
- 点击 "登录" 按钮。
- 登录成功后,可以浏览一下首页。
- 点击 "退出" 或 "注销" 按钮。
- 访问登录页面
- 操作完成后,回到 VuGen 界面,点击工具栏上的 停止录制 按钮 (红色方块)。

-
查看生成的脚本
- 停止录制后,VuGen 会显示生成的脚本,你会看到类似下面的代码结构:
vuser_init() { // 初始化操作,通常只执行一次 web_url("login", "URL=http://example.com/login", "Resource=0", "Recalc=Yes", "TargetFrame=", "Snapshot=t1.inf", "Mode=HTML", LAST); // ... 其他登录操作的函数 } Action() { // 主要业务逻辑,会根据场景设置迭代执行 // 输入用户名和密码,点击登录 web_submit_data("login.pl", "Action=http://example.com/login.pl", "Method=POST", "Recalc=Yes", "TargetFrame=", "Snapshot=t2.inf", "Mode=HTML", ITEMDATA, "Name=user", "Value=testuser", ENDITEM, "Name=pass", Value="testpass", ENDITEM, "Name=Login", "Value=Login", ENDITEM, LAST); // ... 其他操作 } vuser_end() { // 清理操作,通常只执行一次 // 退出登录 web_link("Logout", "Text=Logout", "URL=http://example.com/logout", LAST); }
第三部分:脚本增强与参数化
直接录制的脚本有很多问题,比如所有用户都用同一个用户名和密码登录,这不符合真实情况,我们需要对脚本进行增强。
参数化
参数化是将脚本中固定的值(如用户名、密码、搜索关键词)替换为从数据源(如 CSV 文件、数据库)中读取的变量,从而模拟不同用户的不同行为。
示例:将登录用户名和密码参数化
- 选中要参数化的文本:在
Action()部分,找到web_submit_data函数,选中用户名testuser和密码testpass。 - 右键选择 "Replace with a parameter":在弹出的菜单中选择此选项。

- 创建参数
- 在弹出的 "Create Parameter" 窗口中:
- Name: 给参数起个名字,如
username和password。 - Parameter type: 选择 File,表示从文件中读取。
- File path: 点击 "Browse",创建一个新的 CSV 文件(
users.csv)。 - 点击 "Create"。
- Name: 给参数起个名字,如
- 在弹出的 "Create Parameter" 窗口中:
- 准备数据文件
- 用记事本或 Excel 打开
users.csv文件,填入多组用户名和密码,每行一组,用逗号分隔。user1,pass1 user2,pass2 user3,pass3 ...
- 用记事本或 Excel 打开
- 设置参数属性
- 回到 VuGen,点击菜单
View -> Parameter List,打开参数列表。 - 选中你创建的参数(如
username),在右侧属性中:- Update value on: 选择 Each iteration,这样每个虚拟用户在每次迭代时都会读取下一行数据。
- 回到 VuGen,点击菜单
插入思考时间
真实用户在操作之间会有停顿(例如阅读页面内容),我们需要在脚本中插入 lr_think_time 来模拟这种延迟。
- 在脚本中找到两个操作之间,比如登录成功后。
- 在合适的位置插入
lr_think_time(5);,这里的 5 代表 5 秒的随机延迟(通常会在一个范围内随机,如lr_think_time(random_range(3, 7));)。
关联
关联是处理动态值的关键,很多应用的响应中会包含一些动态变化的值(如 Session ID, Token),这些值需要在后续的请求中作为参数传回。
- 如何判断需要关联?:当你运行脚本时,如果收到错误(如 "Invalid Session ID"),或者查看日志发现某个请求参数是
{SessionID_1}这样的占位符,就说明需要关联了。 - 如何关联?:
- 在 VuGen 中,点击菜单 Web -> Create Correlation。
- VuGen 会自动扫描录制日志,提示可能的关联项。
- 你也可以手动在录制日志中找到动态值,然后使用
web_reg_save_param函数将其捕获并保存为一个参数。
第四部分:设置场景与执行测试
脚本准备好了,现在需要使用 Controller 来模拟大量用户并发。
操作步骤
-
打开 Controller
启动 LoadRunner,选择 "Controller"。
-
创建新场景
- 在 "New Scenario" 向导中,选择 Manual Scenario(手动场景),这样我们可以更精确地控制虚拟用户。
- 点击 "OK"。
-
加载脚本
- 在 Controller 的 "Design" 标签页中,左侧的 "Available Scripts" 列表是空的。
- 点击工具栏的 Start Recording with New Script 图标,然后选择你刚才在 VuGen 中创建并保存的脚本,脚本会出现在 "Available Scripts" 列表中。
- 将脚本拖拽到右侧的 "Scenario Groups" 窗口中。
-
配置虚拟用户
- 在 "Scenario Groups" 中,选中你的脚本。
- 在下方的 "Number of Vusers" 中,设置你想要模拟的并发用户数,
50。

-
设置运行模式
- 在 "Schedule" 标签页中,你可以设置测试的执行计划。
- Ramp Up:在多长时间内将用户数增加到设定值(50 个用户在 5 分钟内逐渐加载)。
- Duration:保持满负载运行多长时间(例如运行 30 分钟)。
- Ramp Down:在多长时间内将用户数降为 0。
- 可以设置:Ramp Up 5 min -> Duration 30 min -> Ramp Down 0 min。
-
添加监控
- 在 "Online" 标签页,右侧有 "Available Graphs" 和 "Measures"。
- 将需要监控的指标(如 Running Vusers, Hits per Second, Response Time, Throughput, Errors per Second)拖拽到左侧的 "Graphs" 区域。
- 重要:点击 "Add Measurements" -> "Add Measurements for the Host",添加你要监控的服务器(IP地址),并勾选你要监控的系统资源(如 CPU, Memory, Disk I/O),这需要提前在目标服务器上安装 LoadRunner 的 Agent。
-
运行场景
- 所有设置完成后,点击工具栏的 Start Scenario 按钮 (绿色三角形)。
- 测试开始,你可以在 Controller 的 "Online" 标签页中实时看到各种性能指标的变化图表。
第五部分:分析测试结果
测试结束后,需要分析数据,找出问题。
操作步骤
-
打开 Analysis
- 在 Controller 测试运行完毕后,会提示你 "Open Analysis",直接点击即可。
- 也可以手动启动 LoadRunner 的 "Analysis" 组件,并选择刚刚生成的测试结果目录。
-
查看概要报告
Analysis 会自动生成一个概要报告,显示关键指标的平均值、最大值、最小值等。
-
分析主要图表
- Running Vusers (虚拟用户数):确认用户是否按计划加载和卸载。
- Average Transaction Response Time (平均事务响应时间):这是最重要的指标之一,如果随着用户数的增加,响应时间急剧上升,说明系统遇到了瓶颈。
- Throughput (吞吐量):指系统每秒处理的请求数或数据量,如果吞吐量在达到某个用户数后不再增长甚至下降,也是瓶颈的信号。
- Errors per Second (每秒错误数):监控错误率,错误率突然升高通常是系统崩溃或出现严重问题的标志。
-
定位瓶颈
- 如果响应时间变长:
- 查看服务器监控图表(CPU, Memory, Disk, Network),如果某个资源(如 CPU)达到 100%,说明是服务器资源瓶颈。
- 查看数据库监控(如果配置了),可能是 SQL 查询效率低下或数据库连接池耗尽。
- 如果吞吐量下降:
通常意味着系统处理能力达到上限,无法接受更多的请求。
- 如果错误率升高:
查看错误详情,分析是应用逻辑错误、超时还是服务器内部错误。
- 如果响应时间变长:
-
生成报告
- 点击菜单
Report -> Generate Report,可以生成一个详细的 HTML 或 Word 格式的测试报告,用于分享和存档。
- 点击菜单
第六部分:LoadRunner 最佳实践与进阶
- 脚本维护:定期更新和关联脚本,以应对应用的版本更新。
- 场景设计:不要只做“压力测试”(不断增加用户直到崩溃),还要做“负载测试”(在预期用户量下稳定运行)和“耐力测试”(长时间运行)。
- 数据驱动:使用参数化来模拟真实、多样的用户行为。
- 监控是关键:不要只看 LoadRunner 的数据,一定要结合服务器、数据库、中间件(如 Tomcat, Nginx)的监控数据,才能准确定位瓶颈。
- 持续集成:将 LoadRunner 测试集成到 CI/CD 流程中,实现自动化回归测试。
这份教程为你提供了一个完整的 LoadRunner 使用路径,性能测试是一个“计划-执行-分析-优化”的循环过程,熟练掌握 VuGen、Controller 和 Analysis,并结合对应用架构和服务器知识的理解,你就能成为一名出色的性能测试工程师。
祝你学习顺利!
