tsung是用erlang開發的一款簡單易用的壓力測試工具,能夠生成成千上萬的用戶模擬對服務器進行訪問。目前對tsung的理解也僅限於會簡單的應用,其內部結構沒有深刻研究過。
一、安裝
tsung是用erlang編寫的,因此首先安裝erlang的運行環境。而後就是按照tsung的官網下載編譯tsung。須要注意的是,生成測試報告須要gnuplot和perl的支持,其中perl須要安裝Template擴展。具體安裝過程請看相關手冊或者google之。
二、配置文件
默認狀況下,tsung會加載配置文件
~/.tsung/tsung.xml
將tsung自帶的http的配置示例
/usr/share/doc/tsung/examples/http_simple.xml
複製到該位置,修改一下便可運行。一個最簡單的配置文件:
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
<clients>
<client host="localhost" use_controller_vm="true" maxusers="100000"/>
</clients>
<servers>
<server host="172.16.33.203" port="10013" type="tcp"></server>
</servers>
<monitoring>
<monitor host="myserver" type="snmp"></monitor>
</monitoring>
<load>
<arrivalphase phase="1" duration="1" unit="minute">
<users interarrival="0.01" unit="second"></users>
</arrivalphase>
</load>
<sessions>
<session name="http-example" probability="100" type="ts_http">
<request>
<http url="/a.php" method="GET" version="1.1"></http>
</request>
<!--<thinktime value="1" random="true"></thinktime>-->
<request>
<http url="/b.php" method="GET" version="1.1"></http>
</request>
</session>
</sessions>
</tsung>
clients:用戶產生的方式
servers:被測試的服務器
monitoring:經過一些協議如snmp監控服務器的狀態(本人沒有使用過)
load:壓力配置
sessions:用戶所產生的會話
運行命令
tsung start
壓力測試開始,tsung輸出一段提示,告知測試記錄的位置,可使用命令
tsung status
查看tsung當前的狀態
三、壓力的生成原理
(本人不是太透徹,你們湊合看吧)
tsung在運行時,能夠由多個虛擬機組成,每一個虛擬機能夠模擬多個ip地址(測試負載均衡時),每一個虛擬機下有不少用戶,每一個用戶能夠產生不少session,一個session由不少request組成,這是一個很典型的樹狀結構。tsung使用這個樹狀結構來生成壓力。
看client的配置,maxusers指明這個client機器上最多生成多少用戶,若是use_controller_vm爲true的話,當用戶數達到maxusers,tsung會自動生成新的VM(好像須要登陸系統的ssh賬號)。
生成用戶以後,固然是讓這些用戶訪問被測試的服務器,訪問的負載由load段配置。訪問能夠配置多個階段,在此建設只有一個階段。配置
<users interarrival="0.01" unit="second"></users>
表示每0.01秒產生一個用戶,產生的用戶按照session的配置順序執行session中的request,如何計算RPS,有一個公式:
RPS = 每一個session的請求數 / interarrival
以上面的配置爲例,RPS = 2 / 0.01 == 200
負載的另一種配置方式是用戶到達率,具體看官方的手冊。
四、生成測試報告
默認安裝時,perl文件/usr/lib/tsung/tsung_status.pl用來生成狀態報告。
進入測試日誌的路徑,如/home/iamlaobie/.tsung/log/20110528-21:07,運行上面的腳本,運行完成以後,在該路徑下生成report.html,若是在linux上不方便查看,可將該路徑打包下載本地用瀏覽器打開report.html查看。
報告中的幾個類似概念:
request:相似用php函數file_get_contents請求一個url地址的相應時間
page:一組沒有間隔的request請求的時間總和,至關於打開一個頁面,除了加載頁面的html外,還要加載img、css、js等
session:一個用戶從第一個請求開始到最後一個請求結束的時間總和
五、其餘
5.一、tsung-recorder,經過它能夠錄製用戶的訪問過程,而後用tsung回放,讓壓力測試更逼真。實際上recorder是一個http代理,啓動recorder後,將瀏覽器的代理指向它,默認端口是8090,用戶只須要用瀏覽器瀏覽被測試的服務器,tsung-recorder會將這個過程寫入到配置文件中。
5.二、添加請求的變量,在壓力測試的過程當中,可能須要手機號,用戶ID、股票代碼之類的變量,tsung支持文件隨機讀取,能夠將這些參數按照必定的規則寫入文件,在配置文件中定義讀取的規則,就能在請求時拿到文件的內容。定義一個文件服務:
<options>
<option name="file_server" id="file1" value="/tmp/x.txt"/>
</options>
讀取,在session段中加入
<setdynvars sourcetype="file" fileid="file1" delimiter=";" order="random">
<var name="username" />
</setdynvars>
<request>
<http url="/b.php?username=%%_username%%" method="GET" version="1.1"></http>
</request>
除了從文件讀取,也能夠隨機產生
<setdynvars sourcetype="random_string" length="13">
<var name="rndstring1" />
</setdynvars>
<setdynvars sourcetype="random_number" start="3" end="32">
<var name="rndint" />
</setdynvars>php