SIPp腳本編寫方法基礎(chǔ)m_第1頁(yè)
SIPp腳本編寫方法基礎(chǔ)m_第2頁(yè)
SIPp腳本編寫方法基礎(chǔ)m_第3頁(yè)
SIPp腳本編寫方法基礎(chǔ)m_第4頁(yè)
SIPp腳本編寫方法基礎(chǔ)m_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SIPp腳本編寫方法基礎(chǔ)作者王偉版本號(hào)V1.1目錄SIPp腳本編寫方法入門錯(cuò)誤!未指定書簽。1.腳本格式錯(cuò)誤!未指定書簽。1.1. 基于XML進(jìn)行擴(kuò)展 錯(cuò)誤!未指定書簽。1.2. DTD擴(kuò)展語(yǔ)法規(guī)則錯(cuò)誤!未指定書簽。1.3. 腳本結(jié)構(gòu)錯(cuò)誤!未指定書簽。1.4. 注釋2. 腳本類型錯(cuò)誤!未指定書簽。2.1. UAC錯(cuò)誤!未指定書簽2.2. UAS2.3. 3PCC(三方通話)錯(cuò)誤!未指定書簽 ,錯(cuò)誤!未指定書簽2.4. OCC (Out-of-call)錯(cuò)誤!未指定書簽3.1.常用命令3.2.常用屬性列表.3.3.正則表達(dá)式.變量與關(guān)鍵字4.1.關(guān)鍵字的使用.4.2.變量定義與使用4.命令與屬性

2、4.3.鑒權(quán)錯(cuò)誤!未指定書簽5.3.跳轉(zhuǎn)和循環(huán).5.4.概率分支.6.文件引用6.1.外部文件格式6.2.引用方法.6.3.文件索引.7.腳本中的命令操作.7.1.內(nèi)部命令.7.2.外部命令7.3.媒體命令.5.分支和跳轉(zhuǎn)5.1.標(biāo)簽.5.2.條件判斷3.錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。 .錯(cuò)誤!未指定書簽。 .錯(cuò)誤!未指定書簽。 錯(cuò)誤!未定義書簽。 .錯(cuò)誤!未指定書簽。 ,錯(cuò)誤!未指定書簽。錯(cuò)誤!未指定書簽錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。.錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。 .錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。 ,錯(cuò)誤!未指定書簽。

3、 錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。 錯(cuò)誤!未指定書簽。8.附錄錯(cuò)誤!未指定書簽。修訂記錄 錯(cuò)誤!未指定書簽。1. 腳本格式1.1. 基于XML進(jìn)行擴(kuò)展SIPp的測(cè)試腳本遵循標(biāo)準(zhǔn)的XML V1.0版本的語(yǔ)法規(guī)范,XML即“可擴(kuò)展 標(biāo)記語(yǔ)言” eXtensible Markup Language的縮寫,W3C組織與1998年發(fā)布XML 1.0規(guī)范。1.2. DTD擴(kuò)展語(yǔ)法規(guī)則SIPp的執(zhí)行目錄中,存在一個(gè)sipp.dtd文件。該文件為標(biāo)準(zhǔn)的xml擴(kuò)展語(yǔ)法 規(guī)則,在該文件中,對(duì)send recv、pause等元素增加了定義,包括其屬性列表 等內(nèi)容,可作為腳本文件格式的校驗(yàn)。1.3. 腳本結(jié)構(gòu)一

4、個(gè)標(biāo)準(zhǔn)的SIPp腳本,文件起始應(yīng)為通用的xml前導(dǎo)區(qū)和DTD文件定義區(qū) 如圖所示:接下來(lái)使用scenario和/scenario包括的部分,即為腳本的正文部分。sipp 腳本正文部分,包含如下幾個(gè)區(qū)域:1. 初始化區(qū)在初始化區(qū)域中,通常用來(lái)進(jìn)行全局變量的定義和賦值等操作,在腳 本未進(jìn)行邏輯流程前,預(yù)先完成初始化動(dòng)作。初始化區(qū)是在腳本正文的最開始,通過(guò)使用命令init和/init,并在其之間插入一些nop和label命令即可實(shí)現(xiàn),在初始場(chǎng)景中的變量, 僅用于全局變量,并不會(huì)應(yīng)用于呼叫。例如下圖中,在初始化區(qū)對(duì) THINKTIME 進(jìn)行賦值:2. 邏輯執(zhí)行區(qū)邏輯執(zhí)行區(qū)中包括了業(yè)務(wù)流程的相關(guān)內(nèi)容,比

