一、前期调研
1、项目选型
项目:选择之前自己玩的基于开源项目ruoyi二次开发的一个小游戏的项目,springboot框架。
部署:阿里云ECS最低配置,单核cpu,1.9G内存。
接口:获取玩家信息/getInfo接口(GET请求)
2、测试工具选型
脚本:jmeter
测试数据存储:influxdb
监控:grafana、PerfMon Metrics Collector插件
二、准备阶段
1、监控环境搭建
2、测试脚本编写
编写思路:
ruoyi项目本身自带的权限控制,需要先登陆获取token,用于后面请求被测接口getInfo时在header中携带
由于测试单接口并发,避免冗余操作,使用仅一次控制器,把登陆的流程包起来(当然,如果是想测试事务的并发,可以把仅一次控制器改成事务控制器)
-
ruoyi项目的登陆是基于图形验证码实现的,验证码结果code存储在redis里,这里选择使用JSR233 Sampler编写beanshell脚本请求redis获取code存入jmeter变量vars中(也可使用jmeter插件Redis Data Set,但我这里报错了,感兴趣的可以尝试一下,我感觉还是脚本比较灵活一些,后来就没折腾插件)
-
后端监听器用于将测试结果存储于influxdb中,供grafana获取
-
PerfMon Metrics Collector用于实时监控服务器cpu、mem等
三、开始测试
1、负载测试-确定最大负载
负载测试目的是找到系统保持正常运行前提下的最大负载数(也就是并发量),此过程不需要跑较长的时间,通过关注接口请求的结果和响应时间调整线程数量。
线程数8跑5分钟:
时间平均2.08s,有1个报错
改成6线程:
最大响应时间也就1s左右,无报错
改成7线程试试:
最大20.9s,有一个报错
综上,得到结论最大负载数为6
2、压力测试-较大负载长时间
等待中……