项目总结57:使用阿里云性能测试-电商系统并发测试
第一步:部署测试环境
1-单独部署测试服务,是为了尽量不影响正式环境,并尽量保证硬件和软件上,测试环境和正式环境一致
2-目前一共4台服务器:一台阿里云SLB服务器,一台RDS数据库服务器,两台ECS服务器(tomcat、redis、kafka,mongodb君部署在ECS服务器)
3-测试环境(完全模拟真实环境):
数据库:在RDS重新创建新的数据库,命名:xuegao_rds_test;数据库配置信息
Redis:在从服务器创建新的Redis客户端,端口号:6379; redis版本如下
[root@izbpm9uyt0vepwz bin]# redis-cli --version redis-cli 3.2.9
Kafka:在从服务器部署kafka; kafka在Linux安装参考:https://www.cnblogs.com/wobuchifanqie/p/11687234.html
Tomcat服务:在两台正式服务器部署一套完全一样的项目服务,端口号8088;阿里云ECS服务器配置如下:
第二步:确认测试内容
1-测试接口,如下
2-用户数量: 5000小程序用户;500APP用户
3-测试流程:10分钟内,5000个线程,5000粉丝和500店主陆续登陆小程序或APP,陆续请求接口;预计10分钟内接口请求数量5000*37=185000次????
第三步:编写Jmeter测试脚本并本地测试
1-Jmeter测试脚本编写可参考:https://www.cnblogs.com/wobuchifanqie/p/12070734.html
2-考虑模拟真实用户数据,我们将正式数据库同步一份到测试数据库,并通过Jemeter CSV 配置文件提前准备号用户Token以及相关商品ID等信息;Jemter相关目录如下
第四步:上传脚本到阿里云性能测试进行测试(具体操作可以参考阿里云文档)
第五步:查看测试报告
第六步:分析测试报告(以下分析是基于多次测试的结果)
分析结果报告以及相关失败的具体原因,发现:
1-一部分错误是因为接口返回的特殊情况,比如商品不存在,也被是为错误(其实是接口容错处理);针对这类问题,进行了响应断言设置,默认为成功;
2-出现Redis的RedisConnectionFailureException,即连接失败,继续跟进问题,发现是因为Redis连接超时问题(项目对几乎全部的查询接口做了缓存);针对这类问题,做了两个优化处理:
1-优化Redis配置,增加Redis最大连接数等相关参数;
2-考虑到在ECS服务器部署Redis,硬件性能会有瓶颈;我们购买阿里云数据Redis,Redis数据库配置如下:
第七步:优化后重新测试(同时增加了测试时时长5min->20min),结果如下
1-分析数据,错误率由原来的1.12%降到0.02,说明前面的优化是有效果的;
几个问题说明
1-Jemeter有个比较恶心的问题,不能在URL后面和body后面同时加请求参数;导致项目部分接口无法参与测试
2-类似购物车和提交订单接口,是需要根据实际情况提供重写的测试接口(逻辑和正式接口一样,请求方式或参数稍有区别);