LoadRunner 超详细教程:从入门到精通
LoadRunner 是一款由 Micro Focus(原 HP)开发的、业界领先的负载测试和性能测试工具,它通过模拟成千上万的用户并发访问,来测试应用程序在不同负载下的性能、可扩展性和稳定性。
第一部分:LoadRunner 核心概念
在开始动手之前,必须理解 LoadRunner 的几个核心组件和工作流程。
LoadRunner 架构与组件
LoadRunner 主要由以下几个核心模块组成:
-
VuGen (Virtual User Generator) - 虚拟用户生成器
- 作用:录制用户的业务操作脚本,并将其转化为可执行的脚本(C 语言或基于 Web/HTTP 的脚本)。
- 核心功能:脚本录制、编辑、参数化、关联、调试。
-
Controller - 控制器
- 作用:设计和执行负载测试场景,它就像一个指挥中心,负责管理成千上万的虚拟用户。
- 核心功能:定义场景(多少用户、如何运行)、启动/停止测试、监控服务器资源。
-
Analysis - 分析器
- 作用:收集、处理并展示 Controller 运行期间产生的性能数据,生成图表和报告,帮助定位性能瓶颈。
- 核心功能:数据图表化、报告生成、瓶颈分析。
-
LoadRunner Enterprise (原 Performance Center) - 企业版
- 作用:是 LoadRunner 的云端协作和自动化管理平台,它提供了脚本仓库、任务调度、分布式执行、结果集中分析等企业级功能。
- 注意:个人学习通常使用 LoadRunner Professional(桌面版),但企业级项目普遍使用 Enterprise 版。
LoadRunner 测试流程
一个完整的 LoadRunner 测试流程遵循以下步骤:
- 计划测试:明确测试目标、定义业务场景、确定监控指标。
- 录制脚本:使用 VuGen 录制用户在应用上的典型操作。
- 完善脚本:对录制的脚本进行增强,包括参数化、关联、添加检查点和思考时间。
- 设计场景:在 Controller 中设计负载场景,模拟真实用户行为。
- 执行场景:运行负载测试,并实时监控系统性能。
- 分析结果:使用 Analysis 分析测试数据,找出性能瓶颈。
- 调优与重复:根据分析结果,对应用或服务器进行调优,然后重复测试,直到性能达标。
第二部分:实战演练 - 从零开始你的第一个 LoadRunner 测试
我们将以最常见的 Web (HTTP/HTML) 协议为例,演示如何完成一次完整的负载测试。
录制脚本
- 打开 VuGen:启动 LoadRunner,选择 "Virtual User Generator"。
- 创建新脚本:
- 选择 Protocol(协议),对于大多数网站,选择 Web - HTTP/HTML。
- 给脚本起一个有意义的名字,
Web_Login_Test。 - 点击 OK。
- 录制设置:
- 在弹出的 "Recording Options" 窗口中,确保 "URL recording" 是选中的。
- 在 "Applications" 选项卡中,点击 "New"。
- 在 "Application" 输入框中,输入你要测试的网站根地址,
https://example.com。 - 在 "Working Directory" 中选择一个保存脚本的位置。
- 点击 OK。
- 开始录制:
- 点击工具栏上的红色 Record 按钮。
- VuGen 会自动打开一个浏览器(或嵌入的浏览器),在浏览器中,手动执行你要测试的业务流程,
- 打开登录页面。
- 输入用户名和密码。
- 点击登录按钮。
- 进入系统后,浏览几个页面。
- 退出登录。
- 停止录制:
- 完成操作后,回到 VuGen,点击工具栏上的 Stop 按钮。
- VuGen 会提示你保存录制的信息,点击 OK。
你应该在 VuGen 中看到了录制的脚本,它由一系列的 web_url, web_submit_data 等函数组成。
完善脚本(关键步骤)
录制的原始脚本非常脆弱,无法用于真正的负载测试,我们需要进行以下优化:
-
参数化
- 目的:避免所有虚拟用户使用相同的数据(如用户名、密码),这不符合真实情况,也容易被系统识别为异常。
- 操作:
- 在脚本视图中,找到用户名和密码所在的函数参数。
- 选中参数值,右键选择 Replace with a parameter -> New Parameter。
- 给参数起名(如
username,password),选择数据类型(如File),并准备一个数据文件(如.txt或.csv),文件中包含多组不同的用户名和密码。 - VuGen 会自动将
username="test1"替换为lr_save_string("test1", "username");和web_submit_data(..., "Name=username", "Value={username}", ...)。
-
关联
- 目的:处理动态生成的值,很多应用(如 Session ID, Token, Viewstate)在每次请求时都会变化,如果脚本中写死了这些值,第二次运行就会失败。
- 操作:
- 在 VuGen 中,点击工具栏上的 Correlation Helper 按钮。
- 运行脚本一次(按 F5),它会自动扫描响应中可能需要关联的动态值。
- 找到相关值(如 Session ID),Correlation Helper 会建议创建一个关联函数(如
web_reg_save_param)。 - 点击 "Create",VuGen 会在脚本中正确的位置插入关联函数。
-
添加检查点
- 目的:验证服务器返回了正确的响应,确保虚拟用户成功完成了操作。
- 操作:
- 在登录请求之后,添加一个检查点,验证登录是否成功。
- 检查返回的 HTML 页面是否包含 "欢迎" 或 "Welcome" 字符串。
- 在脚本中,在登录函数之后插入一个
web_reg_find函数:web_reg_find("Text=欢迎", "SaveCount=login_status", LAST); - 之后,可以通过
if (atoi(lr_eval_string("{login_status}")) > 0)来判断是否登录成功。
-
添加思考时间
- 目的:模拟真实用户的操作节奏,不会瞬间点击下一个按钮。
- 操作:
- 在两个操作之间,插入
lr_think_time函数。 lr_think_time(5);// 模拟用户思考 5 秒。
- 在两个操作之间,插入
设计并运行场景
- 打开 Controller:保存并关闭 VuGen,启动 "Controller"。
- 创建场景:
- 选择 Create a new scenario。
- 在 "Scenario Groups" 中,点击 "Add Groups" 添加一个组。
- 在 "Available Scripts" 中,找到你刚才创建的
Web_Login_Test脚本,并将其拖拽到 "Groups" 中。
- 配置负载:
- 在 "Scenario Groups" 中,设置 Number of Vusers(虚拟用户数),100。
- 设置 Pacing(虚拟用户启动间隔),"Start 10 new Vusers every 5 seconds"。
- 设置 Duration(运行时长),"Run for 30 minutes"。
- 添加监控:
- 点击 "Open Measurements"。
- 在 "Available Measurements" 中,选择你要监控的服务器资源。
- 必选监控:
- Web Resources:监控 Web 服务器的吞吐量、HTTP 状态码等。
- System Resources:监控服务器的 CPU、内存、磁盘 I/O、网络。
- 点击 "Add Selected Graphs" 将它们添加到 "Online Graphs" 中。
- 启动场景:
- 确保所有 Vusers 和监控都已准备好后,点击工具栏上的 Start Scenario 按钮。
- 场景开始运行,你可以在 Controller 的主界面中实时看到各种性能图表。
分析结果
- 打开 Analysis:场景运行结束后,Controller 会提示你是否要打开 Analysis,选择 "Yes"。
- 概览页面:Analysis 会自动生成概览报告,包括场景摘要、基本图表(如 Vusers vs. Errors, Vusers vs. Hits per Second)。
- 深入分析:
- 分析事务:在 "Transactions" 部分,查看每个事务的平均响应时间、90% 响应时间、成功率等,响应时间急剧增加或成功率下降的地方,就是潜在瓶颈点。
- 分析资源:
- CPU 使用率 持续接近 100%,说明服务器计算能力不足。
- 内存使用率 持续很高或不断增长,说明可能有内存泄漏。
- 网络 I/O 或 磁盘 I/O 达到瓶颈,说明存储或网络是瓶颈。
- 关联分析:将事务响应时间图与服务器资源图放在一起对比,当 CPU 使用率飙升时,响应时间也急剧增加,CPU 就是瓶颈。
第三部分:LoadRunner 高级技巧与最佳实践
常用函数与技巧
lr_save_string()/lr_save_datetime():将字符串或日期时间保存为参数。lr_eval_string():在运行时获取参数的值。lr_output_message():在日志中输出自定义信息,方便调试。lr_error_message():输出错误信息。web_reg_save_param():关联的核心函数。web_reg_find():添加检查点的核心函数。lr_think_time():添加思考时间。lr_rendezvous():集合点,让虚拟用户在某个点等待,直到达到指定数量后再一起执行下一步,用于模拟瞬时高并发。
最佳实践
- 脚本设计:
- 模拟真实的用户行为,而不是简单的点击。
- 脚本应该是模块化的,将可重用的操作封装成函数。
- 使用参数化来模拟不同的用户数据。
- 场景设计:
- 逐步加压:不要一开始就启动所有用户,应该模拟真实的用户增长曲线。
- 混合业务场景:不要所有用户都做同一个操作,应该模拟不同比例的用户在做不同的事情(如浏览、登录、下单)。
- 设置合理的思考时间。
- 监控与分析:
- 全面监控:不要只监控应用服务器,要监控整个链路,包括 Web 服务器、数据库服务器、中间件等。
- 关注“拐点”:性能瓶颈通常出现在性能指标发生剧烈变化的时候。
- 结合日志:LoadRunner 的结果需要与应用服务器的日志、数据库的慢查询日志结合起来分析,才能准确定位问题。
- 环境管理:
- 确保测试环境与生产环境尽可能一致(硬件、软件、网络配置)。
- 测试数据要独立且充足,避免因数据问题影响测试结果。
第四部分:学习资源推荐
- 官方文档:Micro Focus 官网提供了最权威的 LoadRunner 帮助文档和教程。
- 在线课程:
- Udemy / Coursera:搜索 "LoadRunner",有很多付费和免费的入门课程。
- Bilibili / YouTube:有大量中文和英文的实战视频教程。
- 技术博客与社区:
- CSDN / 博客园:国内开发者分享 LoadRunner 使用技巧和问题解决方案的平台。
- Stack Overflow:遇到具体问题时,可以在这里搜索或提问。
- 书籍:虽然经典书籍可能版本稍旧,但其核心思想和方法论仍然适用。
LoadRunner 是一个功能强大但学习曲线相对平缓的工具,掌握它的关键在于:
- 理解原理:清楚知道每个组件的作用和测试流程。
- 动手实践:从录制第一个脚本开始,逐步掌握参数化、关联等核心技能。
- 勤于思考:分析结果时,要像侦探一样,将各种线索(响应时间、错误率、资源利用率)串联起来,找到真正的瓶颈。
希望这份教程能帮助你顺利入门 LoadRunner,并成为一名优秀的性能测试工程师!
