天天看點

easy_runner一個簡單的壓測程式

這次再公開一個小工具 easy_runner 一個來用做壓測的小工具

我主要用來做mysql壓測的時候,直接壓業務端用的.

程式很簡單,總共不到400來行,推薦程式員自己壓測用,比loadrunner這種重型壓測工具使用起來友善多了

# 介紹

一個python實作的簡單壓測工具

1. 支援多scenario同時執行

2. 可為不同scenario設定think time和線程數

3. 支援warming

4. 可畫出性能曲線

5. 使用友善,啟動迅速,一條指令即可開始壓測

1. scenario直接使用python編寫scenario,使天然支援多協定

2. easy runner一共300來行代碼,維護友善

1. 是通過多線程來加大壓力,對用戶端要求較高,不能有太多的線程數

見easy_runner下的setting.py進行配置

monitor_interval = 1 #設定性能監控的時間間隔,預設為1s,設的越小資料越正确 scenarios_path=(“./scenario”,) #設定劇本的存放路徑,可以設定多個路徑,程式會從設定的路徑載入劇本

log_path_and_file_name = “d:\tmp\runner.log” #設定log存放路徑,壓測資訊都會記錄在這個log下,以便分析和作圖pic_save_path_andprefix = “d:\tmp\pic” #設定性能曲線的生成路徑和檔案字首.可設為none,如果為none,生成的圖檔會直接以視窗方式打開_

_threadrule=(10,3) #線程預熱規則,前一個參數表示預熱間隔,後一個參數表示每次預熱會啟動的線程數,可設為none,如果為none,則無預熱

例子見附件中的easy_runnerscenarioexample.py 這是一個壓測劇本 其中 thread_num=200 為為這個劇本開啟的并發線程數

think_time = 0 為這個劇本執行時的think time 機關為秒 run_count = 1000 為這個腳本的執行次數

name=”update” 指定這個劇本的名字,如果不同的劇本使用相同的名字,那麼在最後做性能曲線時,相同名字的資料會進行合并顯示

  def init(self): 劇本初始化函數

def action(self): 劇本會被重複執行的函數..需要傳回true為成功,false為失敗 def destory(self): 劇本執行完後的資源釋放函數

注意,劇本的類名必須是class scenario(core.scenario.abstract_scenario):

如果已經做好了設定,也編寫好了腳本即可以開始壓測了. 開始壓測很簡單,直接在指令行鍵入python starter.py 就會開始壓測. 這個時候會根據monitor_interval設定的時間間隔,直接輸出qps和rt資訊,并同時開始記log (注:如果log已存在的話,原log會被重命名) 如果需要停止壓測,在指令行直接輸入q 回車 即可結束壓測.

生成圖形也很簡單,直接在指令行鍵入python plot.py 就是自動分析剛才的log檔案生成圖形(plot.py需要matlibplot的支援~)

圖形樣例如下:

easy_runner一個簡單的壓測程式
easy_runner一個簡單的壓測程式
easy_runner一個簡單的壓測程式

本文來源于"阿裡中間件團隊播客",原文發表時間"2011-09-10"

<a href="http://pic.yupoo.com/zephyrleaves/bg97vbca/medish.jpg"></a>