5、如接收消息、發(fā)送消 息、暫停時(shí)長(zhǎng)、分支判斷、媒體播放、內(nèi)外部命令執(zhí)行等操作。邏輯執(zhí)行區(qū)是腳本的最關(guān)鍵部分,編寫 sipp 腳本,主要也就是針對(duì) 該部分進(jìn)行編寫和調(diào)試。3. 變量抑制區(qū) 該部分是為了避免在腳本邏輯區(qū)定義了大量的變量,但實(shí)際并未使用 導(dǎo)致運(yùn)行時(shí)報(bào)錯(cuò)無(wú)法執(zhí)行的問題,不論定義了多少變量,這些變量有無(wú) 被使用,只需要添加進(jìn)變量抑制區(qū)的列表中,腳本均可正常執(zhí)行。該部 分僅有一個(gè)命令 <Reference /> , variables 屬性為所需抑制的變量列 表。如下圖所示:4. 定時(shí)器自定義區(qū)該區(qū)域主要作用為:針對(duì)消息響應(yīng)時(shí)長(zhǎng)(ResponseTime以及呼叫持續(xù)時(shí)長(zhǎng)( Cal

6、lLength )的 Timer 進(jìn)行自定義間隔的配置,以獲取所需的 顯示范圍,例如自定義 timer 配置為:則在 sipp 運(yùn)行時(shí),查看運(yùn)行統(tǒng)計(jì)界面呈現(xiàn)如下:1.4. 注釋sipp腳本注釋的語(yǔ)法格式為<!->xxx<->,支持多行注釋,如:2. 腳本類型SIPp腳本根據(jù)使用場(chǎng)景不同,主要分為 UAC、UAS、3PCC和OCC4種類 型,每種類型均有其特定的使用方式,內(nèi)部邏輯也有所不同。2.1. UAC顧名思義,UAC類型的腳本主要是模擬sip會(huì)話中的UAC側(cè),即負(fù)責(zé)發(fā)起 會(huì)話的 client 端。如注冊(cè)客戶端、主叫用戶、訂閱者等。通常的 UAC 腳本邏輯 區(qū)會(huì)以se

7、nd作為業(yè)務(wù)流程的起始。UAC腳本一旦啟動(dòng),如果不設(shè)置起始暫停時(shí) 長(zhǎng)的參數(shù),通常會(huì)立即開始執(zhí)行。2.2. UASUAS與UAC相對(duì),主要模擬sip會(huì)話的UAS側(cè),啟動(dòng)后即進(jìn)入被動(dòng)接收狀 態(tài),通常作為server端使用,如注冊(cè)服務(wù)器、被叫用戶、通知者、業(yè)務(wù)網(wǎng)關(guān)等。 通常的UAS腳本邏輯區(qū)會(huì)以recv作為業(yè)務(wù)流程的起始。UAS腳本啟動(dòng)后,即綁 定相關(guān)本地socket,進(jìn)入接收消息的狀態(tài)。2.3.3PCC(三方通話)SIPp工具允許多個(gè)腳本實(shí)例間進(jìn)行交互,完成較為復(fù)雜的業(yè)務(wù)流程。如三 方通話等業(yè)務(wù),因此該種腳本在普通腳本的基礎(chǔ)上,更多地使用內(nèi)部 cmd 交互 命令,如recvcmd、sendcmd等

8、在不同腳本間傳遞會(huì)話參數(shù),配合完成復(fù)雜流程 的測(cè)試實(shí)現(xiàn)。sipp還提供了擴(kuò)展的3pcc模式,支持master和 slave的腳本角色。 該類型的腳本編寫和調(diào)試較為復(fù)雜,本文檔中不再贅述,如有興趣可以翻閱 sipp 的使用手冊(cè)等文檔,其中有詳細(xì)說(shuō)明。2.4. OCC(Out-of-call)OCC (Out-of-call)腳本作為特殊類型的腳本,通常不會(huì)單獨(dú)使用,而是與 UAC 腳本配合使用(也只能與 UAC 腳本配合, UAS 等類型腳本無(wú)法支持 -occsn 等執(zhí)行命令)。主要作用為擴(kuò)展 UAC 腳本的適用范圍,使 UAC 腳本能夠在接收 到不同會(huì)話內(nèi)的非預(yù)期消息時(shí),不至于直接丟棄。如注冊(cè)

9、客戶端可能會(huì)遇到接收 到通知NOTIFY的消息,此時(shí)就需要在運(yùn)行register腳本的時(shí)候適用-oocsn或- oocsf參數(shù),配合00C腳本,實(shí)現(xiàn)對(duì)NOTIFY消息返回200的操作。3. 命令與屬性3.1. 常用命令SIPp工具提供的命令相當(dāng)豐富,包括消息操作命令、變量操作、正則表達(dá) 式、賦值和判斷、內(nèi)部命令、外部命令、日志操作、媒體命令等多種,在一般的 使用場(chǎng)景下,通常根據(jù)不同的動(dòng)作,來(lái)進(jìn)行命令的使用。下面針對(duì)比較常用的場(chǎng) 景,如發(fā)送消息、接收消息、媒體播放等進(jìn)行描述:(更詳細(xì)的命令功能及示 例,可以翻閱sipp的使用手冊(cè)等文檔)一個(gè)最基本的sipp腳本,通常包含了 send recv、n

10、op、pause這幾個(gè)命令。 其中send為發(fā)送sip消息,recv為接收sip消息,nop為處理非業(yè)務(wù)的邏輯, pause為提供暫停時(shí)長(zhǎng)。例如一個(gè)基本語(yǔ)音呼叫的主叫側(cè)腳本:首先使用send命令發(fā)送INVITE消息,注意在發(fā)送消息時(shí),sip消息所有內(nèi) 容均包含在標(biāo)準(zhǔn)的 xml 數(shù)據(jù)格式 CDATA 內(nèi), CDATA 的語(yǔ)法格式請(qǐng)格外注意,避免因?yàn)檎Z(yǔ)法錯(cuò)誤導(dǎo)致無(wú)法正確發(fā)送。(注:在構(gòu)造發(fā)送的 INVITE 消息時(shí),為實(shí)現(xiàn)批量發(fā)送,使用到了大量的變 量和關(guān)鍵字,在后續(xù)內(nèi)容中會(huì)詳細(xì)加以說(shuō)明。)發(fā)送出消息后,還需要進(jìn)行后續(xù)響應(yīng)消息的接收,請(qǐng)注意由于sip協(xié)議存在臨時(shí)響應(yīng)和最終響應(yīng)兩種,而 1xx 的響

