蘇堅(jiān),李煒
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100876; 2 杭州東信北郵信息技術(shù)有限公司,北京 100191)
東信北郵媒體服務(wù)器(EBMSE)作為面向NGN、3G和IMS并兼容現(xiàn)有通信網(wǎng)絡(luò)的電信級(jí)設(shè)備,基于模塊化的設(shè)計(jì),采用松散藕合的體系結(jié)構(gòu),提供在通信網(wǎng)絡(luò)上實(shí)現(xiàn)各種業(yè)務(wù)所需的媒體資源功能,包括基于用戶交互功能(播放音頻和視頻、收號(hào)、錄音、混音等)、高級(jí)用戶交互功能(交互式語(yǔ)音應(yīng)答、消息)、同網(wǎng)絡(luò)橋接、跨網(wǎng)絡(luò)橋接、多方音/視頻會(huì)議功能和數(shù)據(jù)功能,為電信業(yè)務(wù)提供強(qiáng)大的媒體資源功能。
測(cè)試MS媒體能力的方式可以有多種,例如Kapanga Softphone、CM-IMS等軟終端。此外還有開(kāi)源軟件SIP,但是他們都有一定的局限性,只能一次測(cè)試一個(gè)用例,當(dāng)測(cè)試項(xiàng)不同時(shí)還需要修改MSML(Media Server Markup Language)等腳本,因此它們只適合作為功能性驗(yàn)證對(duì)MS進(jìn)行測(cè)試。測(cè)試MS媒體能力的完備性需要一種自動(dòng)化的測(cè)試工具,它能夠根據(jù)用例模板一次生成包括放音、收號(hào)、錄音、放音收號(hào)、放音錄音等數(shù)百個(gè)測(cè)試用例,并按照一定的規(guī)則對(duì)測(cè)試用例進(jìn)行測(cè)試,最終生成一份針對(duì)所有用例的測(cè)試報(bào)告。本次設(shè)計(jì)的自動(dòng)化測(cè)試工具就是一款這樣的工具。
Python是一種面向?qū)ο蟮慕忉屝偷挠?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,功能強(qiáng)大,成熟穩(wěn)定,具有腳本語(yǔ)言中最豐富和強(qiáng)大的類(lèi)庫(kù),非常適合本次自動(dòng)化測(cè)試工具的實(shí)現(xiàn)。
圖1展示了自動(dòng)化測(cè)試工具的內(nèi)部結(jié)構(gòu)圖。其中包含5個(gè)模塊,用例生成模塊、控制消息收發(fā)模塊、媒體數(shù)據(jù)收發(fā)模塊、日志模塊、測(cè)試結(jié)果統(tǒng)計(jì)模塊。
圖1 自動(dòng)化測(cè)試工具內(nèi)部結(jié)構(gòu)圖
(1)用例生成模塊主要用于生成測(cè)試用例,其中的測(cè)試用例包括放音、收號(hào)、錄音、放音收號(hào)、放音錄音的測(cè)試用例。
(2)控制消息收發(fā)模塊主要用于收發(fā)SIP信令消息,同時(shí)指示媒體收發(fā)模塊與媒體服務(wù)器進(jìn)行媒體數(shù)據(jù)的收發(fā)。
(3)媒體數(shù)據(jù)收發(fā)模塊主要用于與媒體服務(wù)器建立數(shù)據(jù)傳輸通道,并基于RTP協(xié)議進(jìn)行媒體數(shù)據(jù)的收發(fā)。
(4)日志模塊主要是將控制消息收發(fā)模塊與MS之間交互的SIP消息記錄到SIP日志文件,將媒體數(shù)據(jù)收發(fā)模塊與MS之間交互的媒體數(shù)據(jù)記錄到媒體日志文件。
(5)測(cè)試結(jié)果統(tǒng)計(jì)模塊主要是對(duì)SIP日志文件和媒體日志文件進(jìn)行分析,統(tǒng)計(jì)既定測(cè)試項(xiàng)(媒體時(shí)長(zhǎng)、媒體編解碼類(lèi)型、會(huì)話時(shí)長(zhǎng)等)是否符合預(yù)期結(jié)果,判定該測(cè)試用例是否通過(guò),并將該測(cè)試用例及測(cè)試結(jié)果添加到自動(dòng)化測(cè)試報(bào)告。
圖2 用例生成模塊內(nèi)部結(jié)構(gòu)圖
如圖2所示,用例生成模塊主要分成兩部分,第一部分以用例模板為輸入,輸出標(biāo)準(zhǔn)的測(cè)試用例,根據(jù)收號(hào)(dtmf)用例模板生成所有收號(hào)的測(cè)試用例,根據(jù)純放音(aupa)的用例模板生成所有放音的測(cè)試用例,根據(jù)錄音(record)的用例模板生成所有的錄音的測(cè)試用例。第二部分主要用于生成不同組合的測(cè)試用例,可以根據(jù)放音和收號(hào)的測(cè)試用例生成所有放音收號(hào)的用例,可以根據(jù)放音和錄音的測(cè)試用例生成所有放音錄音的測(cè)試用例。
該模塊涉及到的放音、收號(hào)、錄音的用例模板都是從MSML標(biāo)準(zhǔn)文檔中提取相關(guān)屬性值并以XML樹(shù)形結(jié)構(gòu)設(shè)計(jì)的,測(cè)試用例生成時(shí)會(huì)遍歷每種屬性的各種取值,生成各種不同屬性組合的測(cè)試用例。
圖3 控制消息收發(fā)模塊的內(nèi)部結(jié)構(gòu)圖
如圖3所示,控制消息收發(fā)模塊分為兩部分,一部分負(fù)責(zé)與媒體服務(wù)器按照SIP通信協(xié)議進(jìn)行通信;另一部分的工作是負(fù)責(zé)將SIP消息和模塊內(nèi)部消息相互進(jìn)行轉(zhuǎn)譯。
消息收發(fā)模塊作為發(fā)端時(shí),向MS發(fā)起申請(qǐng)資源請(qǐng)求和RTP鏈接請(qǐng)求等消息;作為接收端時(shí),接收來(lái)自MS對(duì)資源申請(qǐng)的分配結(jié)果及RTP鏈接請(qǐng)求處理結(jié)果等消息。此外,該模塊還會(huì)將收發(fā)到的SIP消息統(tǒng)一上報(bào)到日志模塊。
由于MS與自動(dòng)化測(cè)試工具之間使用的SIP協(xié)議不適用于內(nèi)部模塊,消息收發(fā)模塊的另外一個(gè)功能就是將SIP消息轉(zhuǎn)化為簡(jiǎn)單的內(nèi)部控制命令。
圖4 自動(dòng)化測(cè)試工具與MS之間SIP信令交互圖
自動(dòng)化測(cè)試工具與MS之間的SIP信令交互如圖4所示。控制消息收發(fā)模塊與MS之間SIP消息的收發(fā)是基于UDP(User Datagrame Protocol)的Socket實(shí) 現(xiàn) 的,自動(dòng)化測(cè)試工具綁定一個(gè)端口專門(mén)用于收發(fā)SIP消息,此外,它還會(huì)申請(qǐng)一個(gè)端口,用于媒體數(shù)據(jù)收發(fā)模塊收發(fā)與MS之間的媒體數(shù)據(jù)的收發(fā)。
圖5 媒體數(shù)據(jù)收發(fā)模塊的內(nèi)部結(jié)構(gòu)圖
如圖5所示,媒體數(shù)據(jù)收發(fā)模塊主要負(fù)責(zé)RTP數(shù)據(jù)流的收發(fā)。當(dāng)作為收端時(shí),接收來(lái)自MS的RTP數(shù)據(jù)流,解碼RTP數(shù)據(jù)從中提取媒體裸數(shù)據(jù),并將媒體裸數(shù)據(jù)發(fā)送到日志模塊;當(dāng)作為發(fā)端時(shí),將媒體數(shù)據(jù)按照RTP協(xié)議封裝成RTP數(shù)據(jù)分組發(fā)送給MS。
如圖6所示,日志模塊主要包含兩部分:對(duì)自動(dòng)化測(cè)試工具和MS之間交互的SIP消息進(jìn)行記錄并生產(chǎn)SIP日志文件;對(duì)媒體收發(fā)模塊發(fā)來(lái)的媒體裸數(shù)據(jù)進(jìn)行記錄并生成媒體日志文件,以備后續(xù)操作驗(yàn)證測(cè)試用例是否通過(guò)做準(zhǔn)備。
圖7 系統(tǒng)狀態(tài)數(shù)據(jù)統(tǒng)計(jì)模塊的內(nèi)部結(jié)構(gòu)圖
圖6 日志模塊的內(nèi)部結(jié)構(gòu)圖
如圖7所示,測(cè)試結(jié)果統(tǒng)計(jì)模塊主要對(duì)SIP日志和媒體數(shù)據(jù)日志進(jìn)行分析。首先從SIP日志中獲取自動(dòng)化測(cè)試工具下發(fā)給MS的INFO并根據(jù)RFC規(guī)范對(duì)其進(jìn)行解析,依據(jù)標(biāo)準(zhǔn)生成一組統(tǒng)計(jì)項(xiàng):會(huì)話時(shí)長(zhǎng)、媒體時(shí)長(zhǎng),并從SIP日志中Invite-200消息獲取MS發(fā)送媒體數(shù)據(jù)的編解碼類(lèi)型。與此同時(shí)對(duì)媒體數(shù)據(jù)日志進(jìn)行分析,判斷媒體數(shù)據(jù)的編解碼類(lèi)型,根據(jù)RTP數(shù)據(jù)分組的個(gè)數(shù)計(jì)算出媒體時(shí)長(zhǎng),具體計(jì)算方法是:
媒體時(shí)長(zhǎng)=RTP媒體包的數(shù)量/50 (每20 ms發(fā)送一個(gè)RTP數(shù)據(jù)分組)。
然后對(duì)從SIP日志中獲取到的標(biāo)準(zhǔn)統(tǒng)計(jì)項(xiàng)與從媒體數(shù)據(jù)日志獲取到媒體編解碼類(lèi)型和媒體時(shí)長(zhǎng)進(jìn)行對(duì)比,如果媒體時(shí)長(zhǎng)及會(huì)話時(shí)長(zhǎng)在誤差范圍內(nèi),則測(cè)試用例通過(guò),否則測(cè)試用例不通過(guò),并將其記錄到自動(dòng)化測(cè)試報(bào)告。
按照自動(dòng)化測(cè)試工具整體的設(shè)計(jì)思路及各模塊內(nèi)部詳細(xì)的結(jié)構(gòu)設(shè)計(jì),使用Python語(yǔ)言對(duì)測(cè)試工具進(jìn)行編碼實(shí)現(xiàn),其中最重要的兩個(gè)模塊就是控制消息收發(fā)模塊與媒體數(shù)據(jù)傳輸模塊,兩個(gè)模塊都是基于UDP Socket與MS進(jìn)行信令或媒體數(shù)據(jù)的收發(fā),而Python語(yǔ)言提供了Socket模塊及豐富的方法可供使用。媒體數(shù)據(jù)收發(fā)模塊主要功能之一就是進(jìn)行RTP數(shù)據(jù)編碼或解碼,而Python語(yǔ)言提供了struct模塊,其中的pack、unpack等方法極大提高了對(duì)RTP數(shù)據(jù)編碼、解碼的開(kāi)發(fā)效率。
本文以節(jié)約手工測(cè)試當(dāng)中的人力資源和時(shí)間成本為目標(biāo),設(shè)計(jì)并實(shí)現(xiàn)了對(duì)媒體服務(wù)器進(jìn)行回歸測(cè)試的自動(dòng)化測(cè)試工具。設(shè)計(jì)內(nèi)容包括自動(dòng)化測(cè)試工具整體結(jié)構(gòu)、內(nèi)部各模塊的詳細(xì)結(jié)構(gòu)。該測(cè)試工具可以對(duì)媒體服務(wù)器的媒體能力進(jìn)行完備的測(cè)試,測(cè)試功能主要包括放音、收號(hào)、錄音、放音收號(hào)、放音錄音等。此外,自動(dòng)化測(cè)試在每項(xiàng)功能測(cè)試結(jié)束后都會(huì)自動(dòng)生成一份測(cè)試報(bào)告。
本文中各模塊的設(shè)計(jì)均使用Python語(yǔ)言編碼實(shí)現(xiàn),Python語(yǔ)言提供了豐富的功能模塊,極大提高了開(kāi)發(fā)的效率。此外,實(shí)現(xiàn)過(guò)程中還使用Python多進(jìn)程對(duì)其進(jìn)行了優(yōu)化,極大縮短了測(cè)試周期,提高了測(cè)試效率,節(jié)約了時(shí)間成本。
[1]中國(guó)移動(dòng)通信集團(tuán).中國(guó)移動(dòng)CM-IMS MRF設(shè)備規(guī)范[S].2011.
[2]中國(guó)移動(dòng)通信集團(tuán).中國(guó)移動(dòng)MRFCMRFP設(shè)備規(guī)范[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.