自己寫socket性能工具

自己開發Socket性能測試工具的設想
最近接到一個項目,是對一個AppServer進行性能測試,使用lr進行了winsocket腳本的錄製,一切搞定後,一運行發現問題,lr的試用版只能支持100個client,我要測試的在線虛擬用戶數要達到3000,難道我搞30個負載生成器??無奈,放棄用lr,和開發商量了一下,自己寫測試程序吧。

目前實現的功能:
1、Socket連接的建立
2、多線程
3、結果的驗證
4、性能的部分統計
5、程序的log輸出

通訊協議部分是開發協助搞定的(一般的App程序都用自己寫的協議),加密以及報文格式等都由開發提供,我負責的只是多線程的實現以及結果的驗證和分析(當然沒有實現像controllor那樣的監視圖),我只是把數據記錄下來並且保存到log裏,然後使用perl或命令行來分析log。

遇到的難點:
1、線程中的執行結果統計
2、收發函數的實現
3、如何實現線程的同步

目前寫了1000行出頭(用Delphi7,很多類都是環境自帶的,比較方便),發現實現的功能只夠本次測試使用的,如果下次再進行類似的測試,仍需要大改特改,因此萌生了自己寫一個可以通過配置與定義,可以實現大部分socket測試需要的測試工具。

這個工具應包括如下功能:
1、自定義報文內容
2、自定義加密解密算法
3、自定義通訊過程
4、通過時間點來控制線程代碼的執行與測試結果的輸出
5、完善的結果記錄功能
6、測試報告的自動生成
7、多負載生成的實現(調度,數據收集),類似controllor
8、較爲完善的場景設計
…………
我水平自認爲不怎麼樣,邊學邊寫吧,呵呵。

另外交流2個心得:
1、自己寫測試工具測試完成後,測試報告比較好寫(因爲什麼圖都沒有,哈哈)
2、loadrunner在進行socket性能測試的腳本錄製時,如果遇到發送一個業務包,返回的包大小與個數時隨機的時候,腳本就中斷無法回放了,甚至我都想不出什麼方法可以解決,可見loadrunner還真不是萬能的哈

3、曾經設想用dll實現然後用web協議調用,結果發現dll實現的無法監視真實的server響應時間,需要dll自己實現,無奈啊

附錄1:
測試報告如下:
--------------
產生壓力場景:3000個線程 線程創建爲每500毫秒一個 每個線程每隔500毫秒循環發包一次 循環300次退出線程 每個線程每次循環發包6個(功能1、功能2、功能3、功能4、功能5、功能6各一個)
 
請求的響應時間平均爲1秒以下
請求的最大響應時間(極少的情況下)爲4秒左右
被測試服務器帶寬佔用45%(1G,大概爲450M/秒)
被測試服務器CPU使用率爲50%左右
被測試服務器內存佔用大概爲900M左右
被測試服務器虛擬內存佔用大概爲1.2G左右
每秒鐘客戶端/server成功完成交易大概6000次/秒
交易失敗數爲0
被測試服務器在16分鐘左右可以穩定完成交易數5400000次
根據每位在線用戶每3秒鐘發送6次請求計算,目前可以支持3000個client在線並且穩定運行15分鐘以上
測試同時,測試組手動使用應用客戶端的軟件連接該服務器獲得數據,使用正常,響應速度良好
--------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章