11、應(yīng)在業(yè)務(wù)中可能存在,也可能不存在,因 此需要采用可選屬性加以區(qū)別。(注:optional= “true”即表示該條消息為可選接收,如果沒有收到,也不 會(huì)影響后續(xù)消息的接收及處理,如 100/183/180。而 200為必選接收消息,只有 當(dāng)接收到該消息后,腳本才會(huì)繼續(xù)后續(xù)流程,因此沒有 optional 參數(shù)。)在接收到200 ok消息,并發(fā)送出ACK后,語(yǔ)音通話接續(xù)流程即完成,此時(shí) 根據(jù)實(shí)際業(yè)務(wù)流程,需要進(jìn)行語(yǔ)音媒體的傳輸,因此腳本在這里需要增加一個(gè) nop 命令,用于媒體的播放(注:nop命令可以用于任何非消息處理的位置,在nop命令中增加action命令,然后即可執(zhí)行類似媒體處理、變量操

12、作、條件判斷等動(dòng)作。)在執(zhí)行媒體播放命令后,由于sipp在執(zhí)行nop相關(guān)命令后,不會(huì)等待命令 執(zhí)行完畢而是立即執(zhí)行后續(xù)腳本內(nèi)容,因此為保證媒體播放正常,我們還需要根 據(jù)實(shí)際要求,將腳本暫停一段時(shí)間,以確保流程模擬正確。(注:millise neo nds屬性可以自定義暫停的時(shí)長(zhǎng),單位為 ms,如果該屬性 為空,則可以通過(guò)在執(zhí)行命令中增加“ -d 10000'來(lái)指定暫停時(shí)長(zhǎng)) 3.2.常用屬性列表命令屬性描述示例<send>用于消息的發(fā)送,常用參數(shù)包括<send retrans= “ 500 ” lost="10"retrans : udp報(bào)文重傳時(shí)

13、長(zhǎng);start_txn= “ invite " ack_txn=lost :丟包率;“ invite" >start_tx n:啟動(dòng)響應(yīng)時(shí)間記錄ack_txn :記錄接收響應(yīng)時(shí)間,與start_tx n匹配</se nd><recv>:用于消息的接收,常用參數(shù)包括<recv response= " 100" optional=response :期望收到的響應(yīng)消息“ true ” >request :期望收到的請(qǐng)求消息</recv>optio nal :可選接收消息,值為<recv reques

14、t= “ ACK"true 或 globaltimeout="18000"timeout :超時(shí)時(shí)長(zhǎng),默認(rèn)超時(shí)后直on timeout= “ 5">接END</recv>on timeout :超時(shí)后的跳轉(zhuǎn)處理<recv request="MESSAGE|PUBLISH"action :收到消息后米取的處理動(dòng)regexp_match="true">作regexp match :檢查收到消息是否匹配預(yù)期</recv><pause>用于設(shè)置暫停時(shí)間,常用參數(shù)包括&l

15、t;pause milliseco nds="5000"/>milliseco nds:設(shè)置暫停時(shí)長(zhǎng),單<pause variable="1" />位ms<pause distributi on="u niform"variable:設(shè)置當(dāng)變量出現(xiàn)時(shí)暫停min="2000"distribution:使用GSL定義或分max="5000"/>布模型定義呼叫時(shí)長(zhǎng)<pausedistributio n="exp onen tial"mea n=&

16、quot;900000"/<nop>用于非協(xié)議消息處理的命令執(zhí)行,<n op>常用參數(shù)包括<acti on>action :執(zhí)行命令動(dòng)作<execPlay pcap audio="pcap/g711a.pcap"/></act ion></n op><se ndCmd><se ndCmd> <!CDATA Call-ID: call_id$1></se ndCmd><se ndCmd dest="s1">用于兩個(gè)

17、SIPp頭例間的父互發(fā)送, 常用于3PCC場(chǎng)景,常用參數(shù)包括<!CDATA> :用于3PCC場(chǎng)景的參數(shù)傳遞dest :僅用于擴(kuò)展模式 3PCC<recvCmd>用于兩個(gè)SIPp實(shí)例間的交互接收, 常用于3PCC場(chǎng)景,常用參數(shù)包括 action :接收到命令時(shí)的執(zhí)行命令 動(dòng)作src :僅用于擴(kuò)展模式 3PCC<recvCmd><acti on<ereg regexp="C onten t-Type:.*" searchn=" msg"assig n_to="2"/></act

18、ion></recvCmd><se ndCmd src="s2">通用屬性:屬性名描述示例start_rtd啟動(dòng)響應(yīng)定時(shí)器<se nd start_rtd="i nvite“ >rtd停止響應(yīng)定時(shí)器<recv response=“200” rtd= “ invite“ />repeat_rtd重復(fù)啟用響應(yīng)定時(shí)器<recv response=“407” rtd="invite"repeat_rtd="true“ />crlf運(yùn)行界面增加回車換行<se nd crlf

19、="true">n ext跳轉(zhuǎn)任意label<recv resp on se="403" optio nal="true" n ext= “ reg_fail"></recv>test與next 一起使用,設(shè)置跳 轉(zhuǎn)條件<se nd next="6" test=“ flag1">chanee與test、next 一起使用, 當(dāng)test結(jié)果有值時(shí),則概 率跳轉(zhuǎn)<recv resp on se="403" optio nal=&qu

20、ot;true" next= “ reg_fail ” test= “ flag“ cha nce="0.90"></recv>coun ter計(jì)數(shù)器累加1<recv response=“200” counter=“ SuccessCALL">3.3.正則表達(dá)式正則表達(dá)式作為sipp中極為重要的功能,在各個(gè)場(chǎng)景下應(yīng)用廣泛,最常見 的是通過(guò)正則表達(dá)式,獲取接收消息中某個(gè)參數(shù),并將該參數(shù)賦給變量,用于后 續(xù)流程的使用。正則表達(dá)式的使用語(yǔ)法如下圖所示:正則表達(dá)式的命令為vereg />regexp屬性為需要匹配的表達(dá)式內(nèi)容,

21、其中使用”()”包括起來(lái)的部分,為匹 配項(xiàng),可以賦給變量;search_in屬性為設(shè)置本次查詢的方式,sipp支持3種正則匹配的方式,分別 為:1. 頭域查詢匹配當(dāng)searchn=”hdr”時(shí),表示正則按照頭域匹配,必須包含 header參數(shù), 給出需要查詢的頭域名稱,如 header=”From”。sipp會(huì)在指定的頭域中進(jìn)行匹 配。注:start-line的匹配也是用頭域匹配方式。2消息查詢匹配當(dāng)searchn=”msg”時(shí),表示正則根據(jù)整個(gè)消息內(nèi)容進(jìn)行匹配,通常在需 要匹配SDP內(nèi)容時(shí)會(huì)用到。3.變量查詢匹配當(dāng)search_in”var”時(shí),表示正則按照變量進(jìn)行匹配,必須配置variab

22、le參數(shù),給出需要匹配的變量名稱,女口variable=”header_to_tag。4.變量與關(guān)鍵字4.1.關(guān)鍵字的使用sipp中定義了大量的關(guān)鍵字,涉及到網(wǎng)絡(luò)參數(shù)、sip會(huì)話參數(shù)和媒體參數(shù)等等,需要在編寫腳本時(shí)加以注意。關(guān)鍵字的引用格式為keyword,例如locao_ip、call_id等。下表列出了常用的關(guān)鍵字:關(guān)鍵字描述備注service由參數(shù)-s傳遞,般用來(lái)指疋單丨主被叫remote_ip遠(yuǎn)端設(shè)備地址remote_port遠(yuǎn)端設(shè)備端口??梢栽谀_本中使用偏移量,女口remote port+3tra nsport指定傳輸層協(xié)議,UDP/TCP由參數(shù)-t決定local_ip主機(jī)本地地址,

23、可以由參數(shù)-i指定local_port由系統(tǒng)隨機(jī)分配可由-p指定,可以在腳本中使用偏移量,local_port+3le nsdp長(zhǎng)度,用于Content-Length頭域,由sipp自動(dòng)生成或者手動(dòng)指疋,可以添加偏移量,如len+3call_ nu mber呼叫索引,從1開始,每增加一個(gè)呼叫遞增1cseq初始值為1 ,可以使用參數(shù)-base cseq手動(dòng) 指定初始值。media_ip本地媒體流ip,可以由-mi參數(shù)指定media_port本地媒體流端口,可由-mp指定,可以設(shè)置偏 移量media_port+3auto_media_port自動(dòng)指疋媒體流端口,僅用于pcap。該參數(shù)使多個(gè)呼叫的音

24、頻和視頻端口從-mp指疋的端口開始,并給每個(gè)新的呼叫分配端口。SIPp默認(rèn)支持10000個(gè)rtp 流并發(fā)last_*此關(guān)鍵字用于從接收的上一個(gè)sip消息中提取指定頭域(如果存在)的值。比如last_to 則表示從接收的上一個(gè) sip消息中 提取To域的消息保存到last_to中并應(yīng)用。fieldO-n file=<file name line=<nu mber>從外部文件csv加載值,file表示選擇從命令行中指定的csv文件的一個(gè)文件作為外部 文件;line定義選擇的外部文件的起始行, field 選擇字段filename=<filename把指定的文件中內(nèi)容全部插入

25、到sip消息中。由于空格符,回車符及換行符不被某些關(guān)鍵字識(shí) 另所以插入的文件需要被精確地編輯成你想 要的格式才行,否則會(huì)有亂碼。timestamp當(dāng)前時(shí)間戳,與錯(cuò)誤日志的時(shí)間戳格式一樣last_message上一個(gè)收到的消息authe nticati on用于認(rèn)證頭(authentication head) ,這個(gè)關(guān)鍵字可以使用參數(shù),書寫格式為:authe nticatio n user name=myuser name password=mypassword,如果沒有指定用戶名(username),則需使用命令行參數(shù) -au或者 -s 指定;如果沒有指定密碼( password ), 則需使

26、用命令行參數(shù)-ap指疋pid指疋sipp 的pid,即進(jìn)程號(hào)routes如果在recv 命令中已設(shè)置"rrs ”屬性為true,貝URecord-Route頭被存儲(chǔ)在關(guān)鍵字route中,可使用routes 調(diào)用。n ext_url如果在recv 命令中已設(shè)置"rrs ”屬性為 true,則n ext_url 中包含 Con tact頭中的內(nèi)容bra nch生成一個(gè)由(z9hG4bK) + call number + message索引組成的 branch id到腳本中。如果你想要使用與之前的消息一樣的branchid,你可以使用偏移量指定,如branch-Nmsg_ in

27、dex在腳本中提供消息號(hào)clock_tick在消息中包含sipp的內(nèi)部時(shí)鐘sipp_vers ion在消息中包含sipp的版本fill使用字符填充消息users如果在命令行中指定了 -users參數(shù),則這個(gè) 關(guān)鍵字表示當(dāng)前已經(jīng)運(yùn)行的用戶的數(shù)量userid如果在命令行中指定了 -users參數(shù),則這個(gè) 關(guān)鍵字表示當(dāng)前正在運(yùn)行的用戶的id (范圍為 0 到 users-1 )42變量定義與使用sipp的腳本中,支持雙精度浮點(diǎn)型變量和字符串變量?jī)煞N變量類型.1.浮點(diǎn)型變量針對(duì)浮點(diǎn)型變量的操作命令主要有 assgin (賦值)、sample (統(tǒng)計(jì)分 布)和todouble (強(qiáng)制類型轉(zhuǎn)換),以及加減

