蘇堅,李煒
(1 北京郵電大學網絡與交換技術國家重點實驗室,北京 100876; 2 杭州東信北郵信息技術有限公司,北京 100191)
東信北郵媒體服務器(EBMSE)作為面向NGN、3G和IMS并兼容現有通信網絡的電信級設備,基于模塊化的設計,采用松散藕合的體系結構,提供在通信網絡上實現各種業務所需的媒體資源功能,包括基于用戶交互功能(播放音頻和視頻、收號、錄音、混音等)、高級用戶交互功能(交互式語音應答、消息)、同網絡橋接、跨網絡橋接、多方音/視頻會議功能和數據功能,為電信業務提供強大的媒體資源功能。
測試MS媒體能力的方式可以有多種,例如Kapanga Softphone、CM-IMS等軟終端。此外還有開源軟件SIP,但是他們都有一定的局限性,只能一次測試一個用例,當測試項不同時還需要修改MSML(Media Server Markup Language)等腳本,因此它們只適合作為功能性驗證對MS進行測試。測試MS媒體能力的完備性需要一種自動化的測試工具,它能夠根據用例模板一次生成包括放音、收號、錄音、放音收號、放音錄音等數百個測試用例,并按照一定的規則對測試用例進行測試,最終生成一份針對所有用例的測試報告。本次設計的自動化測試工具就是一款這樣的工具。
Python是一種面向對象的解釋型的計算機程序設計語言,功能強大,成熟穩定,具有腳本語言中最豐富和強大的類庫,非常適合本次自動化測試工具的實現。
圖1展示了自動化測試工具的內部結構圖。其中包含5個模塊,用例生成模塊、控制消息收發模塊、媒體數據收發模塊、日志模塊、測試結果統計模塊。

圖1 自動化測試工具內部結構圖
(1)用例生成模塊主要用于生成測試用例,其中的測試用例包括放音、收號、錄音、放音收號、放音錄音的測試用例。
(2)控制消息收發模塊主要用于收發SIP信令消息,同時指示媒體收發模塊與媒體服務器進行媒體數據的收發。
(3)媒體數據收發模塊主要用于與媒體服務器建立數據傳輸通道,并基于RTP協議進行媒體數據的收發。
(4)日志模塊主要是將控制消息收發模塊與MS之間交互的SIP消息記錄到SIP日志文件,將媒體數據收發模塊與MS之間交互的媒體數據記錄到媒體日志文件。
(5)測試結果統計模塊主要是對SIP日志文件和媒體日志文件進行分析,統計既定測試項(媒體時長、媒體編解碼類型、會話時長等)是否符合預期結果,判定該測試用例是否通過,并將該測試用例及測試結果添加到自動化測試報告。

圖2 用例生成模塊內部結構圖
如圖2所示,用例生成模塊主要分成兩部分,第一部分以用例模板為輸入,輸出標準的測試用例,根據收號(dtmf)用例模板生成所有收號的測試用例,根據純放音(aupa)的用例模板生成所有放音的測試用例,根據錄音(record)的用例模板生成所有的錄音的測試用例。第二部分主要用于生成不同組合的測試用例,可以根據放音和收號的測試用例生成所有放音收號的用例,可以根據放音和錄音的測試用例生成所有放音錄音的測試用例。
該模塊涉及到的放音、收號、錄音的用例模板都是從MSML標準文檔中提取相關屬性值并以XML樹形結構設計的,測試用例生成時會遍歷每種屬性的各種取值,生成各種不同屬性組合的測試用例。

圖3 控制消息收發模塊的內部結構圖
如圖3所示,控制消息收發模塊分為兩部分,一部分負責與媒體服務器按照SIP通信協議進行通信;另一部分的工作是負責將SIP消息和模塊內部消息相互進行轉譯。
消息收發模塊作為發端時,向MS發起申請資源請求和RTP鏈接請求等消息;作為接收端時,接收來自MS對資源申請的分配結果及RTP鏈接請求處理結果等消息。此外,該模塊還會將收發到的SIP消息統一上報到日志模塊。
由于MS與自動化測試工具之間使用的SIP協議不適用于內部模塊,消息收發模塊的另外一個功能就是將SIP消息轉化為簡單的內部控制命令。

