tsung是erlang開發的多協議分佈式負載測試工具,它能用來壓力測試HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, webscoket 和 Jabber/XMPP 的 server。
安裝 Tsung
在 mac 安裝 tsung 可使用 macport
sudo port install tsung
安裝成功後,以 -v 測試
$ tsung -v
Tsung version 1.6.0
在這個路徑下面,有一些 perl script,接下來可以利用這些 script 產生報表
$ $ ls -m /opt/local/lib/tsung/bin/
log2tsung.pl, tsung-rrd.pl, tsung_percentile.pl, tsung_stats.pl
範例的路徑
/opt/local/share/doc/tsung/examples
我們可以將 websocket.xml 範例複製出來修改。
cp /opt/local/share/doc/tsung/examples/websocket.xml .
撰寫 test scenario
修改從範例複製的 websocket.xml
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/opt/local/share/tsung/tsung-1.0.dtd" []>
<tsung loglevel="notice" version="1.0">
<clients>
<client host="localhost" use_controller_vm="true" maxusers="1000" />
</clients>
<servers>
<server host="127.0.0.1" port="9000" type="tcp" />
</servers>
<load>
<!-- phase 1: 0.1 usr per second in 10 minutes, max: 1000 -->
<arrivalphase phase="1" duration="10" unit="minute">
<users maxnumber="1000" arrivalrate="0.1" unit="second" />
</arrivalphase>
<!-- phase 2: 1 new user every second in 10 minutes -->
<!--
<arrivalphase phase="2" duration="10" unit="minute">
<users interarrival="1" unit="second"></users>
</arrivalphase>
-->
<!-- phase 3: 1 new usr every 0.1 second in 10 minutes -->
<!--
<arrivalphase phase="3" duration="10" unit="minute">
<users interarrival="0.1" unit="second"></users>
</arrivalphase>
-->
<!-- phase 4: 10 usrs per second in 10 minutes, the same as phase 3, max: 100 -->
<!--
<arrivalphase phase="4" duration="10" unit="minute">
<users maxnumber="100" arrivalrate="10" unit="second"></users>
</arrivalphase>
-->
</load>
<options>
<option name="file_server" id='userdb' value="usr.csv"/>
</options>
<sessions>
<session name="websocket" probability="100" type="ts_websocket">
<setdynvars sourcetype="file" fileid="userdb" delimiter=";" order="iter">
<var name="usrid"/>
<var name="pwd"/>
</setdynvars>
<request subst="true">
<websocket type="connect" path="/msgsrv/ws"></websocket>
</request>
<thinktime min="2" max="5" random="true"></thinktime>
<request subst="true">
<websocket type="message">
{
"task":1,
"action":1,
"serial":"01-01-%%_usrid%%",
"rdata":{
"userid":"%%_usrid%%",
"userpwd":"%%_pwd%%"
}
}
</websocket>
</request>
<thinktime min="3" max="10" random="true"></thinktime>
<request>
<websocket type="message" >
{
"task":3,
"action":2,
"serial":"03-02-%%_usrid%%",
"rdata":{
"areaseq":1
}
}
</websocket>
</request>
<thinktime value="30"></thinktime>
<request>
<websocket type="close"></websocket>
</request>
</session>
</sessions>
</tsung>
以下說明每個部分的設定:
load 的部分是新連線產生的速度,下面有四個 phases,分別有不同的連線產生的速度
<load>
<!-- phase 1: 0.1 usr per second in 10 minutes, max: 1000 -->
<arrivalphase phase="1" duration="10" unit="minute">
<users maxnumber="1000" arrivalrate="0.1" unit="second" />
</arrivalphase>
<!-- phase 2: 1 new user every second in 10 minutes -->
<arrivalphase phase="2" duration="10" unit="minute">
<users interarrival="1" unit="second"></users>
</arrivalphase>
<!-- phase 3: 1 new usr every 0.1 second in 10 minutes -->
<arrivalphase phase="3" duration="10" unit="minute">
<users interarrival="0.1" unit="second"></users>
</arrivalphase>
<!-- phase 4: 10 usrs per second in 10 minutes, the same as phase 3, max: 100 -->
<arrivalphase phase="4" duration="10" unit="minute">
<users maxnumber="100" arrivalrate="10" unit="second"></users>
</arrivalphase>
</load>
option 是定義一個外部 csv 檔案的 id,給後面參考使用
<options>
<option name="file_server" id='userdb' value="usr.csv"/>
</options>
session 的一開始,先取得 userdb 對應的 csv 檔案,並取得兩欄資料,對應到 usrid 及 pwd 兩個變數。後面在 request 的地方,可以用 %%_usrid%% 參考到 csv 裡面的變數。
<session name="websocket" probability="100" type="ts_websocket">
<setdynvars sourcetype="file" fileid="userdb" delimiter=";" order="iter">
<var name="usrid"/>
<var name="pwd"/>
</setdynvars>
<request subst="true">
<websocket type="connect" path="/msgsrv/ws"></websocket>
</request>
<thinktime min="2" max="5" random="true"></thinktime>
<request subst="true">
<websocket type="message">
{
"task":1,
"action":1,
"serial":"01-01-%%_usrid%%",
"rdata":{
"userid":"%%_usrid%%",
"userpwd":"%%_pwd%%"
}
}
</websocket>
</request>
<thinktime min="3" max="10" random="true"></thinktime>
</session>
usr.csv 裡面就放兩欄,分別是 usrid 及 pwd
u0001;u0001pwd
u0002;u0002pwd
u0003;u0003pwd
進行 tsung 測試
啟動 tsung
tsung -f websocket.xml -l log start
產生的報告會放在 log 目錄下面,一個日期 timestamp的目錄中
tail -f log/20170324-1531/tsung.log
可以用 tsung_stats.pl 產生 html 的 report
mkdir report
cd report
/opt/local/lib/tsung/bin/tsung_stats.pl --stats ../log/20170324-1531/tsung.log chromium graph.html
最後可以看到一些統計報表
沒有留言:
張貼留言