28、乘除等簡(jiǎn)單算術(shù)運(yùn)算,舉例 如下:<n op><acti on><!將變量sum賦值為0-><assig n assig n_to="sum" value="0" /><!-將sum加2,然后再賦值給sum-><add assig n_to="sum" value="2" /><!-將sum減3,然后再賦值給sum ->vsubtract assig n_to="sum" value="3" /

29、><!-將sum乘以4,然后再賦值給sum -><multiply assign_to="sum" value="4" /><!-將sum除以5,然后再賦值給sum此時(shí)sum=-0.8 -><divide assign_to="sum" value="5" /></action></nop>浮點(diǎn)型變量還支持變量比較測(cè)試功能,該部分在分支一節(jié)中會(huì)重點(diǎn)描 述。2. 字符串變量可以使用命令vassignstr>&J建字符串變量,該

30、命令有兩個(gè)參數(shù)“ assign_tO'和“ value”,例如:vnop>vaction>v ! 將外部文件的 field0 的值,賦給字符串變量 str ->vassignstr assign_to="str" value="field0" />v/action>v/nop>字符串變量支持比較操作,命令為<strcmp>,其對(duì)字符串比較的值是 一個(gè)小于,等于,或大于 0 的雙精度整型值。通常該功能用在對(duì)正則表 達(dá)式提取結(jié)果的操作,以及從外部文件獲取值的操作中,例如:vnop>vaction&

