Tsung安裝與使用


 

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

每個包系統盤或者鏡像中都有。

安裝 erlanggnuplotperl5

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個測試場景,權重分別205030。有1000個用戶,最終測試場景將分別被約等於 200500300個用戶執行到,一個用戶只會執行一個場景。

        -->

       <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>







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM