您好,登錄后才能下訂單哦!
高并發測試工具Tsung使用方法,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
tsung是erlang
開發的一款開源的多協議分布式負載并發測試工具,
可用作HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 和 Jabber/XMPP的服務器壓力測試。
tsung可分布在多個客戶機,并能夠模擬成千上萬的虛擬用戶數并發。
Tsung 已經在Linux、FreeBSD和Solaris上通過測試,
其他系統,只要支持Erlang語言的平臺上,也是可以工作的(Linux、Solaris、*BSD、Win32 和 Mac OS X)。
Mac OS X通過 Homebrew 即可安裝 tsung,命令:
brew install tsung
Ubuntu 安裝也很簡單,命令:
apt-get install tsung
其他系統需要先下載源碼包再安裝,源碼包下載地址:
http://tsung.erlang-projects.org/dist/
以tsung 1.6.0為例,下載安裝命令:
wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz # 以1.6.0版本為例 tar -zxf tsung-1.6.0.tar.gz # 解壓 cd tsung-1.6.0 # 進入目錄 ./configure # 配置,生成 Makefile 文件 make # 編譯 make install # 安裝
configure
的時候,如果沒有安裝 tsung 依賴的 Erlang 語言庫,會提示下面的錯誤:
... checking for Erlang/OTP root directory... configure: error: in `/root/tsung-1.6.0': configure: error: test Erlang program execution failed ...
可以用下面的命令先安裝erlang,再 configure
。
brew install erlang # OS X Homebrew port install erlang # OS X MacPorts apt-get install erlang # Ubuntu 和 Debian yum install erlang # Fedora pkg install erlang # FreeBSD
其他系統需要從源碼安裝 Erlang,稍微復雜一些,可參考:https://github.com/erlang/otp/blob/maint/HOWTO/INSTALL.md 。
tsung安裝完成后,會生成兩個命令文件:
tsung
tsung-recorder
默認生成在 /usr/local/bin 目錄下,使用-h
參數可以查到它們所有的參數:
tsung -h
在啟動 tsung 之前,我們需要一個 XML 格式的配置文件,tsung會根據該配置文件進行測試。
/usr/share/doc/tsung/examples 目錄下有一些 XML 配置文件范例,
將其中HTTP測試配置文件 http_simple.xml 拷貝到當前目錄,
再執行,命令如下:
cp /usr/local/share/doc/tsung/examples/http_simple.xml ./ # 拷貝范例配置文件 tsung -f http_simple.xml start # 指定xml文件并開始。如果不指定,則默認使用 ~/.tsung/tsung.xml
這個命令會打印出測試的日志目錄,直到測試結束。
tsung 測試結束后,測試結果 Log 保存在目錄 ~/.tsung/log/ 下。
當啟動一個新的測試時,會在這個目錄下面創建一個新的子目錄,用以保存測試的數據。
Log 格式為當前日期和時間的組合,例如:~/.tsung/log/20160217-0940。
默認情況下,控制節點會啟動一個嵌入的網站服務器,偵聽8091
端口(可以用 -n
選項禁用)。
測試過程也可以用tail
命令查看實時記錄:
tail -f ~/.tsung/log/20140430-1126/tsung.log
測試結束之后,再用tsung_stats.pl
生成報表。
yum install gnuplot # tsung_stats.pl 需要用到的 gnuplot mkdir http_simple # 創建用以保存報表的目錄 cd http_simple # 進入目錄 /usr/local/lib/tsung/bin/tsung_stats.pl --stats ~/.tsung/log/20160305-0933/tsung.log # 生成報表
之后,會在 http_simple 目錄下生成3個目錄和1個 log 文件,其中 images 目錄下就是報表圖片,類似如下。
以上僅是測試,沒有實際用處,因為沒有配置要測試的網站,所以所得到的結果沒有實際意義。
需要修改 XML 配置文件后再測試,才會得到有意義的結果。
打開 http_simple.xml ,下面來講幾個關鍵的配置。
用戶產生的方式:
<clients> <client host="localhost" use_controller_vm="true" maxusers="30000"/> </clients>
tsung運行時可以由很多的虛擬機(VM)組成,client
配置指明這個client
機器上最多生成的用戶數,
如果use_controller_vm
為true
的話,那么當用戶數達到maxusers
,tsung會自動生成新的虛擬機。
<servers> <server host="garden.blue.jude.poppen.lab" port="80" type="tcp"></server> </servers>
server
段可以配置被測服務器的相關信息,也可以配置成集群,如下
<servers> <server host="server1" port="80" type="tcp" weight="4"></server> <server host="server2" port="80" type="tcp" weight="1"></server> </servers>
tsung會根據weight
值來選擇發起請求的server
。
系統監控服務,配置完后可獲取被測server
的CPU、內存、負載、數據庫等相關信息。
可以配置成erlang的監控服務和snmp的監控服務。
<monitoring> <monitor host="garden" type="erlang"> <mysqladmin port="3306" username="root" /> </monitor> </monitoring>
<load> <arrivalphase phase="1" duration="3" unit="minute"> <users maxnumber="100" interarrival="0.02" unit="second" ></users> </arrivalphase> </load>
load
段可配置訪問的負載,訪問可以配成多個階段,由phase
值指定。
duration
是測試持續時間,unit
是單位。
users
段的maxnumber
限制了生成的最大用戶數,
interarrival="0.02"
表示0.02
秒產生一個新用戶,用戶按照session
的配置順序執行session
中的request
。
<options> <option type="ts_http" name="user_agent"> <user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent> <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent> </option> </options>
options
段可配置一些請求的信息,如agent
信息。
<sessions> <session name="http-example" probability="70" type="ts_http"> <setdynvars sourcetype="random_number" start="1" end ="100"> <var name="itemid" /> </setdynvars> <transaction name='getlist'> <request subst="true"> <http url="/comment/getList" method="POST" contents = "item_type=image&item_id=%%_itemid%%"></http> </request> </transaction> </session> <session name="http-example" probability="30" type="ts_http"> <setdynvars sourcetype="random_number" start="1" end="100"> <var name="itemid" /> </setdynvars> <setdynvars sourcetype="random_number" start="20" end="5000000"> <var name="content" /> </setdynvars> <transaction name='getlist'> <request subst="true"> <http url="/comment/addComment" method="POST" contents = "item_type=image&item_id=%%_itemid%%&content=%%_content%%"></http> </request> </transaction> </session> </sessions>
可配置多個子session
,進而可測試多個api,
可以設置請求概率,在probability
里定義,
要求每個session
的probability
之和是100,類型是http。
sessions
里可用for
來設定請求次數,如下
<for from="1" to="@loop" incr="1" var="counter">
在里面可以設置請求的具體信息。
在請求參數里可以帶上隨機數。
隨機數和隨機字符串的定義如下:
<setdynvars sourcetype="random_number" start="20" end="5000000"> <var name="xxx" /> </setdynvars> <setdynvars sourcetype="random_string" length="10"> <var name="xxx" /> </setdynvars>
以%%_xxx%%
的形式來調用。
這里必須注意的是,要使用隨機數,request
必須加上subst="true"
參數,不然隨機數無法被引用成功。
隨機數也可從文件讀取,如csv
。
http
內部可定義header
參數:
<http_header name="Authorization" value="111"/> <http_header name="Cookie" value="authToken=%%_auth_token%%; Path=/"/> <!-- content-Type:POST請求參數的格式,如果是json格式可以這樣寫 --> <http_header name="Content-Type" value="application/json"/>
thinktime
可用于定義兩個請求的間隔時間
<thinktime value="1"/>
另外可定義不同的transaction
,這樣子結果里就會顯示不同transaction
的具體信息。
看完上述內容,你們掌握高并發測試工具Tsung使用方法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。