31、gt;<!將變量strvar與字符串”Hello”進(jìn)行比較,結(jié)果賦值給浮點(diǎn)型變量result ->vstrcmp assign_to="result" variable="strvar" value="Hello" /> v/action>v/nop>4.3. 鑒權(quán)在sipp的關(guān)鍵字和變量使用中,有一類特殊的變量需要重點(diǎn)說(shuō)明,那就是 鑒權(quán)。sipp支持標(biāo)準(zhǔn)的Digest和AKA兩種鑒權(quán)方法。具體的使用方法如下:1. 在接收到 401或 407響應(yīng)時(shí),如果該流程需要鑒權(quán),則需要在 recv 命令中增加屬性

32、auth=”true”, sipp 會(huì)記錄該消息中鑒權(quán)頭域的相關(guān) 值。2. 隨后在發(fā)送的第二條請(qǐng)求消息中,使用authe nticatio n關(guān)鍵字,指定 用戶名及密碼(Digest方式)或 aka_K、aka_OP、aka_AMF(AKA),sipp將自動(dòng)計(jì)算出response并構(gòu)造相關(guān)頭域內(nèi)容。例 如:3. 還可以通過(guò)在外部文件中某一列,配置 authentication username=1001 password=1001, 然后在消息中使用 fieldN 引用, 來(lái)實(shí)現(xiàn)不同用戶的鑒權(quán)過(guò)程。4. sipp腳本中還支持對(duì)鑒權(quán)的respo nse結(jié)果進(jìn)行校驗(yàn),該操作使用 verifyaut

