SIPp腳本編寫方法基礎m1_第1頁
SIPp腳本編寫方法基礎m1_第2頁
SIPp腳本編寫方法基礎m1_第3頁
SIPp腳本編寫方法基礎m1_第4頁
SIPp腳本編寫方法基礎m1_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、SIPp腳本編寫方法基礎作者王偉版本號目錄1. 腳本格式1.1. 基于XML進行擴展SIPp的測試腳本遵循標準的XML版本的語法規范,XML即“可擴展標記語言”extensibleMarkupLanguage的縮寫,W3c組織與1998年發布XML規范。1.2. DTD擴展語法規則SIPp的執行目錄中,存在一個文件。該文件為標準的xml擴展語法規則,在該文件中,對sendrecv、paus制元素增加了定義,包括其屬性列表等內容,可作為腳本文件格式的校驗。1.3. 腳本結構一個標準的SIPp腳本,文件起始應為通用的xml前導區和DTD文件定義區如圖所示:接下來使用和包括的部分,即為腳本的正文部分

2、。sipp腳本正文部分,包含如下幾個區域:1. 初始化區在初始化區域中,通常用來進行全局變量的定義和賦值等操作,在腳本未進行邏輯流程前,預先完成初始化動作。初始化區是在腳本正文的最開始,通過使用命令小讓和/小讓,并在其之間才f入一些nop和label命令即可實現,在初始場景中的變量,僅用于全局變量,并不會應用于呼叫。例如下圖中,在初始化區對THINKTIME進行賦值:2. 邏輯執行區邏輯執行區中包括了業務流程的相關內容,比如接收消息、發送消息、暫停時長、分支判斷、媒體播放、內外部命令執行等操作。邏輯執行區是腳本的最關鍵部分,編寫sipp腳本,主要也就是針對該部分進行編寫和調試。3. 變量抑制區

