壓力測試工具tsung用法簡介

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

一、安裝

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

二、配置文件

默認狀況下,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當前的狀態

三、壓力的生成原理

(本人不是太透徹,你們湊合看吧)

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

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

四、生成測試報告

默認安裝時,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.一、tsung-recorder,經過它能夠錄製用戶的訪問過程,而後用tsung回放,讓壓力測試更逼真。實際上recorder是一個http代理,啓動recorder後,將瀏覽器的代理指向它,默認端口是8090,用戶只須要用瀏覽器瀏覽被測試的服務器,tsung-recorder會將這個過程寫入到配置文件中。

5.二、添加請求的變量,在壓力測試的過程當中,可能須要手機號,用戶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>php

相關文章
相關標籤/搜索