33、h 命令來(lái)完成,并將檢查結(jié)果賦值給一個(gè)布爾變量中。例 如:<lookup assign_to="line" file="users.conf" key="$username" /> <verifyauth assign_to="authvalid" username="field0 line="$line"" password="field3 line="$line"" />5. 分支和跳轉(zhuǎn)5.1. 標(biāo)簽sipp

34、 腳本支持自定義標(biāo)簽操作,因此可以通過(guò) next 、 jump 等命令,實(shí) 現(xiàn)對(duì)流程邏輯的分支和跳轉(zhuǎn)功能,類似 C語(yǔ)言中的goto。標(biāo)簽的定義語(yǔ)法格 式如下:<label id= ”err_ack ” />其中 id 屬性值為該標(biāo)簽的標(biāo)識(shí),可以通過(guò) next 屬性進(jìn)行標(biāo)簽之間的跳 轉(zhuǎn),例如:在例子中, recv 命令使用了 next ,即如果收到了 486響應(yīng),則直接跳轉(zhuǎn)至id 為 err_ack 的 label 處。5.2. 條件判斷sipp 支持通過(guò)變量測(cè)試,來(lái)進(jìn)行某些條件的判斷,繼而執(zhí)行相關(guān)的操作,類似于開發(fā)語(yǔ)言中的ifelse語(yǔ)法,變量測(cè)試的動(dòng)作命令為“ test,含有四個(gè)