圖4 自動化測試工具與MS之間SIP信令交互圖
自動化測試工具與MS之間的SIP信令交互如圖4所示。控制消息收發模塊與MS之間SIP消息的收發是基于UDP(User Datagrame Protocol)的Socket實 現 的,自動化測試工具綁定一個端口專門用于收發SIP消息,此外,它還會申請一個端口,用于媒體數據收發模塊收發與MS之間的媒體數據的收發。

圖5 媒體數據收發模塊的內部結構圖
如圖5所示,媒體數據收發模塊主要負責RTP數據流的收發。當作為收端時,接收來自MS的RTP數據流,解碼RTP數據從中提取媒體裸數據,并將媒體裸數據發送到日志模塊;當作為發端時,將媒體數據按照RTP協議封裝成RTP數據分組發送給MS。
如圖6所示,日志模塊主要包含兩部分:對自動化測試工具和MS之間交互的SIP消息進行記錄并生產SIP日志文件;對媒體收發模塊發來的媒體裸數據進行記錄并生成媒體日志文件,以備后續操作驗證測試用例是否通過做準備。

圖7 系統狀態數據統計模塊的內部結構圖

圖6 日志模塊的內部結構圖
如圖7所示,測試結果統計模塊主要對SIP日志和媒體數據日志進行分析。首先從SIP日志中獲取自動化測試工具下發給MS的INFO并根據RFC規范對其進行解析,依據標準生成一組統計項:會話時長、媒體時長,并從SIP日志中Invite-200消息獲取MS發送媒體數據的編解碼類型。與此同時對媒體數據日志進行分析,判斷媒體數據的編解碼類型,根據RTP數據分組的個數計算出媒體時長,具體計算方法是:
媒體時長=RTP媒體包的數量/50 (每20 ms發送一個RTP數據分組)。
然后對從SIP日志中獲取到的標準統計項與從媒體數據日志獲取到媒體編解碼類型和媒體時長進行對比,如果媒體時長及會話時長在誤差范圍內,則測試用例通過,否則測試用例不通過,并將其記錄到自動化測試報告。
按照自動化測試工具整體的設計思路及各模塊內部詳細的結構設計,使用Python語言對測試工具進行編碼實現,其中最重要的兩個模塊就是控制消息收發模塊與媒體數據傳輸模塊,兩個模塊都是基于UDP Socket與MS進行信令或媒體數據的收發,而Python語言提供了Socket模塊及豐富的方法可供使用。媒體數據收發模塊主要功能之一就是進行RTP數據編碼或解碼,而Python語言提供了struct模塊,其中的pack、unpack等方法極大提高了對RTP數據編碼、解碼的開發效率。
本文以節約手工測試當中的人力資源和時間成本為目標,設計并實現了對媒體服務器進行回歸測試的自動化測試工具。設計內容包括自動化測試工具整體結構、內部各模塊的詳細結構。該測試工具可以對媒體服務器的媒體能力進行完備的測試,測試功能主要包括放音、收號、錄音、放音收號、放音錄音等。此外,自動化測試在每項功能測試結束后都會自動生成一份測試報告。
本文中各模塊的設計均使用Python語言編碼實現,Python語言提供了豐富的功能模塊,極大提高了開發的效率。此外,實現過程中還使用Python多進程對其進行了優化,極大縮短了測試周期,提高了測試效率,節約了時間成本。
[1]中國移動通信集團.中國移動CM-IMS MRF設備規范[S].2011.
[2]中國移動通信集團.中國移動MRFCMRFP設備規范[S].2010.
[3]Rosenberg J, Schulzrinne H, Camarillo G, et al.SIP: Session Initiation Protocol[S].IETF RFC 3261, 2002.
[4]Schulzrinne H, Frederick R, Jacobson V.RTP: A Transport Protocol for Real-Time Applications[S].IETF RFC3550, 2003.
[5]Knightson K, Morita N, Towle T.NGN Architecture: Generic Principles, Functional Architecture, and Implementation[J].IEEE Communications Magazine, 2005(10).
[6]Saleem A, Xin Y, Sharratt G, et al.Media Server Markup Language(MSML)[S].IETF RFC 5707, 2010.
[7]Handley M, Jacobson V, Perkins C.SDP: Session Description Protocol[S].IETF RFC 4566, 2006.