LoadRunner 是一款业界领先的性能测试工具,由Micro Focus公司(原惠普HP软件部门)开发。它的主要目的是通过模拟成千上万的虚拟用户并发执行关键业务操作,来测试和分析整个企业架构的性能与行为,确保应用程序在上线前和上线后能够承受高负载。
简单来说,LoadRunner就是一个“压力测试机”,用来回答“我的系统能同时承受多少用户访问?”和“在压力下系统为什么会变慢或崩溃?”这两个关键问题。
主要组成部分
LoadRunner的架构主要由三个核心组件构成:
Virtual User Generator (VuGen) - 虚拟用户生成器
作用:这是“录制脚本”的地方。它通过捕获用户在客户端(如浏览器)与服务器之间的通信,生成自动化测试脚本。这些脚本模拟了真实用户的操作,如点击、登录、查询等。
关键概念:它模拟的是协议级别的交互,而不是UI操作,因此效率极高。你需要根据被测系统类型(如Web HTTP/HTTPS, Java, .NET, Oracle, SAP等)选择合适的协议。
Controller - 控制中心
作用:这是测试的“指挥中心”。它负责:
组织场景:将VuGen生成的脚本组织成一个测试场景。
分配负载:设置有多少虚拟用户(VUsers)同时执行脚本。
调度任务:定义负载如何增加(如每15秒启动50个用户)、持续运行多久以及如何停止。
分配负载机:当单台机器无法模拟足够多的用户时,可以通过多台“负载生成器”来共同产生压力。
Analysis - 分析器
作用:这是“出报告和找问题”的地方。测试完成后,Analysis会将Controller收集到的所有性能数据整合起来,生成详细的图表和报告。
关键功能:它可以交叉比较不同指标,例如,你可以看到当用户数增加时,服务器的CPU使用率、响应时间、吞吐量如何变化,从而快速定位系统瓶颈(是应用代码问题、数据库问题还是网络问题?)。
LoadRunner的工作流程可以概括为以下四个步骤:
录制脚本:使用VuGen录制用户在与应用程序交互时产生的网络流量,生成一个基础的测试脚本。
完善脚本:对录制的脚本进行增强,例如参数化(让不同用户使用不同的数据)、添加检查点(验证返回结果是否正确)、添加事务(定义要测量的业务操作,如“登录事务”)等。
设计并执行场景:在Controller中,将脚本、虚拟用户数量、负载生成器、运行策略等组合成一个完整的测试场景,然后开始执行。此时,成千上万的虚拟用户开始向被测系统发起攻击。
监控与分析:在场景执行过程中,Controller实时监控系统各个组件的性能计数器(如Web服务器、应用服务器、数据库服务器)。执行结束后,使用Analysis生成全面的性能分析报告。
支持广泛的协议:能够测试从传统Web应用、ERP系统(如SAP、Oracle)到移动应用、云服务等几乎所有类型的软件架构。
强大的模拟能力:能够模拟海量并发用户,这对于评估系统的扩展性至关重要。
深入的监控与分析:不仅能发现性能问题,更能通过丰富的图表和钻取功能,帮助定位问题的根源(是前端、网络还是后端?)。
集成与可扩展性:可以与CI/CD工具(如Jenkins)集成,实现自动化性能测试,并支持各种监控工具的接口。
容量规划:在新系统上线前,评估需要多少硬件资源(服务器、带宽等)才能支持预期的用户量。
性能基准测试:在版本迭代后,比较新版本与旧版本的性能差异,确保没有引入性能衰退。
瓶颈识别:找出系统在压力下的薄弱环节,是数据库查询慢、应用服务器代码效率低,还是中间件配置不当?
系统调优:在定位瓶颈后,进行针对性的优化(如优化SQL语句、调整JVM参数、增加缓存),然后重新测试验证优化效果。
稳定性测试(耐力测试):让系统在高压下持续运行数小时甚至数天,检查是否存在内存泄漏、资源耗尽等问题。
市场地位:LoadRunner长期以来一直是企业级性能测试领域的“黄金标准”,尤其适用于复杂、高要求的性能测试场景。
主要竞争对手:
Apache JMeter:开源、免费,社区活跃,在中小型项目和Web服务测试中非常流行。
Gatling:另一个高性能的开源负载测试工具,采用Scala语言,效率很高。
NeoLoad:一款现代化的性能测试工具,在易用性和DevOps集成方面有很好的表现。
性能测试通常遵循一个标准流程,LoadRunner 是实现该流程的工具。其核心工作流如下图所示:
在进行任何测试之前,充分的准备是成功的关键。
明确测试目标
例如:系统能否支持 1000 用户 同时在线?
例如:核心交易(如登录、查询)的响应时间在 3秒 以内?
例如:系统在 8小时 持续压力下是否稳定?
分析被测系统
系统架构:是B/S还是C/S?有哪些服务器(Web服务器、应用服务器、数据库服务器)?
通信协议:确定被测系统使用的协议(如 Web HTTP/HTML, HTTPS, Java, .NET, Oracle等)。这是创建脚本的基础。
设计测试场景
核心业务:确定需要测试的高频、关键业务(如用户登录、商品搜索、提交订单)。
虚拟用户数:根据目标确定各业务需要模拟的用户数量。
负载模式:是突然上升、循序渐进还是长时间稳定压力?
VuGen 用于录制和增强模拟用户操作的脚本。
操作步骤:
启动 VuGen 并创建脚本
打开 VuGen -> 选择 “新建脚本与解决方案”。
选择对应的 协议(对于大多数Web应用,选择 Web - HTTP/HTML
)。
输入脚本名称。
录制脚本
在录制界面,输入被测应用的 起始URL。
选择录制类型(默认 HTML-based script
适用于基于浏览器的操作;URL-based script
适用于非浏览器的客户端或更底层的录制)。
点击 “录制” 按钮,开始在弹出的浏览器中执行业务操作(如:登录 -> 搜索商品 -> 退出)。
操作完成后,点击 “停止录制”。VuGen 会自动生成 C 语言的脚本。
增强脚本(关键步骤)
插入事务
目的:为了度量某个操作的响应时间。
操作:在操作开始前插入 lr_start_transaction("事务名称")
,在操作结束后插入 lr_end_transaction("事务名称", LR_AUTO)
。
lr_start_transaction("01_Login"); web_url("login.pl", ...); lr_end_transaction("01_Login", LR_AUTO);
参数化
目的:避免所有用户使用相同的数据,模拟真实场景。
操作:选中脚本中的常量(如用户名),右键 -> “使用参数替换” -> 创建新的参数。
配置:在参数列表中,设置参数类型(如 File
),创建 .dat
文件,并录入多组测试数据。设置参数的更新方式(如:Each iteration
每次迭代更新)。
插入集合点
目的:让所有虚拟用户在同一时刻执行某个操作,制造瞬时并发压力。
操作:在需要并发操作前插入 lr_rendezvous("集合点名称")
。
注意:需要在 Controller 中设置集合点策略后才生效。
插入检查点
目的:验证请求返回的页面是否正确,确保业务成功。
操作:在请求后使用 web_reg_find
函数,检查页面中是否存在特定的文本。
示例:
web_reg_find("Search=Body", "Text=Welcome, John", LAST); web_url("welcome.pl", ...); // 如果页面上找不到 "Welcome, John",该请求会被标记为失败
关联
目的:动态捕获服务器返回的数据,并将其作为参数传递给后续请求。(例如:Session ID, Token)
操作:最常用的是使用 “扫描关联” 功能。VuGen 可以自动比较两次录制返回的数据,找出需要关联的动态值,并为您生成 web_reg_save_param_ex
函数。
4. 回放与调试
点击 “回放” 按钮,在 “回放日志” 中查看脚本是否运行成功,没有错误。
Controller 是控制中心,负责管理和执行性能测试场景。
操作步骤:
创建场景
在 VuGen 中点击 “工具” -> “创建控制器场景”,或将脚本直接拖入 Controller。
选择 “手动场景”(推荐,更灵活)或 “面向目标的场景”。
设计场景
分配负载生成器:默认使用本地机器。如果需要更大负载,可以添加其他机器作为负载生成器。
制定计划:
“计划生成器” 选项卡:
初始化:设置虚拟用户在开始运行前进行的操作(如每次迭代都初始化)。
启动虚拟用户:设置负载如何上升。例如:每15秒启动2个用户。
持续时间:设置所有用户启动后,持续运行的时间。例如:稳定运行10分钟。
停止虚拟用户:设置负载如何下降。例如:每30秒停止5个用户。
配置运行时设置
选中脚本,点击 “运行时设置”。
运行逻辑:设置迭代次数。
思考时间:模拟用户操作间的停顿。在测试时,可以忽略思考时间来制造更大压力。
日志:在调试时可启用“扩展日志”,但在正式压测时为提升性能,应选择“标准日志”或“仅当错误发生时”。
添加监控器
目的:实时监控系统资源,定位瓶颈。
操作:在 “运行” 视图的右下角,点击 “可用图” -> 添加新图。
关键监控指标:
Windows 资源:监控被测服务器的 CPU、内存、磁盘 I/O、网络。
Web 服务器:监控 Apache, IIS 的连接数、请求数等。
数据库:监控 Oracle, SQL Server 的缓存命中率、锁等待等。
执行场景
点击 “开始场景” 按钮。
在场景执行过程中,可以实时查看 “运行” 视图中的各种图表,如正在运行的虚拟用户数、事务响应时间、每秒点击量、错误信息等。
测试结束后,Analysis 会将所有数据整合,生成详细的报告。
操作步骤:
打开分析结果
场景运行结束后,Controller 会提示是否打开结果。选择“是”,自动启动 Analysis。
查看关键图表
摘要报告:查看测试的概要信息,包括总通过/失败的事务数。
运行虚拟用户图:显示在整个场景中,虚拟用户数量的变化情况。
平均事务响应时间图:核心图表。显示每个事务在整个场景运行期间的响应时间变化趋势。配合“运行虚拟用户图”,可以分析响应时间随负载增加的变化。
每秒事务数图:显示系统在每个时间点处理事务的能力。
事务摘要图:显示所有事务的通过和失败数量。
错误摘要图:显示测试过程中出现的所有错误类型和数量。
系统资源图:显示被监控服务器的资源使用情况(如CPU)。
合并与关联分析(定位瓶颈的关键)
合并图表:将多个图表关联起来看。例如,将 “平均事务响应时间图” 与 “Windows 资源图” 进行合并。
方法:在图表上右键 -> “合并图”。
分析思路:
当响应时间变长时,服务器的 CPU 使用率是否也达到了峰值(如98%)?如果是,则瓶颈可能在应用服务器或数据库服务器。
当用户数增加时,TPS(每秒事务数)是否不再增长甚至下降?这可能意味着系统已达到处理极限。
当出现大量错误时,虚拟用户数处于什么水平?这可能是系统并发处理能力的上限。
生成报告
生成HTML报告:点击 “报告” -> “新建HTML报告” 或 “新建Microsoft Word报告”。Analysis 会自动生成一份包含所有关键图表和数据的专业报告。
根据Analysis报告,识别性能瓶颈。
协同开发、运维、DBA团队,共同分析瓶颈原因(是代码问题、中间件配置问题、还是数据库查询慢?)。
进行系统调优(如优化代码、增加缓存、调整SQL语句、扩容服务器等)。
回归测试:调优后,使用相同的场景和脚本重新执行测试,验证调优效果。
|
---|