壓力測試工具tsung用法簡介
tsung是用erlang開發的一款簡單易用的壓力測試工具,可以生成成千上萬的用戶模擬對服務器進行訪問。目前對tsung的理解也僅限于會簡單的應用,其內部結構沒有深入研究過。
1、安裝
tsung 是用erlang編寫的,所以首先安裝erlang的運行環境。然后就是按照tsung的官網下載編譯tsung。需要注意的是,生成測試報告需要 gnuplot和perl的支持,其中perl需要安裝Template擴展。具體安裝過程請看相關手冊或者google之。
2、配置文件
默認情況下,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當前的狀態
3、壓力的生成原理
(本人不是太透徹,大家湊合看吧)
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
負載的另外一種配置方式是用戶到達率,具體看官方的手冊。
4、生成測試報告
默認安裝時,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、其他
5.1、 tsung-recorder,通過它可以錄制用戶的訪問過程,然后用tsung回放,讓壓力測試更逼真。實際上recorder是一個http代理,啟動recorder后,將瀏覽器的代理指向它,默認端口是8090,用戶只需要用瀏覽器瀏覽被測試的服務器,tsung-recorder會將這個過程寫入到配置文件中。
5.2、添加請求的變量,在壓力測試的過程中,可能需要手機號,用戶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>
原文地址:http://tiandiou.blog.163.com/blog/static/2355668220115392725727/