壓力測試工具tsung用法簡介

jopen 10年前發布 | 15K 次閱讀 測試工具 Tsung

tsung是用erlang開發的一款簡單易用的壓力測試工具,可以生成成千上萬的用戶模擬對服務器進行訪問。目前對tsung的理解也僅限于會簡單的應用,其內部結構沒有深入研究過。

1、安裝

tsung 是用erlang編寫的,所以首先安裝erlang的運行環境。然后就是按照tsung的官網下載編譯tsung。需要注意的是,生成測試報告需要 gnuplot和perl的支持,其中perl需要安裝Template擴展。具體安裝過程請看相關手冊或者google之。

2、配置文件

默認情況下,tsung會加載配置文件

~/.tsung/tsung.xml

將tsung自帶的http的配置示例

/usr/share/doc/tsung/examples/http_simple.xml

復制到該位置,修改一下即可運行。一個最簡單的配置文件:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
  <clients>
    <client host="localhost" use_controller_vm="true" maxusers="100000"/>
  </clients>
<servers>
  <server host="172.16.33.203" port="10013" type="tcp"></server>
</servers>

  <monitoring>
    <monitor host="myserver" type="snmp"></monitor>
  </monitoring>

  <load>
  <arrivalphase phase="1" duration="1" unit="minute">
     <users interarrival="0.01" unit="second"></users>
  </arrivalphase>
  </load>

 <sessions>
  <session name="http-example" probability="100" type="ts_http">
    <request>
        <http url="/a.php" method="GET" version="1.1"></http>
    </request>
    <!--<thinktime value="1" random="true"></thinktime>-->
    <request>
        <http url="/b.php" method="GET" version="1.1"></http>
    </request>
  </session>
 </sessions>
</tsung>

clients:用戶產生的方式

servers:被測試的服務器

monitoring:通過一些協議如snmp監控服務器的狀態(本人沒有使用過)

load:壓力配置

sessions:用戶所產生的會話

運行命令

tsung start

壓力測試開始,tsung輸出一段提示,告知測試記錄的位置,可以使用命令

tsung status

查看tsung當前的狀態

3、壓力的生成原理

(本人不是太透徹,大家湊合看吧)

tsung 在運行時,可以由多個虛擬機組成,每個虛擬機可以模擬多個ip地址(測試負載均衡時),每個虛擬機下有很多用戶,每個用戶可以產生很多session,一個session由很多request組成,這是一個很典型的樹狀結構。tsung使用這個樹狀結構來生成壓力。

看client的配置,maxusers指明這個client機器上最多生成多少用戶,如果use_controller_vm為true的話,當用戶數達到maxusers,tsung會自動生成新的VM(好像需要登錄系統的ssh帳號)。

生成用戶之后,當然是讓這些用戶訪問被測試的服務器,訪問的負載由load段配置。訪問可以配置多個階段,在此建設只有一個階段。配置

 <users interarrival="0.01" unit="second"></users>
表示每0.01秒產生一個用戶,產生的用戶按照session的配置順序執行session中的request,如何計算RPS,有一個公式:

RPS = 每個session的請求數 / interarrival

以上面的配置為例,RPS = 2 / 0.01 == 200

負載的另外一種配置方式是用戶到達率,具體看官方的手冊。

4、生成測試報告

默認安裝時,perl文件/usr/lib/tsung/tsung_status.pl用來生成狀態報告。

進入測試日志的路徑,如/home/iamlaobie/.tsung/log/20110528-21:07,運行上面的腳本,運行完成之后,在該路徑下生成report.html,如果在linux上不方便查看,可將該路徑打包下載本地用瀏覽器打開report.html查看。

報告中的幾個相似概念:

request:類似用php函數file_get_contents請求一個url地址的相應時間

page:一組沒有間隔的request請求的時間總和,相當于打開一個頁面,除了加載頁面的html外,還要加載img、css、js等

session:一個用戶從第一個請求開始到最后一個請求結束的時間總和

5、其他

5.1、 tsung-recorder,通過它可以錄制用戶的訪問過程,然后用tsung回放,讓壓力測試更逼真。實際上recorder是一個http代理,啟動recorder后,將瀏覽器的代理指向它,默認端口是8090,用戶只需要用瀏覽器瀏覽被測試的服務器,tsung-recorder會將這個過程寫入到配置文件中。

5.2、添加請求的變量,在壓力測試的過程中,可能需要手機號,用戶ID、股票代碼之類的變量,tsung支持文件隨機讀取,可以將這些參數按照一定的規則寫入文件,在配置文件中定義讀取的規則,就能在請求時拿到文件的內容。定義一個文件服務:

 <options>
       <option name="file_server" id="file1" value="/tmp/x.txt"/>
    </options>
讀取,在session段中加入

 <setdynvars sourcetype="file" fileid="file1" delimiter=";" order="random">
               <var name="username" />

  </setdynvars>

<request>
<http url="/b.php?username=%%_username%%" method="GET" version="1.1"></http>
</request>

除了從文件讀取,也可以隨機產生

      <setdynvars sourcetype="random_string" length="13">
        <var name="rndstring1" />
      </setdynvars>

      <setdynvars sourcetype="random_number" start="3" end="32">
        <var name="rndint" />
      </setdynvars>

原文地址:http://tiandiou.blog.163.com/blog/static/2355668220115392725727/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!