35、參數(shù): variable , value , assign_to , compare 。variable 和 value 的比較的結(jié)果,通過(guò) assgin_to 賦給某一變量,值為 1 或0。compare為比較的操作方法,一共有 6種,分別為:equalnot_equalgreater_thanless_thangreater_than_equalless_than_equal舉例如下:<nop><action><test assign_to="result" variable="st" compare="les

36、s_than"value="10" /></action></nop>上述語(yǔ)句中,變量 st 與10進(jìn)行比較,如果小于 10,則 result = 1, 否則 result = 0。5.3. 跳轉(zhuǎn)和循環(huán)sipp 腳本的正常執(zhí)行流程為順序依次執(zhí)行相關(guān)語(yǔ)句,但是在某些場(chǎng)景下需 要非線性地執(zhí)行,例如收到錯(cuò)誤消息,則跳轉(zhuǎn)至錯(cuò)誤處理等,就需要用到分支功 能。結(jié)合上文內(nèi)容可知, sipp 的分支功能時(shí)通過(guò)標(biāo)簽和跳轉(zhuǎn)命令來(lái)實(shí)現(xiàn)的。在任意一個(gè)動(dòng)作命令之后添加一個(gè) next= ” label_id ”的參數(shù),當(dāng)腳本執(zhí)行完這個(gè)動(dòng)作后就會(huì)跳到指定標(biāo)號(hào)處繼續(xù)

