項目總結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-類似購物車和提交訂單接口,是需要根據實際情況提供重寫的測試接口(邏輯和正式接口一樣,請求方式或參數稍有區別);