一、背景、目的和工具简介:
1.背景
23年5月底接到任务:为保障项目6月底准时上线,需要博主6月底前完成行内的性能测试。博主作为开发人员,偶尔有使用jmeter自测接口性能,但是尚未以测试人员角色走完过性能流程的经历,因此体验了一遍流程,也就有了这篇文章。
2.目的:
针对PC端HTTP、SOCKET交易,快速入手,实现基准测试、负载测试、稳定性测试、异常压力测试、故障测试。
3.工具:
LoadRunner11(创建场景、录制脚本)、LoadRunner12(录制脚本)、Fiddler(抓包,方便录制脚本)、nmon(监控服务器CPU、内存、IO等)、nmon analyser v55.xlsm(分析nmon输出的nmon文件,转化为.xlsx)。
注:压力机远程桌面安装的是LoadRunner11,小白(博主第一次使用LoadRunner,对得起小白的名号)想先在本地熟悉工具的使用,而本地只有LoadRunner12,于是用LoadRunner12录制脚步。但是发现录制脚本失败,上网查询良久没找到原因,最后找到了其他方法辅助录制脚本,也就是Fiddler,因此工具看起来有点多,别担心都是纸老虎。录制Socket脚本的时候发现LoadRunner11和LoadRunner12语法不一样(socket脚本中变量标识符由<>变成了{}),如果可以的话,建议直接使用LoadRunner11。
二、如何使用Fidder录制PC端基于HTTP/HTTPS交易的脚本?
1.安装软件,略去。。
2.运行Fiddler
左上角File勾选Capture Traffic,如下图:

3.使用浏览器触发需要录制的交易
确定要录哪个具体的交易,后台哪个功能菜单包含这个交易,然后通过浏览器打开这个功能菜单,触发交易,本次以交易:getMarketingList为例;

4.使用Fiddle生成目的交易的脚本
打开Fiddle,找到对应的交易,然后右键选择Save->Selected Sessions->in ArchiveZIP...,保存在录制脚本的文件夹中,取名getMarketingList,得到getMarketingList.saz。

5.使用LoadRunner打开脚本
右键getMarketingList.saz,选择Create VuGen script,自动唤起HP Virtual User Generator,界面如下图;有文件下载的弹窗,是否保存,直接取消。

6.初步运行脚本
此时点运行按钮,提示“successsful”,那么恭喜你,初版脚本完成了;

7.扩展:把固定IP替换成变量;
按照图上的操作替换IP


8.扩展:必须登录才可以成功触发的接口,动态替换session;
8.1 编辑vuser_init
目的是调getMarketingList交易前登录,获取session,然后把session动态数据保存起来,以便在getMarketingList请求头加上动态session达到动态替换的目的;
8.2 开启事务、结束事务

上图的标识1、2分别为开启事务、结束事务。事务是性能测试用来评估性能状况的基本单元;
8.3 动态数据保存
上图标识3为动态数据信息保存函数,自左往右参数分别为参数名、参数左边界、参数右边界,LAST是参数列表结束的标示。注意:动态参数userSession会在Action中用到;
8.4 登录交易
上图标识4为登录交易,{IP}为前面提到的参数;
8.5 根据登录结果,判断是否登录成功
上图标识5含有strcmp函数、lr_eval_string()函数:strcmp函数作用是字符串比较,相等则返回0,strcmp(a,b)==0等同于!strcmp(a,b),lr_eval_string()函数作用是返回脚本中的一个参数当前的值;
8.6编辑Action
添加开启事务、结束事务、session动态参数、IP参数

8.7编辑vuser_end,注销登录

9.脚本运行成功的标识

三、如何录制SOCKET交易的脚本?
1.创建socket脚本
HP Virtual User Generator左上角选择文件-》新建-》选择Windows Sockets协议,创建生成如下结构的目录。如下图(LoadRunner12截图):

2.一般不用处理vususer_init\vuser_end,直接编辑Action
LoadRuner11 socket脚本如下,可参考此案例编写socket脚本

脚本注释已经很清楚了,主要说明上图标记的地方:
标识1、超时时间,案例中是30秒,可修改;
标识2、服务方的IP和端口,格式:127.0.0.1:10101,以”<>”符合包括表示变量,注意和前面”{}”包括表示变量不同;
标识3、4分别表示服务方返回报文中的响应码和返回信息,其中取返回码作为交易成功与否的标识,标识3、4需要修改成真实交易响应报文中响应码和响应信息的标签;
标识5、成功的代码,案例中000000表示成功,修改成对应的成功响应码;
第53行,关闭socket0连接前,应该再追加2行释放资源、链接失效的命令:lrs_free_buffer("socket0");lrs_disable_socket("socket0",DISABLE_SEND_RECV),避免压测过程中大量提示socket0没有缓存空间的错误。
LoadRuner12 socket脚本如下

注:LoadRunner11 socket脚本以“<>”包括变量,LoadRunner12 socket脚本以“{}”包括变量。
稳定性压测需要加上lrs_free_buffer()参数,以便释放缓存,前几次稳定性压测持续了3个多小时后就因缓存问题大量报错而终止。
3.编辑data.ws

