LoadRunner 压力测试服务器完整指南
第一阶段:测试准备与规划
在打开 LoadRunner 之前,这是最重要的一步,准备不充分,测试结果将毫无意义。

明确测试目标
- 为什么要测试? 是为了验证服务器的性能基准(Benchmark)、查找性能瓶颈、评估系统在高负载下的稳定性,还是为了验证系统能否承受预期的用户量?
- 要回答什么问题? “我们的新系统能否在 1000 个并发用户下,平均响应时间低于 2 秒?” 或 “数据库连接池在什么情况下会耗尽?”
确定关键业务场景
- 不要测试所有功能,专注于核心的、高频使用的业务流程。
- 电商网站:用户登录、浏览商品、加入购物车、下单支付。
- 社交App:用户登录、刷新信息流、发布动态、评论。
- 这些场景将是你录制和开发 VuGen 脚本的基础。
识别性能指标
- 你需要关注哪些数据来衡量服务器性能?
- 服务器端指标:
- CPU 使用率: 是否长期高于 80%?是否存在 CPU 瓶颈?
- 内存使用率: 是否持续增长导致内存溢出?
- 磁盘 I/O: 磁盘读写是否繁忙?是否存在 I/O 瓶颈?
- 网络带宽: 网络流量是否达到上限?
- 数据库指标:
- 数据库 CPU、内存使用率。
- 慢查询数量和执行时间。
- 数据库连接数是否达到上限?
- 锁等待时间。
- 应用服务器指标:
- JVM 堆内存使用情况(针对 Java 应用)。
- 线程池、连接池状态。
- GC(垃圾回收)频率和耗时。
- LoadRunner 端指标:
- 平均响应时间: 用户操作的平均耗时。
- 90% 或 95% 响应时间: 大部分用户的响应时间,比平均值更能反映真实体验。
- 每秒事务数: 系统每秒能处理的事务数,是衡量吞吐量的核心指标。
- 错误率: 事务失败的百分比,不应超过 1%(具体标准视业务而定)。
- 吞吐量: 每秒通过网络传输的数据量(字节/秒)。
- 服务器端指标:
环境准备

- 测试环境: 尽可能模拟生产环境的配置(硬件、软件、网络),这是保证测试结果有效性的前提。
- 监控环境: 在被测服务器上部署监控工具,如:
- Linux:
top,vmstat,iostat,netstat,sar(sysstat 包),或使用Zabbix,Prometheus + Grafana等专业监控平台。 - Windows: 任务管理器、性能监视器。
- 数据库: 数据库自带的监控工具(如 MySQL 的
SHOW PROCESSLIST,SHOW STATUS)或第三方工具。
- Linux:
- LoadRunner Controller 机器: 确保其性能足够强大,不会成为测试的瓶颈。
第二阶段:脚本开发
录制脚本
- 使用 LoadVuGen 录制你在浏览器或客户端上执行的关键业务场景。
- 建议: 只录制核心流程,去掉不必要的请求(如图片、CSS、JS 文件,除非它们是业务核心)。
参数化
- 为什么? 避免所有虚拟用户都使用相同的数据(如用户名、密码、搜索关键词),这会导致缓存命中过高,无法模拟真实场景,还可能对后端数据造成污染。
- 怎么做? 将脚本中的硬编码值(如
username="test1")替换为参数(如username={param_username}),并从数据文件(如 CSV 文件)中读取。 - 最佳实践: 为每个虚拟用户分配唯一的数据,可以使用
Unique Number或Unique Name类型的参数。
添加检查点
- 为什么? 确保服务器返回了正确的响应,验证业务逻辑的成功执行。
- 怎么做? 使用
web_reg_find函数或“图像检查”功能,在服务器响应的 HTML 中查找特定的文本或字符串(登录成功后页面应包含“欢迎,XXX”)。 - 注意: 检查点文本应该是唯一的、稳定的,不要使用动态变化的值(如时间戳)。
思考时间

- 为什么? 模拟真实用户的操作节奏,用户在两次操作之间会有停顿。
- 怎么做? 在脚本中模拟用户操作后,添加
lr_think_time函数,通常设置为 1-5 秒,或者根据实际情况从数据文件中读取。
关联
- 为什么? 这是最关键也最复杂的一步,很多应用的响应中包含动态值(如 Session ID, JSessionID, Token),这些值在后续请求中需要被提交回去,关联就是从上一个服务器的响应中“提取”出这个动态值,并赋给一个参数,供后续请求使用。
- 怎么做?
- 在录制时,启用“Enable advanced script correlation”。
- 在回放时,观察日志,查找
Error -26377: No match found for the parameter "XXX"这样的错误。 - 使用 Correlation Studio 工具,自动或手动地找到需要关联的动态值,并生成关联代码。
- 手动编写关联代码(例如使用
web_reg_save_param函数)。
脚本调试与优化
- 单用户回放: 在 VuGen 中以单用户模式多次回放脚本,确保它能 100% 成功运行,没有任何错误。
- 日志分析: 仔细查看回放日志,定位并修复所有错误(如 HTTP 500, 404, 403 错误)。
- 资源清理: 在脚本中添加事务结束后的清理操作(如删除创建的数据),避免影响后续测试。
第三阶段:场景设计
选择场景类型
- 手动场景: 最灵活,可以精确控制每个虚拟用户组的数量、运行时间和负载行为。
- 目标场景: 设定一个性能目标(如“TPS 达到 500”),LoadRunner 会自动调整虚拟用户数以达到该目标,非常适合用于查找系统的最大处理能力。
配置虚拟用户组
- 创建一个或多个用户组,每个组代表一类业务场景(如“登录用户组”、“下单用户组”)。
- 为每个组设置:
- 虚拟用户数: 并发用户数。
- 负载行为:
- Ramp-Up (递增): 在指定时间内,逐步增加虚拟用户数,模拟真实用户逐步涌入的场景。
- 持续:
- Ramp-Down (递减): 在测试结束时,逐步减少用户数。
�始化和结束
- vuser_init: 在所有用户开始执行业务操作前运行,通常用于登录、获取初始 Token 等操作。
- vuser_end: 在所有用户执行完业务操作后运行,通常用于登出、清理资源。
- 注意: 这里的操作不计入事务和响应时间统计。
事务配置
- 在 Controller 中,将脚本中需要关注的核心业务流程(如“登录”、“下单”)定义为“事务”。
- 这将帮助你精确测量每个步骤的性能,并生成详细的图表报告。
第四阶段:执行与监控
启动监控
- 在 Controller 的“Resources”菜单中,添加所有需要监控的 Remote Monitor(被测服务器、数据库、应用服务器等)。
- 确保监控代理已在目标机器上正确安装和运行。
启动场景
- 点击“Start Scenario”开始执行测试。
- 实时观察:
- Vusers 图: 观察虚拟用户是否按预期启动、运行和停止。
- Transactions 图: 观察事务响应时间和 TPS 的变化。
- Resources 图: 观察服务器、数据库等各项资源的使用率。
测试过程中的关键动作
- 寻找拐点: 观察图表,寻找性能急剧下降的点,TPS 达到峰值后开始下降,或者响应时间突然飙升,这个拐点通常揭示了系统的瓶颈。
- 分析瓶颈: 当出现性能问题时,立即查看资源监控图表。
- CPU 100%,瓶颈可能在应用层或
