測試場景腳本配置詳細分析
<?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>