3、該部分是為了避免在腳本邏輯區定義了大量的變量,但實際并未使用導致運行時報錯無法執行的問題,不論定義了多少變量,這些變量有無被使用,只需要添加進變量抑制區的列表中,腳本均可正常執行。該部分僅有一個命令Reference/,variables屬性為所需抑制的變量列表。如下圖所示:4. 定時器自定義區該區域主要作用為:針對消息響應時長(ResponseTime以及呼叫持續時長(CallLength)的Timer進行自定義間隔的配置,以獲取所需的顯示范圍,例如自定義timer配置為:則在sipp運行時,查看運行統計界面呈現如下:1.4. 注釋sipp腳本注釋的語法格式為xxx,支持多行注釋,如:2.

4、腳本類型SIPp腳本根據使用場景不同,主要分為UAC、UAS、3PCC和OCC4種類型,每種類型均有其特定的使用方式,內部邏輯也有所不同。2.1. UAC顧名思義,UAC類型的腳本主要是模擬sip會話中的UAC側,即負責發起會話的client端。如注冊客戶端、主叫用戶、訂閱者等。通常的UAC腳本邏輯區會以send作為業務流程的起始。UAC腳本一旦啟動,如果不設置起始暫停時長的參數,通常會立即開始執行。2.2. UASUAS與UAC相對,主要模擬sip會話的UAS側,啟動后即進入被動接收狀態,通常作為server端使用,如注冊服務器、被叫用戶、通知者、業務網關等。通常的UAS腳本邏輯區會以rec

5、v作為業務流程的起始。UAS腳本啟動后,即綁定相關本地socket,進入接收消息的狀態。2.3. 3PCC(三方通話)SIPp工具允許多個腳本實例間進行交互,完成較為復雜的業務流程。如三方通話等業務,因此該種腳本在普通腳本的基礎上,更多地使用內部cmd交互命令,如recvcmd、sendcmd等在不同腳本間傳遞會話參數,配合完成復雜流程的測試實現。sipp還提供了擴展的3pcc模式,支持master和slave的腳本角色。該類型的腳本編寫和調試較為復雜,本文檔中不再贅述,如有興趣可以翻閱sipp的使用手冊等文檔,其中有詳細說明。2.4. OCC(Out-of-call)OCC(Out-of-c

6、all)腳本作為特殊類型的腳本,通常不會單獨使用,而是與UAC腳本配合使用(也只能與UAC腳本配合,UAS等類型腳本無法支持-occsn等執行命令)。主要作用為擴展UAC腳本的適用范圍,使UAC腳本能夠在接收到不同會話內的非預期消息時,不至于直接丟棄。如注冊客戶端可能會遇到接收到通知NOTIFY的消息,此時就需要在運行register腳本的時候適用-oocsn或-oocsf參數,配合ooc腳本,實現對NOTIFY消息返回200的操作。3. 命令與屬性3.1. 常用命令SIPp工具提供的命令相當豐富,包括消息操作命令、變量操作、正則表達式、賦值和判斷、內部命令、外部命令、日志操作、媒體命令等多種

7、,在一般的使用場景下,通常根據不同的動作,來進行命令的使用。下面針對比較常用的場景,如發送消息、接收消息、媒體播放等進行描述:(更詳細的命令功能及示例,可以翻閱sipp的使用手冊等文檔)一個最基本的sipp腳本,通常包含了sendrecv、nop、pause這幾個命令。其中send為發送sip消息,recv為接收sip消息,nop為處理非業務的邏輯,pause為提供暫停時長。例如一個基本語音呼叫的主叫側腳本:首先使用send命令發送INVITE消息,注意在發送消息時,sip消息所有內容均包含在標準的xml數據格式CDATA內,CDATA的語法格式請格外注意,避免因為語法錯誤導致無法正確發送。(

8、注:在構造發送的INVITE消息時,為實現批量發送,使用到了大量的變量和關鍵字,在后續內容中會詳細加以說明。)發送出消息后,還需要進行后續響應消息的接收,請注意由于sip協議存在臨時響應和最終響應兩種,而1xx的響應在業務中可能存在,也可能不存在,因此需要采用可選屬性加以區別。(注:optional=true”即表示該條消息為可選接收,如果沒有收到,也不會影響后續消息的接收及處理,如100/183/180。而200為必選接收消息,只有當接收到該消息后,腳本才會繼續后續流程,因此沒有optional參數。)在接U到200ok消息,并發送出ACK后,語音通話接續流程即完成,此時根據實際業務流程,需

9、要進行語音媒體的傳輸,因此腳本在這里需要增加一個nop命令,用于媒體的播放(注:nop命令可以用于任何非消息處理的位置,在nop命令中增加action命令,然后即可執行類似媒體處理、變量操作、條件判斷等動作。)在執行媒體播放命令后,由于sipp在執行nop相關命令后,不會等待命令執行完畢而是立即執行后續腳本內容,因此為保證媒體播放正常,我們還需要根據實際要求,將腳本暫停一段時間,以確保流程模擬正確。(注:millisenconds屬性可以自定義暫停的時長,單位為ms,如果該屬性為空,則可以通過在執行命令中增加“-d1000。來指定暫停時長)3.2. 常用屬性列表命令屬性描述示例用于消息的發送,

10、常用參數包括retrans:udp報文重傳時長;lost:丟包率;start_txn:啟動響應時間記錄ack_txn:記錄接收響應時間,與start_txn匹配用于消息的接收,常用參數包括response:期望收到的響應消息request:期望收到的請求消息optional:可選接收消息,值為true或globaltimeout:超時時長,默認超時后直接ENDontimeout:超時后的跳轉處理action:收到消息后米取的處理動作regexp_match:檢查收到消息是否匹配預期用于設置暫停時間,常用參數包括milliseconds:設置暫停時長,單位msvariable:設置當變量出現時暫

11、停distribution:使用GSL定義或分布模型定義呼叫時長pausedistribution=exponentialmean=900000”/用于非協議消息處理的命令執行,常用參數包括action:執行命令動作用于兩個SIPp實例間的交互發送,常用于3PCCW,常用參數包括:MT3PCCSi的參數傳遞dest:僅用于擴展模式3PCC用于兩個SIPp實例間的交互接收,常用于3PCCW,常用參數包括action:接收到命令時的執行命令動作src:僅用于擴展模式3PCCaction通用屬性:屬性名描述示例start_rtd啟動響應定時器sendstart_rtd=invite”rtd停止響應定

12、時器repeat_rtd重復啟用響應定時器crlf運行界面增加回車換行next跳轉任意labeltest與next一起使用,設置跳轉條件chance與test、next一起使用,當test結果有值時,則概率跳轉counter計數器累加13.3. 正則表達式正則表達式作為sipp中極為重要的功能,在各個場景下應用廣泛,最常見的是通過正則表達式,獲取接收消息中某個參數,并將該參數賦給變量,用于后續流程的使用。正則表達式的使用語法如下圖所示:正則表達式的命令為regexp屬性為需要匹配的表達式內容,其中使用()”包括起來的部分,為匹配項,可以賦給變量;search_in屬性為設置本次查詢的方式,si

13、pp支持3種正則匹配的方式,分別為:1.頭域查詢匹配當search_in=hdr”時,表示正則按照頭域匹配,必須包含heade嚓數,給出需要查詢的頭域名稱,如header=From。sipp會在指定的頭域中進行匹配。注:start-line的匹配也是用頭域匹配方式。2 .消息查詢匹配當search_in=msg”時,表示正則根據整個消息內容進行匹配,通常在需要匹配SDP內容時會用到。3 .變量查詢匹配當searchjnvar”時,表示正則按照變量進行匹配,必須配置variable參數,給出需要匹配的變量名稱,如variable=header_to_tag(。4 .變量與關鍵字4.1. 關鍵字的

14、使用sipp中定義了大量的關鍵字,涉及到網絡參數、sip會話參數和媒體參數等等,需要在編寫腳本時加以注意。關鍵字的引用格式為keyword,例如locao_ip、call_id等。下表列出了常用的關鍵字:關鍵字描述備注service由參數-s傳遞,一般用來指定單個主被叫remote_ip遠端設備地址remote_port遠端設備端口。可以在腳本中使用偏移量,如remote_port+3transport指定傳輸層協議,UDP/TCP由參數-t決定local_ip主機本地地址,可以由參數-i指定local_port由系統隨機分配可由-p指定,可以在腳本中使用偏移量,local_port+3len

15、sdp長度,用于Content-Length頭域,由sipp自動生成或者手動指7E,可以添加偏移量,如len+3call_number呼叫索引,從1開始,每增加一個呼叫遞增1cseq初始值為1,可以使用參數-base_cseq手動指定初始值。media_ip本地媒體流ip,可以由-mi參數指定media_port本地媒體流端口,可由-mp指定,可以設置偏移量media_port+3auto_media_port自動指定媒體流端口,僅用于pcap。該參數使多個呼叫的音頻和視頻端口從-mp指定的端口開始,并給每個新的呼叫分配端口。SIPp默認支持10000個rtp流并發last_*此關鍵字附于從接

16、收的上一個sip消息中提取指定頭域(如果存在)的值。比如last_to則表小從接收的上一個sip消息中提取To域的消息保存到last_to中并應用。field0-nfile=line=從外部文件csv加載值,file表7K選擇從命令行中指定的csv文件的一個文件作為外部文件;line定義選擇的外部文件的起始行,field選擇字段filename=把指定的文件中內容全部插入到sip消息中。由于空格符,回車符及換行符不被某些關鍵字識另L所以插入的文件需要被精確地編輯成你想要的格式才行,否則會有亂碼。timestamp當前時間戳,與錯誤日志的時間戳格式一樣last_message上一個收到的消息au

17、thentication用丁認證頭(authenticationhead),這個關鍵字可以使用參數,書寫格式為:authenticationusername=myusernamepassword=mypassword,如果沒后指定用戶名(username),則需使用命令行參數-au或者-s指定;如果沒后指定號碼(password),則需使用命令行參數-ap指定pid指tesipp的pid,即進程號routes如果在recv命令中已設置rrs屬性為true,則Record-Route頭被存儲在關鍵子route中,可使用routes調用。next_url如果在recv命令中已設置rrs屬性為tru

18、e,則next_url中包含Contact頭中的內容branch生成一個由(z9hG4bK)+callnumber+message索引組成的branchid到腳本中。如果你想要使用與之前的消息一樣的branchid,你可以使用偏移量指定,如branch-Nmsg_index在腳本中提供消息號clock_tick在消息中包含sipp的內部時鐘sipp_version在消息中包含sipp的版本fill使用字符填充消息users如果在命令行中指定了-users參數,則這個關鍵字表示當前已經運行的用戶的數量userid如果在命令行中指定了-users參數,則這個關鍵字表示當前正在運行的用戶的id(范圍

19、為0到users-1)4.2.變量定義與使用sipp的腳本中,支持雙精度浮點型變量和字符串變量兩種變量類型.5 .浮點型變量針對浮點型變量的操作命令主要有assgin(賦值)、sample(統計分布)和todouble(強制類型轉換),以及加減乘除等簡單算術運算,舉例如下:浮點型變量還支持變量比較測試功能,該部分在分支一節中會重點描述。6 .字符串變量可以使用命令&建字符串變量,該命令有兩個參數“assign_tO不口“value,例如:字符串變量支持比較操作,命令為,其對字符串比較的值是一個小于,等于,或大于0的雙精度整型值。通常該功能用在對正則表達式提取結果的操作,以及從外部文件獲取值的操

20、作中,例如:4.3.鑒權在sipp的關鍵字和變量使用中,有一類特殊的變量需要重點說明,那就是鑒權。sipp支持標準的Digest和AKA兩種鑒權方法。具體的使用方法如下:1.在接收到401或407響應時,如果該流程需要鑒權,則需要在recv命令中增加屬性auth=true,sipp會記錄該消息中鑒權頭域的相關值。2.3.隨后在發送的第二條請求消息中,使用authentication關鍵字,指定用戶名及密碼(Digest方式)或aka_K、aka_OP、aka_AMF(AKA),sipp將自動計算出response并構造相關頭域內容。例如:還可以通過在外部文件中某一列,配置authenticat

21、ionusername=1001password=1001J然后在消息中使用fieldN弓I用,來實現不同用戶的鑒權過程。4. sipp腳本中還支持對鑒權的response吉果進行校驗,該操作使用verifyauth命令來完成,并將檢查結果賦值給一個布爾變量中。例如:5. 分支和跳轉5.1. 標簽sipp腳本支持自定義標簽操作,因此可以通過next、jump等命令,實現對流程邏輯的分支和跳轉功能,類似C語言中的goto。標簽的定義語法格式如下:其中id屬性值為該標簽的標識,可以通過next屬性進行標簽之間的跳轉,例如:在例子中,recv命令使用了next,即如果收到了486響應,則直接跳轉至i

22、d為err_ack的label處。sipp支持通過變量測試,來進行某些條件的判斷,繼而執行相關的操作,類似于開發語言中的if-else語法,變量測試的動作命令為“test”,含有四個參數:variable,value,assign_to,compare。variable和value的比較的結果,通過assgin_to賦給某一變量,值為1或00compare為比較的操作方法,一共有6種,分別為:equalnot_equalgreater_thanless_thangreater_than_equalless_than_equal舉例如下:上述語句中,變量st與10進行比較,如果小于10,則res

23、ult=1,否則result=0。5.3. 跳轉和循環sipp腳本的正常執行流程為順序依次執行相關語句,但是在某些場景下需要非線性地執行,例如收到錯誤消息,則跳轉至錯誤處理等,就需要用到分支功能。結合上文內容可知,sipp的分支功能時通過標簽和跳轉命令來實現的。在任意一個動作命令之后添加一個next=”label_id”的參數,當腳本執行完這個動作后就會跳到指定標號處繼續往下執行,另外,如果在next參數后再添加一個test=m參數,腳本僅在變量$m為真時才會跳到指定標號,這個特性結合條件判斷,可以用來實現某些特殊要求。例如:上述例子為注冊服務器部分腳本,實現的效果是:當接收到REGISTE就

24、息后,通過正則表達式獲取Expires頭域的值,并將其與0比較,如果相等,則表示該消息為注銷請求,result2=1。nop命令行中,判斷如果result2=1,這跳轉至deregister標簽,進行注銷流程的處理。(注:通過正則表達式匹配而獲取到的值,均為字符串變量,因此無法直接與數值0進行比較,而是通過strcmp命令進行字符串比較,將此結果賦給result,再對result和0進行二次比較判斷,最終獲得結果。)5.4. 概率分支為了更加符合真實測試環境的業務流程,sipp還提供了概率分支功能,即通過在next屬性后,增加chance屬性,并配置0-1之間的數值,模擬幾率跳轉分支動作。例如

25、:當sipp腳本執行到該段時,有50%的幾率會跳轉至401標簽處,緊接著會有30%勺幾率跳轉至ENDS簽。(注:1. 由于chance屬性必須與test配對使用,因此如果不需判斷直接跳轉,可以配置test=”1”,類似于ifTrue,即始終執行。2. 配置chance時必須注意,該值僅為當前所有會話的幾率,即如例子中配置的數值,則會有50%的會話跳轉至401標簽,15%的會話跳轉至ENDS簽,65%勺會話順序線性執行。)6. 文件引用6.1. 外部文件格式sipp腳本支持通過引用外部文件的方式,導入變量內容以供使用。外部文件的后綴名為.csv或.conf,可以在命令行使用“-inf文件名”參數

26、來引入變量到腳本中。文件的第一行須中明變量的讀取方式是順序讀取(SEQUENTIAL還是隨機讀取(RANDQM還是基于用戶的方式讀取(USER。每一行對應一個呼叫,使用“;”分隔符分隔每一項數據,分開的項在腳本中作為變量名filed0,field1,?fieldn來引用。例如:SEQUENTIALSarah;sipphone32Bob;sipphone12Fred;sipphone94該文件中的行會被按順序讀取,第一個呼叫第一行,第二個呼叫第二行。在腳本中的任何地方只要出現了關鍵詞field0,根據第幾個呼叫決定,這個關鍵詞就會被替換為Sarah或者Bob或者Fred,field1也是類似。如

27、果達到了文件末尾則再重新開始,一直循環,文件的大小沒有限制。在實際使用中,也可以使用參數使得不從第一行開始,例如從第二行開始:field0line=1另外,還可以使用不止一個外部文件來引入變量,這在測試一些場景是很有用的,比如要做一個測試主叫號碼是按順序的但是被叫是隨機的時候,就可以用一個第一行為順序的文件和一個第一行為隨機的文件來實現了。例如:INVITEsip:field0file=SIP/From:sippuser;tag=pidSIPpTag00call_numberTo:sutuser由于在數據較多時,編輯和使用均不方便,sipp還支持對外部文件的格式化定義,然后在程序中自動根據規則

28、生成相應的數據。(該部分內容較多,詳見sipp使用手冊)6.2. 引用方法sipp腳本中使用外部文件,常見的場景有兩種:1. 利用外部文件引入field變量,構造相應的發送消息體例如在主叫用戶的腳本中,可以通過引用文件中的field0、fieldl,分別對應主叫號碼和被叫號碼,構造From頭域和To頭域。2.通過查找外部文件,獲取對應的行號,隨后進行相關處理例如,在針對不同的被叫號碼,進行用戶忙、無響應、前轉等業務時,可以通過事先配置文件,在其中針對不同被叫號碼,分別設置若干列,對應不同的值,并在被叫用戶的腳本中,使用正則表達式獲取到被叫號碼,再使用lookup命令查詢文件,匹配當前用戶號碼處于第幾行,并讀取改行的field1的值,然后通過變量測試,跳轉不同的處理分支。6.3.文件索引在針對外部文件進行查找命令時,必須先對該文件生成索引,具體方法為再執行sipp腳本的命令中,使用-infindex參數對引入的文件生成索引,參數值為該文件的文件名,如:-infindex0。注:在通常情況下,文件的索引值均設置為從0開始。7. 腳本中的命令操作7.1. 內部命令sipp腳本支持的內部命令,

溫馨提示

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

評論

0/150

提交評論