揭开LoadRunner三大组件-VuGen、Controller、Analysis的神秘面纱。
第一,VuGen (Virtual User Generator)
VuGen肩负着生成虚拟用户脚本的重任,能把用户在真实应用上的操作,翻译成性能测试能理解的代码。
新建和脚本录制
打开VuGen后,先是点击File -> New Script,并选择合适的协议 (Protocol)。对于绝大多数Web应用,选择Web (HTTP/HTML)协议即可。
进行录制设置,在Recording Options中建议勾选support charset utf-8以避免乱码,并选择URL-based script方式,能捕获更底层的请求。
参数化
基本公式是:数据驱动-更真实的压力。
在录制的脚本中,用户数据往往是写死的。参数化就是用变量来代替这些写死的数据,让每一次模拟都更接近真实用户的行为。具体操作是在脚本中选择要替换的值(如用户名“john”),右键点击并选择Replace with a Parameter,填入一个参数名(如p_Username)即可。接着在Parameter List中导入或编辑测试数据。
关联
关联能处理动态的服务端数据。
使用web_reg_save_param函数,能从服务器响应中提取动态数据(如Token)。对于JSON格式的响应,web_reg_save_param_json函数是更简洁的选择。对于新手,也可以用VuGen的Design Studio功能,能自动分析并提供关联建议。
事务
事务是对脚本中操作(如“登录”或“提交订单”)进行计时的方法,能精确测量出在压力下,这些业务的耗时是不是在预期范围内。
录制完脚本后,可以在代码中添加lr_start_transaction("事务名");和lr_end_transaction("事务名", LR_AUTO);等函数,操作会被清晰地标记为一个可测量的事务。
脚本调试
VuGen也提供了一系列调试技巧:
观察日志:使用Replay Log,在运行设置中开启Extended Log,能输出完整的请求和响应内容,帮定位失败的请求。
分段执行:采用逐段注释。如果脚本较长,可以逐步注释掉部分代码,从登录开始,确定无误后再逐步放开,快速锁定问题范围。
模拟断点:通过条件语句(if)或lr_exit函数来中断脚本运行,模拟断点效果进行排查。
调试:回放失败时,确定动态参数(如 Session ID、Token)是不是被成功提取和替换,同时要留意 Replay Log 中的具体错误描述(如 500 错误、404 错误等),并结合服务器端的日志综合判断。
第二,Controller
创建场景
打开Controller,将面对两种不同类型:
Manual Scenario (手动场景):这种场景主要用于探索性测试、发现性能短板、或进行细致的负载配置。可以完全手动控制虚拟用户(Vuser)的数量、启动时间、脚本分配等几乎所有参数。
Goal-Oriented Scenario (面向目的的场景):这种场景主要用于容量规划、服务水平协议 (SLA) 证实等确定性测试。只需设定一个确定的测试目的,如事务响应时间不超过3秒或每秒完成100次点击,LoadRunner会自动尝试达到这个目的。
添加虚拟用户组
添加脚本和组:点击Add Group,从VuGen导出的脚本。可以为同一份脚本建立多个组(A/B/C),以便灵活控制。
分配:为每个组设定一个Quantity,比如登录组指派50名虚拟用户,浏览组指派100名。
设计执行计划
现在进入最重要的步骤:Scenario Schedule:
Start Vusers
Simultaneously:一次性全部启动,模拟突然涌入的流量高峰。
Ramp Up (逐步加压):模拟流量的真实增长过程,如每30秒增加X个用户,直到达到设定总量,这是最常用、最贴近真实业务场景的方式。
Duration :时间。
Stop Vusers :可以一次性停止或逐步停止。
执行和监控
一切就绪,点击Start Scenario按钮。
过程中Controller会实时向你汇报片场情况。可以通过实时图表,清晰地看到Running Vusers(在线人数)的增减、Hits per Second(每秒请求数)吞吐量、Transaction Response Time(交易耗时)等的工作状态。
第三,Analysis
打开分析会话
在Controller中结束测试后,点击Results -> Analyze Results,或手动打开Analysis模块,通过File -> Open选择后缀为.lrr的结果文件。
一张图看懂标准
报告打开后会看到一系列图表,分析几个标准图表:
Running Vusers (虚拟用户活动情况图):证明负载是不是被正确执行,并作为控制变量,辅助分析其他标准的变化。
Transaction Response Time (事务平均响应时间图):测量用户体验的标准,展示完成一个事务(如登录、搜索)所需的平均时间。
Hits per Second (每秒点击数图):代表客户端向服务器发送的请求数量,是测量服务器吞吐量的标准,反映服务器处理请求的繁忙程度
Errors per Second (每秒错误数图):快速判断系统在测试期间是不是出现异常的标准。
Throughput (吞吐量):表示服务器在单位时间内返回给客户端的数据总量(以字节为单位),和Hits per Second一般呈正相关。
System Resources (系统资源图):通过监控CPU、内存、磁盘I/O等数据,准确定位短板是在数据库、Web服务器还是应用服务器方面,对于决定资源短板非常重要。
图表综合分析
了解单个图表后通过综合分析来挖掘根本原因,找到真正的性能短板。这正是性能测试的作用所在。
响应时间和用户并发量:将Running Vusers图和Transaction Response Time图叠加是最常用的分析方法。如果随着用户数增长,响应时间始终平稳,说明系统有良好的伸缩性和稳定容量;但当用户数达到某个临界点后,响应时间突然急剧攀升,那么这个转折点就是系统的性能拐点-需要分析资源短板。此分析完全依赖LoadRunner Analysis自带的合并图功能即可实现,无需第三方工具。
响应时间和吞吐量:合并Hits per Second和Transaction Response Time图。如果随着请求吞吐量增加,响应时间也随之增加,说明系统已接近处理极限,处理能力不足以应对当前的请求压力。
错误率和响应时间:如果响应时间飙升的同时错误率也在急剧增加,这一般是系统已崩溃或达到了不可接受的状态。反过来,如果错误率增加但响应时间并没有显著变化,可能提示网络连接或防火墙等外部问题已切断了部分连接。
定位资源短板:结合服务器端监控的CPU、内存、磁盘I/O等资源图。如果响应时间增加的同时CPU使用率也达到100%,很明显CPU就是性能短板;反之说明短板在数据库查询慢、网络带宽、代码效率等其他方面。Analysis自带的功能通过监控Windows或Unix资源计数器即可进行分析。
第四,打通全链路
分布式测试:
通过1个Controller + N个Load Generator的架构来解决单机CPU、内存和网络带宽的短板。
操作:负载机安装Load Generator Agent并保证服务启动;Controller通过“Load Generators”界面添加负载机IP并证实连接状态(Ready状态表示连通);在场景中为不同脚本组分配不同的Load Generator。
准备:保证Controller和Load Generator之间网络通畅(如关闭防火墙或放行54345等LR专用端口),建议部署在同一子网以获得低延迟。
组合复杂业务
当测试涉及多人协作、差别化操作、乃至分阶段压力等复杂业务场景时,手动场景通过脚本分组阶梯启动的方式能灵活应对:
划分用户组:如登录组、购物组、浏览组。
阶梯启动方法:
登录组数量50,立即启动(模拟用户到达过程)。
购物组数量100,延迟5分钟才启动(模拟已登录用户)。
阶段交汇,当用户达到某一压力点时触发测试是手动场景的技巧。
最快上手
如果希望以最快的速度上手,推荐以下:
第一步:跟着自带Demo走一遍 LoadRunner自带一个WebTours示例网站,位于安装目录下。第一次实践就是完整地走一遍录制脚本-参数化登录 -压测登录接口 -生成报告这个流程感受三大组件怎样协同工作。
第二步:从单一接口开始不要一上来就压测全链路业务流程!选择系统中最主要的技术栈最独立的单一接口(如用户登录或商品查询接口),跑通第一个非Demo的Hello World。经测试无误后再逐步扩展到全流程。
第三步:遇到问题随时搜索loadrunner.cn中文网或专业的软件测试社区,别人踩过的坑一般已经有现成的解决方案。
指南
新手常见错误一:HTTP 200即代表业务正确?
正解:HTTP 200只代表服务器正常响应,不代表业务正确。必须添加文本或图像检查点,确定响应中包含登录成功、欢迎您等业务字样,才能判断请求真实成功。
新手常见错误二:忽略了思考时间(Think Time) 的设置。
正解:真实用户在操作间有键盘输入、页面浏览的天然停顿,完全忽略会使服务器压力远大于真实场景。使用lr_think_time()函数插入模拟停顿,并在压力测试场景(Controller)中启用运行时设置里的思考时间。
新手常见错误三:所有虚拟用户都使用相同的写死测试数据。
正解:大量用户同时登录同一账号会导致会话冲突。必须使用参数化(从CSV文件读取多个不同的用户名/密码),让每个虚拟用户使用独特的数据。
FAQ:
问:为什么我总是录不到脚本、或者脚本为空?答:禁用IE浏览器的启用第三方浏览器扩展选项,并在操作系统的数据执行保护(DEP)设置中添加Vugen.exe为例外,重启后一般能解决问题。
问:Jmeter和LoadRunner我该选哪个?答:两者各有不同。JMeter是开源、轻量、灵活的全能工具,适合初创企业和API测试;LoadRunner是商业、重型、协议包括面最全的企业级工具,适合大型传统企业和复杂C/S架构。如果预算充足且需要测试SAP、Citrix等非Web协议,LoadRunner是不二之选。
问:企业级场景中LR有哪些?答:将VuGen脚本纳入Git版本管理、用阶梯式Ramp Up方法而不是瞬间启动防止服务雪崩、在Controller中设置SLA目的让Analysis自动考虑是不是达标、同时监控被压服务器的资源标准(CPU、内存、磁盘I/O、网络带宽)以确定短板方向。