测试目的:对系统整体接口进行摸底,梳理出不达标接口
接口指标:关键接口90%响应时间不超过1000ms,成功率100%
测试场景:10用户并发运行20分钟
首先是脚本准备,接口脚本尽量做到全场景覆盖(也可以是覆盖与项目组确定的主要性能测试场景),使用的工具是jmeter,通过在工作台添加非测试元件HTTP代理服务器,设置目标控制器、包含模式、排除模式等内容,然后进行脚本录制,并对脚本进行优化,当然也可以通过Fiddler工具录制脚本,另存为jmx格式,再导入到jmeter中,此过程不详述,感兴趣的同学可以进行自学。
脚本准备好了,不要急于压测,要考虑从哪里看压测的结果(或者说是如何获取压测结果),并提前做好配置,我主要从如下3个方面进行了配置:
⑴在jmeter中,我给整个测试计划添加了监听器聚合报告,压测后可以导出聚合报告的图表数据,从中可以梳理出不达标的接口,从而进行针对性的压测,如下截图所示:
⑵设置jmeter日志输出和日志级别(此日志需要设置BeanShell断言,在请求失败的接口进行配置,别急,在后面会讲),修改jmeter安装文件中,bin目录下的jmeter.properties文件,调整日志级别为ERROR,如下截图所示:
⑶另外,我开启了mysql慢查询日志,主要是在压测过程中,观察是否存在慢查询的sql。(linux下开启mysql慢查询日志很简单,自行百度)
准备工作就绪,接下来就是压测了。第一次我设置线程数为1,持续时间20min,得到聚合报告;第二次设置线程数为10,持续时间20min,得到聚合报告;通过对比两次结果梳理出90%响应时间不达标的接口,以及出现请求失败的接口。
针对请求失败的接口,调整jmeter脚本,给请求失败的接口添加BeanShell断言,如下图所示,然后再进行一次10并发20min的压测,从jmeter.log日志中获取接口请求失败的原因,深入挖掘接口请求失败的原因。
本次摸底过程中,数据量并不大,慢查询日志中没有记录。一旦数据量大了,再去实施压测,可能就会出现慢查询的sql。
过程中的小技巧:
在压测过程中,我的jmeter本身出现过卡死以及内存溢出的现象,我的解决办法如下:
①压测的时候禁用查看结果树
②修改jmeter安装文件中,bin目录下的jmeter.bat文件,调整堆内存大小,修改完成后,关闭文件,重启jmeter即可。