37、往下執(zhí)行,另外,如果在 next 參數(shù)后再 添加一個(gè)test= ” m”參數(shù),腳本僅在變量$m為真時(shí)才會(huì)跳到指定標(biāo)號(hào),這個(gè) 特性結(jié)合條件判斷,可以用來(lái)實(shí)現(xiàn)某些特殊要求。例如:上述例子為注冊(cè)服務(wù)器部分腳本,實(shí)現(xiàn)的效果是:當(dāng)接收到 REGISTE消息 后,通過(guò)正則表達(dá)式獲取 Expires 頭域的值,并將其與 0 比較,如果相等,則表 示該消息為注銷請(qǐng)求,result2=1。nop命令行中,判斷如果result2=1,這跳轉(zhuǎn) 至 deregister 標(biāo)簽,進(jìn)行注銷流程的處理。(注:通過(guò)正則表達(dá)式匹配而獲取到的值,均為字符串變量,因此無(wú)法直接 與數(shù)值 0 進(jìn)行比較,而是通過(guò) strcmp 命令進(jìn)行

38、字符串比較,將此結(jié)果賦給 result ,再對(duì) result 和 0 進(jìn)行二次比較判斷,最終獲得結(jié)果。)5.4. 概率分支為了更加符合真實(shí)測(cè)試環(huán)境的業(yè)務(wù)流程, sipp 還提供了概率分支功能,即 通過(guò)在 next 屬性后,增加 chance 屬性,并配置 0-1 之間的數(shù)值,模擬幾率跳轉(zhuǎn) 分支動(dòng)作。例如:當(dāng) sipp 腳本執(zhí)行到該段時(shí),有 50%的幾率會(huì)跳轉(zhuǎn)至 401 標(biāo)簽處,緊接著會(huì) 有30%勺幾率跳轉(zhuǎn)至ENDS簽。(注:1. 由于 chance 屬性必須與 test 配對(duì)使用,因此如果不需判斷直接跳 轉(zhuǎn),可以配置 test= ” 1”,類似于 if True ,即始終執(zhí)行。2. 配置 ch

39、ance 時(shí)必須注意,該值僅為當(dāng)前所有會(huì)話的幾率,即如例子 中配置的數(shù)值,則會(huì)有 50%的會(huì)話跳轉(zhuǎn)至 401 標(biāo)簽, 15%的會(huì)話跳轉(zhuǎn) 至END標(biāo)簽,65%勺會(huì)話順序線性執(zhí)行。)6. 文件引用6.1. 外部文件格式sipp 腳本支持通過(guò)引用外部文件的方式,導(dǎo)入變量?jī)?nèi)容以供使用。外部文件的后綴名為.csv或.conf,可以在命令行使用“ -inf文件名”參數(shù)來(lái)引入變量到腳本中。文件的第一行須申明變量的讀取方式是順序讀?。⊿EQUENTIAL還是隨機(jī)讀取(RANDOM還是基于用戶的方式讀?。║SER 。每一行對(duì)應(yīng)一個(gè)呼 叫,使用“ ; ”分隔符分隔每一項(xiàng)數(shù)據(jù),分開的項(xiàng)在腳本中作為變量名 filed

40、0,field1,?fieldn 來(lái)引用。例如:SEQUENTIALSarah;sipphone32Bob;sipphone12Fred;sipphone94 該文件中的行會(huì)被按順序讀取,第一個(gè)呼叫第一行,第二個(gè)呼叫第二行。在 腳本中的任何地方只要出現(xiàn)了關(guān)鍵詞 field0 ,根據(jù)第幾個(gè)呼叫決定,這個(gè)關(guān)鍵 詞就會(huì)被替換為 Sarah 或者 Bob 或者 Fred ,field1 也是類似。如果達(dá)到了 文件末尾則再重新開始,一直循環(huán),文件的大小沒有限制。在實(shí)際使用中,也可以使用參數(shù)使得不從第一行開始,例如從第二行開始: field0 line=1另外,還可以使用不止一個(gè)外部文件來(lái)引入變量,這在測(cè)

41、試一些場(chǎng)景是很有 用的,比如要做一個(gè)測(cè)試主叫號(hào)碼是按順序的但是被叫是隨機(jī)的時(shí)候,就可以用 一個(gè)第一行為順序的 caller.csv 文件和一個(gè)第一行為隨機(jī)的 callee.csv 文件 來(lái)實(shí)現(xiàn)了。例如:INVITE sip:field0 file="callee.csv" SIP/2.0From: sipp user <field0 file="caller.csv">tag=pidSIPpTag00call_numberTo: sut user <field0 file="callee.csv"> 由于在數(shù)據(jù)

42、較多時(shí),編輯和使用均不方便, sipp 還支持對(duì)外部文件的格式 化定義,然后在程序中自動(dòng)根據(jù)規(guī)則生成相應(yīng)的數(shù)據(jù)。(該部分內(nèi)容較多,詳見 sipp 使用手冊(cè))6.2. 引用方法sipp 腳本中使用外部文件,常見的場(chǎng)景有兩種:1. 利用外部文件引入 field 變量,構(gòu)造相應(yīng)的發(fā)送消息體 例如在主叫用戶的腳本中,可以通過(guò)引用 user.csv 文件中的field0 、field1 ,分別對(duì)應(yīng)主叫號(hào)碼和被叫號(hào)碼,構(gòu)造 From 頭域和 To 頭域。2. 通過(guò)查找外部文件,獲取對(duì)應(yīng)的行號(hào),隨后進(jìn)行相關(guān)處理 例如,在針對(duì)不同的被叫號(hào)碼,進(jìn)行用戶忙、無(wú)響應(yīng)、前轉(zhuǎn)等業(yè)務(wù)時(shí), 可以通過(guò)事先配置 forward

43、_users.conf 文件,在其中針對(duì)不同被叫號(hào)碼, 分別設(shè)置若干列,對(duì)應(yīng)不同的值,并在被叫用戶的腳本中,使用正則表達(dá)式 獲取到被叫號(hào)碼,再使用 lookup 命令查詢 forward_users.conf 文件,匹配 當(dāng)前用戶號(hào)碼處于第幾行,并讀取改行的 field1 的值,然后通過(guò)變量測(cè) 試,跳轉(zhuǎn)不同的處理分支。6.3. 文件索引 在針對(duì)外部文件進(jìn)行查找命令時(shí),必須先對(duì)該文件生成索引,具體方法 為再執(zhí)行 sipp 腳本的命令中,使用 -infindex 參數(shù)對(duì)引入的文件生成索 引,參數(shù)值為該文件的文件名,如: -infindex forward_user.conf 0 。注:在通常情況下,文件的索引值均設(shè)置為從 0 開始。7. 腳本中的命令操作7.1. 內(nèi)部命令sipp 腳本支持的內(nèi)部命令,主要是針對(duì)運(yùn)行狀態(tài)的控制。命令語(yǔ)法為 int_cmd ,共有三個(gè)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論