标识6、换成待测socket交易的请求报文;
标识7、2251是含8位数字的请求报文的总长度;
长度可以在调试的时候试错获取,首先需要开启日志详情:导航栏Vuser(U) -》运行时设置-》常规(General)-》日志(Log),勾选下图标注位置(LoadRunner12截图):

保存,运行,然后寻找报错信息中的字符串长度,然后减去8就是报文总长度,如下图:

总长度:2259-8=2251
4.脚本运行成功的标识

四、脚本失败常见原因及分析
- 先确保应用服务是否正常启动,数据库、redis、mq等是否正常连接;
- 交易路径是否正确;
- Socket脚本常见错误是请求报文的长度计算有误,打开详细日志,执行后会输出真实长度,再减去8(案例中是8位数字)就是真实长度。
- 打开详细日志步骤:运行时设置-》日志-》详细等级-》拓展日志;
- 执行压测的时候,可以根据目标TPS,设置延迟避免TPS太高但成功率不达标 ,操作流程:运行时设置-》步,如参考下图(LoadRunner12截图):
1为参考值,并发不是要求很高且接口真实TPS比并发数高的情况下,设置1可以保持和并发数一样的TPS,且报错量较少。 - 压测过程中出现报错,引起Vuser不断减少,可以通过设置报错后继续解决,如下图(LoadRunner12截图):

- 不想查看报错信息,可以设置取消勾选忽略,如下图(LoadRunner11截图):

- 有时压测过程中,TPS突然降低到0,很可能是Vuser的内存分配不合理引起的,可以通过选择按进程运行Vuser。
五、创建场景与压测(LoadRunner11)
1. 基准测试
1.1 创建场景
打开HP Virtual User Generator,还是针对getMarketingList交易,导航栏选择工具-》创建Controller场景,设置场景保存目录,如下图。


1.2 设置场景
基准压测:一个用户连续调100次接口,是后面负载压测等的基础;先设置启动用户为1,如下图;

设置持续时间为完成前一直运行,如下图:
设置迭代次数为1,选中带测交易,右键,然后选择运行时设置,设置迭代次数为100,最好点击运行开关,如下图:

保存后,如下图,点击“运行”按钮:

1.3 场景运行结果
1.4 场景保存
点击保存按钮,弹窗,输入场景的名字,格式一般为压测场景_交易名,如下图:
1.5 报告导出
点击下图按钮,打开分析报告界面,选择添加需要的新图,点击保存即可导出报告,如下图:


2. 负载测试
2.1 创建场景
同基准测试创建场景一样,略去。
2.2 设置场景
根据压测指标设置压测场景,以高峰期处理能力200 TPS为例,设置场景。

2.3 资源监控
使用nmon工具监控服务器的资源(cpu、内存、磁盘等)使用情况,进入nmon文件夹,执行./nmon验证工具是否可用,执行以下命令可以输出资源监控文件到指定文件夹:./nmon -F CRM_YXHDLBSSFZ_01_20230613_01.nmon -s 3 -c 630 -t -m /home/app/nmon,
CRM_YXHDLBSSFZ_01_20230613_01.nmon为输出文件名称;-s 3 每3秒监控一次数据;-c 630 共监控630次;这3个参数需要根据交易名、压测时长做调整,案例为压测30分钟的设置(3 * 630 = 1890 比 30分钟稍微大一些,给操作预留时间)。
生成.nmon文件后,需要用到nmon analyser v55.xlsm分析.nmon文件,打开使用时注意要启用宏,然后选择.nmon文件最后转化成可以被人读懂的文件。

2.4 场景运行结果

2.5 场景保存
同基准测试场景保存一样,略去。
2.6 报告导出
同基准测试导出报告一样,略去。
3. 混合测试
3.1 创建场景
打开HP LoadRunner Controller,左上角文件-》新建,点击“浏览”,逐步把混合测试需要的交易加到场景中的脚本区域,如下图:


点击右下角“确定”按钮,自动打开页面,如下图:

3.2 设置场景
各个交易的并发用户数按百分比设置:场景-》将场景转换为百分比模式(V),选择“是”

按照压测方案里面的要求设置各个交易的比例
设置运行时的参数,择“击共享RTS”,具体设置参考负载的设置,注意:设置上如果有默认勾选的,需要重新设置,避免默认不生效。

全局计划,设置并发用户数、运行时间等略去,参考基准测试如何配置。最后把场景保存到制定位置。

3.3资源监控
略去,参考负载测试
3.4场景运行
开始场景如果提示入如下图,点“否”,选择把结果文件另外为指定位置。


补充说明:
稳定性测试、异常压力测试、和负载测试差不多,只是全局计划的配置不一样;而故障测试相当于稳定性测试过程中,停止然后再启动一个应用服务节点,观察期间整体交易的TPS、响应时间、服务器资源占用等的变化情况,因此就不做过多赘述了。
由于认知有限,以上内容可能有不严谨,甚至不正确的地方,欢迎大家指正。
本文档详细介绍了如何使用LoadRunner进行性能测试,包括使用Fiddler录制HTTP/HTTPS交易脚本,处理登录session,创建和分析SOCKET脚本,以及执行基准测试、负载测试和混合测试。此外,还探讨了脚本失败的常见原因和解决策略,提供了资源监控工具nmon的使用方法。

929

被折叠的 条评论
为什么被折叠?



