|
|
|
Tsung安裝與使用
|
| Tsung安裝與使用的詳細說明,包括測試場景的腳本配置說明
|
|
Ray 2013/11/11
|
目錄
tsung
Tsung運行環境安裝
檢查安裝一下依賴包,以免在安裝的時候報錯.(操作系統的軟件包完全安裝時,這些包通常都會裝進去,所有也可以跳過,此步驟,后面遇到問題時,少哪包再裝哪個包,逐個解決。)
rpm -qa build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel
每個包系統盤或者鏡像中都有。
安裝 erlang、gnuplot、perl5
erlang :因為Tsung是基於erlang開發的,所以得先安裝這個環境.安裝軟件
perl5:生成報表的腳本支持環境
gnuplot:報表統計圖片生成工具
———————————————————————————————————————
|下面會介紹兩種在線安裝方式和一種離線手動安裝工具方式,這是根據安裝包的源決定的|
erlang安裝:
方式一:
[root@tester~]#apt-get install erlang erlang-src
方式二:
[root@tester~]#yum install erlang erlang-src
方式三:(下載源碼包手動編譯安裝|通常沒有網絡時只能選用這種方法,也是經常用到的方法。)
[root@tester~]#wget http://www.erlang.org/download/otp_src_R15B.tar.gz
[root@tester~]#tar -zvxf otp_src_R15B.tar.gz
[root@tester~]#cd otp_src_R15B
[root@tester~]# ./configure --prefix=/usr/local/erlang --without-javac
正常配置完成后會顯示如下:
*********************************************************************
********************** APPLICATIONS DISABLED **********************
*********************************************************************
jinterface : Java compiler disabled by user
*********************************************************************
*********************************************************************
********************** APPLICATIONS INFORMATION *******************
*********************************************************************
wx : wxWidgets not found, wx will NOT be usable
*********************************************************************
*********************************************************************
********************** DOCUMENTATION INFORMATION ******************
*********************************************************************
documentation :
xsltproc is missing.
fop is missing.
The documentation can not be built.
[root@tester~]#make && make install
完成安裝!
設置環境變量以便下一步安裝Tsung時使用
[root@tester~]#export PATH=$PATH:/usr/local/erlang/bin/
驗證erlang是否安裝成功
[root@tester~]#erl
顯示下面樣子結果說明安裝成功:
Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9 (abort with ^G)
1>
gnuplot 、perl5安裝:
方式一:
[root@tester~]#apt-get install perl5 gnuplot
方式二:
[root@tester~]#yum install perl5 gnuplot
方式三:(下載源碼包手動編譯安裝)
[root@tester~]#wget http://heanet.dl.sourceforge.net/project/gnuplot/gnuplot/4.4.1/gnuplot-4.4.1.tar.gz
perl包通常在系統安裝包里面都會有。
自己在網上下載安裝也可以,安裝不分先后。
如何驗證是否安裝成功?
安裝系統的時候,也有可能已經安裝過perl包 ,可以通過
[root@tester~]#perl –v
命令查看顯示perl 當前版本信息。
[root@tester~]#gnuplot
命令查看gnuplot 的安裝版本
Tsung安裝
到官網下載安裝包
http://tsung.erlang-projects.org/
[root@tester~]# wget http://tsung.erlang-projects.org/dist/tsung-1.4.2.tar.gz
解壓縮安裝包
[root@tester~]#chmod 755 tsung-1.4.2.tar.gz
[root@tester~]#tar –zvxf tsung-1.4.2.tar.gz
編譯安裝
[root@tester~]#cd tsung-1.4.2/
[root@tester~]#./configure --prefix=/usr/local/tsung
[root@tester~]#make
[root@tester~]#make install
驗證是否安裝成功,先做個軟連接方便使用tsung命令
[root@tester~]#ln -s /usr/local/tsung/bin/tsung /usr/bin/
[root@tester~]#tsung
使用Tsung注冊用戶
從tsung例子中拷貝一份注冊配置示例jabber_register.xml
[root@tester~]#cd /usr/local/tsung/share/doc/tsung/examples/
[root@tester~]#cp jabber_register.xml ~/test/
修改相關配置
[root@tester~]#vim tsung.xml
執行腳本
[root@tester~]#tsung –f tsung.xml start
查看服務端后台新建用戶
Openfire后台可以查看到用戶不斷的新建進去按 tsung1一直到tsung100000
生成HTML報表
[root@tester~]#cd ~/.tsung/log/20131106-1754/
[root@tester~]#/usr/local/tsung/lib/tsung/bin/tsung_stats.pl
把生成的日志目錄拷貝到windows系統使用IE打開。
使用Tsung並發訪問
從tsung/examples中拷貝一份jabber_roster.xml進行修改並執行
指定了最大用戶並發數2000個。
[root@tester~]#tsung -f jabber_roster.xml start
運行后發現如下問題:
該問題是由於jabber_roster.xml配置中用戶並發數超過了操作系統默認指定的最大進程數 d導致的。
修改操作系統最大進程數、最大文件打開數
查看系統最大進程數:
[root@tester~]#ulimit –a
編輯limits.conf (注意:修改前先備份原文件)
[root@tester~]#cp /etc/security/limits.conf /etc/security/limits.conf.old
[root@tester~]#vim /etc/security/limits.conf
添加下面配置
* soft nproc 11000
* hard nproc 11000
* soft nofile 8000
* hard nofile 8000
注:* 代表針對所有用戶,soft 代表軟設置,hard 代表硬設置,nproc代表最大進程數,nofile代表最大文件打開數。
保存后,不清楚怎么讓它生效,於是重啟了操作系統
系統啟動后,設置生效了。
[root@tester~]#ulimit –a
在配置文件中添加 maxusers指定最大用戶數
<clients>
<client host="localhost" use_controller_vm="true” maxusers="1000">
</client>
</clients>
<load>
<arrivalphase phase="1" duration="5" unit="minute">
<users maxnumber="1000" interarrival="0.1" unit="second"></users>
</arrivalphase>
</load>
具體配置說明查看后面配置說明
測試報告
執行腳本后,大概20分鍾后運行結束
、
余留的問題
C2S - RECV (1448627863): <message id='201' to='tsung25@client-host' type='chat'><body>vtglimieyhemzlxc</body></message>
C2S - SENT (1448627863): <message id="201" to="tsung1@127.0.0.1/tsung" from="tsung25@client-host" type="error"><error code="404" type="cancel"><remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></message>
發送消息到達不到 404錯誤
后續的研究發現該問題是因為配置文件中Options – domain的配置問題
該項的配置並不是隨意的填寫,應該填寫真實服務器中的域名xmpp.domain
測試場景腳本配置詳細分析
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<!-- loglevel日志級別,測試過程使用warning也就可以了-->
emergency
critical
error
warning
notice (default)
info
debug
<tsung loglevel="notice" version="1.0">
<!-- 客戶端配置-->
host : 配置客戶端地址
use_controller_vm : 是否使用虛擬控制器設置客戶端最大連接數
maxusers : 客戶端最大連接數
注: 如果use_controller_vm="false",那么每maxusers個連接后會創建一個新的erlangVM,
否則達到上限就不再創建連接,maxusers默認是800。
通常情況下我們會將use_controller_vm設置成true,然后設置maxusers來提高客戶端最大連接數。
但是,前提是要打開操作系統的limits-最大進程數(limits.conf中修改),大多操作系統默認最大進程數為1024。
<clients>
<client host="localhost" use_controller_vm="true" maxusers="10000"></client>
</clients>
<!-- 服務端配置 -->
<servers>
<server host="192.168.1.100" port="5222" type="tcp"></server>
</servers>
<!—性能監控 -->
<monitoring>
<monitor host="192.168.1.5" type="snmp">
<snmp version="v1" community="public" port="161">
<!-- cpu空閑率 -->
<oid name="cpu_free" value="1.3.6.1.4.1.2021.11.11.0" ></oid>
<!--Mem Used-->
<oid name="Mem_Used" value=".1.3.6.1.2.1.25.2.3.1.6.2" ></oid>
<!-- 統計IO讀,單位是blocks/s -->
<oid name="io_sent" value=".1.3.6.1.4.1.2021.11.5.0" ></oid>
<!-- 統計IO寫,單位是blocks/s -->
<oid name="io_receive" value=".1.3.6.1.4.1.2021.11.6.0" ></oid>
</snmp>
</monitor>
</monitoring>
<!-- 計划加載用戶-->
<arrivalphase> :階段相位,可配置多個階段
phase : 階段序號
duration : 加載時間數
unit : 時間單位
<users> : 用戶加載速度
interarrival/arrivalrate : 間隔interarrival unit加載一個用戶/間隔1 unit加載arrivalrate個用戶
unit : 時間單位
maxnumber : 用戶最大加載數
例:<arrivalphase phase="1" duration="20" unit="second">
<users maxnumber="1500" interarrival="0.1" unit="second"></users>
</arrivalphase>
<arrivalphase phase="2" duration="10" unit="second">
<users arrivalrate="15" unit="second"></users>
</arrivalphase>
<arrivalphase phase="3" duration="10" unit="minute">
<users maxnumber="2500" interarrival="2" unit="second"></users>
</arrivalphase>
上述例子中,運行測試以后,會在第一階段(20s)每間隔0.1s加載一個用戶,最大加載1500個用戶。
第二階段(10s)沒間隔1s加載15個用戶。
第三階段(10m)沒間隔2s加載1個用戶,最大加載數為2500。
3個階段是按順序加載的,總加載時間是 20s + 10s + 10m
注: 用戶被加載后會立即執行測試場景,並不是在加載全部用戶后才開始測試場景。
這在jabber服務端測試中,有涉及到用戶之間發送消息的請求時應該注意保持用戶在線,
否則將有可能部分用戶接收不到消息
-->
<load>
<arrivalphase phase="1" duration="10" unit="second">
<users interarrival="0.1" unit="second"></users>
</arrivalphase>
</load>
<!-- JABBER服務端配置參數-->
global_number : 這個暫時不是很明白做什么用,猜測是用戶保持同時在線的個數
userid_max : 可以加載的最大用戶數,其實是用戶最大ID數,前綴后面的ID
domain : 服務端的domain,並不是隨便配置的,如果隨便配置,做注冊、連接、登錄、roster不會有問題,
但是用戶之間發送消息的時候服務端會報404錯
username : 服務端用戶名前綴
passwd : 密碼前綴
-->
<options>
<option type="ts_jabber" name="global_number" value="50"></option>
<option type="ts_jabber" name="userid_max" value="100"></option>
<option type="ts_jabber" name="domain" value="PPT-20130725PQK"></option>
<option type="ts_jabber" name="username" value="tsung"></option>
<option type="ts_jabber" name="passwd" value="tsung"></option>
</options>
<!-- 測試場景-->
<sessions> : 可以同時配置多個測試場景
<session> : 測試場景
probability : 權重(用戶可能執行到的概率)
name : 場景名稱,任意寫
type : 類型
<transaction> 事務,事務中可以包含多個請求
name : 事務名稱,任意命名,該名稱會在報告圖表中以 ts_${name}的名稱用來命名各個事務的相應時間,吞吐率等
<request> : 請求,可以被包含在一個事務中也可以單獨出來,單獨出來的請求的響應時間以及吞吐量,在報表中將被一起統計到page中
<jabber> : 具體的請求內容
type : 請求類型
ack : 是否需要確認消息,有以下三種情況
local:一旦客戶端有接收到packet就當作該請求已經完成
no_ack:一旦客戶端消息發送出去就當作該請求已經完成
global:在發送消息前會等待所有用戶都連接上,這跟上面的<option global_number的配置是關聯在一起的
<thinktime> : 等待時間,也就是模擬用戶操作過程中,通常情況下的閑置時間,單位為:秒
比如,用戶做登錄操作--》修改心情,中間的等待時間就是thinktime
注: 配置多個測試場景的時候要注意probability權重的總和等於100。
一個用戶只能隨機執行一個測試場景,probability就是該場景被執行的概率,
比如說,有3個測試場景,權重分別20,50,30。有1000個用戶,最終測試場景將分別被約等於 200,500,300個用戶執行到,一個用戶只會執行一個場景。
-->
<sessions>
<session probability="100" name="jabber-example"
type="ts_jabber">
<request>
<jabber type="connect" ack="no_ack"></jabber>
</request>
<thinktime value="2"></thinktime>
<!-- 用戶驗證 -->
<transaction name="authenticate">
<request>
<jabber type="auth_get" ack="local"></jabber>
</request>
<request>
<jabber type="auth_set_plain" ack="local"></jabber>
</request>
</transaction>
<!-- 更新上線狀態 -->
<request>
<jabber type="presence:initial" ack="no_ack" />
</request>
<thinktime value="20"></thinktime>
<!-- 發送roster -->
<transaction name="roster">
<request>
<jabber type="iq:roster:get" ack="local"></jabber>
</request>
</transaction>
<thinktime value="30"></thinktime>
<!-- 任意對一個在線用戶發送聊天消息 -->
<transaction name="online">
<request>
<jabber type="chat" ack="no_ack" size="16"
destination="online">
</jabber>
</request>
</transaction>
<thinktime value="30"></thinktime>
<!-- 退出 -->
<transaction name="close">
<request>
<jabber type="close" ack="no_ack"></jabber>
</request>
</transaction>
</session>
</sessions>
</tsung>
其它
http://tsung.erlang-projects.org/user_manual/index.html
http://www.blogjava.net/duanzhimin528/archive/2010/09/01/330582.html
http://my.oschina.net/pblack/blog/97677、
http://www.verydemo.com/tag/?kw=Tsung&p=1
http://blog.csdn.net/blade2001/article/details/9094307
http://www.bbtang.info/579.html
