简介
LoadRunner是由Micro Focus公司开发的一款专业性能测试工具,也是目前行业内最常用、最成熟的性能测试工具之一,主要用于模拟多用户并发访问系统,测试系统在不同压力下的性能表现,帮我们发现系统的性能瓶颈、稳定性问题。
简单来说,我们平时手动操作软件,一次只能模拟1个用户的行为;而LoadRunner可以“伪装”成上百、上千甚至上万个用户,同时对系统发起请求,模拟真实场景下的用户访问压力,比如:电商平台双十一的峰值流量、APP上线后的大规模用户访问,这些场景我们无法手动模拟,就需要借助LoadRunner来实现。
核心用途
我们使用LR,核心是解决3个关键问题,也是我们做性能测试的核心目标:
- 测试系统的并发能力:系统能同时承受多少个用户正常访问,不会卡顿、崩溃;
- 排查系统的性能瓶颈:比如响应变慢、报错、宕机,到底是服务器、数据库还是接口的问题;
- 验证系统的稳定性:系统在长时间、高并发压力下,能否持续正常运行(比如连续运行24小时无异常)。
LoadRunner的核心组件
LR的操作主要依赖3个核心组件:
- VuGen(虚拟用户生成器):核心是“录脚本”——模拟单个用户的操作流程(比如登录、查询、提交表单),生成可重复执行的测试脚本;
- Controller(控制器):核心是“设场景”——设置虚拟用户数、并发模式(比如我们之前聊的集合点、Pacing),启动压力测试,实时监控测试过程;
- Analysis(分析器):核心是“看结果”——测试结束后,生成详细的性能报告,帮我们分析响应时间、每秒请求数、错误率等关键指标,定位性能问题。
图标颜色分别为 黄色、绿色、蓝色,为方便记忆可与七色谱顺序对应,其顺序也与实际使用的顺序一致,即先录制脚本,再设置场景,最后查看结果。
组件介绍
Generator
新建:script和solution
- Script(脚本):是性能测试的“操作指令集”,记录单个虚拟用户的完整操作流程(如登录→查询→退出),是压测的基础单元,每个Script对应一个具体的业务场景,可单独编辑、调试和运行,脚本由Vuser_init、Action、Vuser_end三部分组成,其中Action可进行多次迭代,而前两者仅执行一次。
- Solution(解决方案):是Script的“容器”,用于管理多个相关联的Script,比如一个电商压测场景,可将“登录脚本、商品查询脚本、下单脚本”放在同一个Solution中,方便统一编辑、维护和调用,新建VuGen时,默认会创建一个Solution,再在其中创建或添加Script,一个Solution可包含多个不同业务场景的Script,便于批量管理测试相关脚本资源。
脚本面板
录制脚本
- 点击录制按钮。
- 设置Recording mode中的内容,其他内容保持默认,点击Start Recording
Record:录制类型
Web Browser,即告诉LR要录制网页。
Windows Application:本地 Windows 桌面客户端
Remote Application via LoadRunner Proxy:远程 / 非本地应用(部署在其他机器上的应用、移动端 APP(配合手机代理设置))
Captured Traffic File Analysis:已捕获的流量文件
Application:应用程序
URL adress:目标地址
录制面板
录制时,在事务开始前点击添加事务(事务名可自定义),事务结束后,点击结束事务。
比如一个查询操作,需要在查询前点击添加事务,查询后点击结束事务。
开始事务
结束事务
停止录制
点击停止录制后,gen会自动生成脚本。
注意
可能存在脚本录制不上的情况,考虑重新录制或更换浏览器。
脚本调试
经过上个步骤录制的脚本会有很多多余的内容,需要手动调试人工判断,可借助F12,查找目标接口。
先将多余接口注释掉,若可成功回放则可删除注释内容。不要一上来就删除,可能导致脚本缺少信息而无法回放成功!!!
目标接口之后的内容均可删除,注意要保留事务结束标志和return 0。
一个登录接口:
//集合点 lr_rendezvous("jihe"); //检查点 web_reg_find("Search=All", "Text=createBy", LAST); lr_start_transaction("login"); lr_think_time(1); web_custom_request("login", "URL=http://192.168.1.250/prod-api/login", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/login?redirect=%2Findex", "Snapshot=t45.inf", "Mode=HTML", "EncType=application/json;charset=UTF-8", "Body={\"username\":\"user01\",\"password\":\"password01\"}", LAST); lr_end_transaction("login",LR_AUTO); return 0;回放
查看回放内容与录制内容:snapshot。将光标放在对应接口代码块上,点击snapshot。
函数
集合点(类比JM的同步定时器)
如果涉及并发,需要添加集合点。不涉及并发可以不加。
右击-insert-Rendezvous
lr_rendezvous("jihe");检查点(类比JM的断言)
回放之后成功只能代表接口是通的,不能代表返回的信息一定正确,可能异常被try catch返回,也可能被分支处理了。
直接在snapshot中选中需要断言的字符串,右击-Add Text Check Step
web_reg_find("Search=All", "Text=createBy", LAST);思考时间(类比JM的固定定时器)
lr_think_time(1);
缓解服务器压力,模拟用户真实操作。
其他函数
web_reg_save_param()
web_set_max_html_param_len()
lr_convert_string_encoding()
lr_output_message()
web_add_auto_header()
拓展
关联
适用于:token短期变化刷新
/* 登录 */ web_reg_save_param("token0", "LB=token\":\"", "RB=\"", LAST); web_set_max_html_param_len("99999"); web_custom_request("login", "URL=http://192.168.1.250/prod-api/login", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/login?redirect=%2Findex", "Snapshot=t45.inf", "Mode=HTML", "EncType=application/json;charset=UTF-8", "Body={\"username\":\"user01\",\"password\":\"password01\"}", LAST); lr_convert_string_encoding(lr_eval_string("{token0}"),"utf-8",NULL,"auth"); lr_output_message("login转换编码----%s",lr_eval_string("{auth}")); ("Authorization",lr_eval_string("Bearer {auth}")); //集合点 lr_rendezvous("jihe"); //检查点 web_reg_find("Search=All", "Text=createBy", LAST); lr_start_transaction("search"); lr_think_time(1); web_url("list_2", "URL=http://192.168.1.250/prod-api/system/industryType/list?pageNum=1&pageSize=10&industryTypeCode=financial", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/industryType", "Snapshot=t51.inf", "Mode=HTML", LAST); lr_end_transaction("search",LR_AUTO); return 0;参数化
添加参数文件:Design-Parameters-Parameters List
将实参替换为形参:选中实参,右击-Replace with Parameter-选择参数
//集合点 lr_rendezvous("jihe"); //检查点 web_reg_find("Search=All", "Text=createBy", LAST); lr_start_transaction("login"); lr_think_time(1); web_custom_request("login", "URL=http://192.168.1.250/prod-api/login", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://192.168.1.250/login?redirect=%2Findex", "Snapshot=t45.inf", "Mode=HTML", "EncType=application/json;charset=UTF-8", "Body={\"username\":\"{account}\",\"password\":\"{pwd}\"}", LAST); lr_end_transaction("login",LR_AUTO); return 0;取值顺序内容见LoadRunner参数化属性设置_单个参数
Controller
跳转&新建
跳转
在generator中点击:
新建
打开软件后选择脚本导入
file - new-Add Scripts
场景设置
在design面板设置
start Vusers:设置虚拟用户数,可立即启动、梯度启动。
Duration:运行时间,运行完停止、持续运行
Stop Vusers:释放虚拟用户,可立即释放、梯度释放。
运行场景
在run面板:左侧可添加其他图表,如系统资源等。
图标添加完毕后,点击Start Scenario开始运行。
Analysis
跳转&新建
跳转
在controller中,
新建
打开Analysis后,
结果导出
解析完成的结果文件,点击Reports-HTML Report即可导出HTML文件。