漫遊測試之效能測試(3.4、Tsung的介紹 一)
tsung是erlang開發的一個開源的多協議分散式負載測試工具,它能用來壓力測試HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP和Jabber/XMPP的伺服器的效能。其區別於其它效能測試工具最大特點在於高效能。利用其多節點叢集能力,相同的機器配置相對於其它效能測試工具可以製造更高的併發,分散式叢集能夠提供很好的容錯能力、和資料一致性,能夠支撐大概100萬的效能測試。
其缺點是,基於XML的指令碼編輯模式,在除錯上面較困難一些,另外基於erlang語言的擴充套件在不熟悉erlang語言的情況下還是比較困難的。個人覺得,該工具非常適合海量併發,具有一定業務邏輯的介面方面的效能測試,適合海量併發情況下求一些介面的TPS的處理。
3.4.1.Tsung的安裝方法
安裝erlang語言依賴
下載原始碼進行安裝
./configure
make && make install
安裝成功
Tsung安裝
wget http://tsung.erlang-projects.org/dist/tsung-1.7.0.tar.gz
./configure
安裝成功
3.4.2.Tsung的全域性配置
client用來配置壓力機的地址(同樣需要安裝tsung,啟動slave)。
<clients>
<client host="localhost" use_controller_vm=
<servers>
<server host="192.168.1.1" port="80" type="tcp"></server></servers>
server用來配置測試的地址,可以根據權重,同時對多個伺服器地址進行壓力測試。這一點,也是該工具的特色,其它工具是沒有的。
<servers>
<server host="server1" port="80" type="tcp" weight="4"></server>
<server
配置SSL是否啟用,並且指定SSL版本。
<option name="ssl_reuse_sessions" value="false"/>
<option name="ssl_versions" value="'tlsv1.2'"/>
配置緩衝區大小,預設是32K。
<option name="tcp_snd_buffer" value="16384"></option>
<option name="tcp_rcv_buffer" value="16384"></option>
<option name="udp_snd_buffer" value="16384"></option>
<option name="udp_rcv_buffer" value="16384"></option>
設定連線超時時間。
<option name="connect_timeout" value="5000" />
設定HTTP請求訪問時所使用的瀏覽器的分配。
<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>
3.4.3.Tsung的虛擬IP配置
Host下同綁定了多個IP供本地壓力機使用(關於配置本機多IP的方法,請利用搜索引擎)。
<clients>
<client host="louxor" weight="1" maxusers="800">
<ip value="10.9.195.12"></ip>
<ip value="10.9.195.13"></ip>
</client>
<client host="memphis" weight="3" maxusers="600" cpu="2"/></clients>
<servers>
<server host="10.9.195.1" port="8080" type="tcp"></server></servers>
可以直接使用一段IP地址來做為壓力機或者伺服器地址
<iprange version="v4" value="172.28.1-20.0-254"/>
3.4.4.Tsung的場景配置
第1個階段,每2秒載入1個使用者,持續執行10分鐘後加載第2階段,第2階段每秒載入1個使用者持續10分鐘後加載第3階段,第3階段每隔0.1秒載入1個使用者持續10分鐘。
<load>
<arrivalphase phase="1" duration="10" unit="minute">
<users interarrival="2" unit="second"></users>
</arrivalphase>
<arrivalphase phase="2" duration="10" unit="minute">
<users interarrival="1" unit="second"></users>
</arrivalphase>
<arrivalphase phase="3" duration="10" unit="minute">
<users interarrival="0.1" unit="second"></users>
</arrivalphase>
</load>
注意,單節點預設使用800個Vuser,最大核心可以支援3萬個Vuser。
增加maxnumber的描述,可以設定每個階段的最大併發數。
<arrivalphase phase="1" duration="10" unit="minute">
<users maxnumber="100" arrivalrate="10" unit="second"></users>
</arrivalphase>
<arrivalphase phase="2" duration="10" unit="minute">
<users maxnumber="200" arrivalrate="10" unit="second"></users>
</arrivalphase>
增加session_setup的probability的描述,可以按場景的比例進行設定。
<arrivalphase phase="3" duration="1" unit="minute">
<session_setup name="http_test_1" probability="80"/>
<session_setup name="fake" probability="20"/>
<users interarrival="1" unit="second"/>
</arrivalphase>
在上一個階段併發使用者完成後才能啟動下一個階段的併發數
<arrivalphase phase="1" duration="10" unit="minute" wait_all_sessions_end="true">
<users interarrival="1" unit="second"/>
</arrivalphase>
<arrivalphase phase="2" duration="10" unit="minute">
<users interarrival="5" unit="second"/>
</arrivalphase>