信斌 王桂花
摘要:首先,分析了現(xiàn)有測(cè)試系統(tǒng)的不足,之后,介紹了軟件組成和運(yùn)行環(huán)境說(shuō)明,最后,設(shè)計(jì)了基于Python和SIPp的自動(dòng)化壓力測(cè)試系統(tǒng),并給出了相關(guān)代碼。新的測(cè)試系統(tǒng)克服了現(xiàn)有測(cè)試系統(tǒng)的不足,極大地提高了測(cè)試效率,節(jié)約了測(cè)試成本。
關(guān)鍵詞:壓力測(cè)試系統(tǒng);自動(dòng)化;Python;SIPp
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)22-0205-03
隨著計(jì)算機(jī)和通訊技術(shù)的快速發(fā)展,網(wǎng)絡(luò)和通訊設(shè)備的組成越來(lái)越復(fù)雜,測(cè)試工作量越來(lái)越大,測(cè)試要求的時(shí)間越來(lái)越短,測(cè)試系統(tǒng)面臨著很大的挑戰(zhàn)?,F(xiàn)有測(cè)試系統(tǒng)中,基于SIP協(xié)議的通訊系統(tǒng)的壓力測(cè)試,多采用開(kāi)源工具SIPp,由測(cè)試人員手工調(diào)用SIPp執(zhí)行腳本,給系統(tǒng)加壓,然后采集系統(tǒng)運(yùn)行指標(biāo),如CPU占用率、內(nèi)存使用率等,以測(cè)試系統(tǒng)在不同壓力下的穩(wěn)定性。Sipp工具模擬終端設(shè)備或者網(wǎng)絡(luò)設(shè)備,向被測(cè)試設(shè)備發(fā)送大量SIP消息,可以增加系統(tǒng)負(fù)荷。但由于壓力測(cè)試的測(cè)試模型眾多,測(cè)試周期較長(zhǎng)(通常持續(xù)若干天),測(cè)試成本居高不下。
Python是一種開(kāi)源的通用計(jì)算機(jī)編程語(yǔ)言,致力于縮短開(kāi)發(fā)時(shí)間,使用簡(jiǎn)潔、易讀又便于維護(hù)的語(yǔ)法,擁有豐富的擴(kuò)展模塊,具有很大的便捷性和高可擴(kuò)展性。基于Python和SIPp的自動(dòng)化壓力測(cè)試系統(tǒng),將人工測(cè)試步驟編排為自動(dòng)化測(cè)試,能極大地提高測(cè)試效率,節(jié)約測(cè)試成本。
1系統(tǒng)組成
1.1系統(tǒng)的硬件結(jié)構(gòu)
自動(dòng)化壓力測(cè)試系統(tǒng)由測(cè)試管理子系統(tǒng)、SIPp測(cè)試節(jié)點(diǎn)和被測(cè)試設(shè)備組成,系統(tǒng)硬件連接如圖1所示。根據(jù)測(cè)試規(guī)模和被測(cè)試設(shè)備的能力,可以擴(kuò)展多個(gè)SIPp測(cè)試節(jié)點(diǎn),由測(cè)試管理系統(tǒng)集中管理和分配任務(wù)。所有設(shè)備通過(guò)交換機(jī)和路由器組成的網(wǎng)絡(luò)連接在一起。測(cè)試管理系統(tǒng)使用網(wǎng)絡(luò)接口,一方面管理SIPp節(jié)點(diǎn),啟動(dòng)及停止其模擬負(fù)荷,并在測(cè)試過(guò)程中動(dòng)態(tài)調(diào)整其負(fù)荷大小,另一方面監(jiān)控被測(cè)試設(shè)備,判斷其在高壓力情況下的運(yùn)行指標(biāo)及狀態(tài)。
1.2系統(tǒng)的軟件結(jié)構(gòu)
本系統(tǒng)由配置管理模塊、SSH協(xié)議接口模塊、SIPp控制模塊、設(shè)備參數(shù)采集模塊、測(cè)試報(bào)告生成模塊組成,具體結(jié)構(gòu)見(jiàn)圖2所示。
配置管理模塊負(fù)責(zé)讀取測(cè)試系統(tǒng)的各項(xiàng)預(yù)設(shè)參數(shù)(如被測(cè)試設(shè)備的IP地址、端口、登錄口令,SIPp節(jié)點(diǎn)的Linux服務(wù)器用戶(hù)名、口令、測(cè)試消息腳本等)。
因SIPp工具運(yùn)行于Linux系統(tǒng)上,需要通過(guò)SSH協(xié)議登錄到Hnux服務(wù)器,以便控制SIPp的啟動(dòng)、停止等動(dòng)作,工具需要支持SSH接口。將SSH的連接、登錄、執(zhí)行命令、獲取命令結(jié)果等操作封裝為一個(gè)SSH模塊,方便工具其他模塊使用。SIPp控制模塊負(fù)責(zé)在部署SIPD工具的Linux服務(wù)器上,啟動(dòng)測(cè)試腳本、調(diào)整壓力強(qiáng)度及結(jié)束模擬負(fù)荷的發(fā)送。數(shù)據(jù)采集模塊通過(guò)TCP接口登錄到被測(cè)試設(shè)備上,采集各種強(qiáng)度負(fù)荷下的設(shè)備系統(tǒng)指標(biāo),判斷系統(tǒng)的狀態(tài)是否良好。測(cè)試結(jié)束后,所有測(cè)試數(shù)據(jù)由報(bào)告生成模塊加工生成測(cè)試報(bào)告。
2運(yùn)行環(huán)境說(shuō)明
2.1Python擴(kuò)展模塊paramiko的安裝
paramiko模塊提供了ssh及sttp進(jìn)行遠(yuǎn)程登錄服務(wù)器執(zhí)行命令和上傳下載文件的功能。這是一個(gè)第三方的Python擴(kuò)展包,使用之前需要安裝。在Windows上安裝paramiko包的步驟具體見(jiàn)表1所示。
2.2SIPp工具的安裝與測(cè)試腳本編寫(xiě)
SIPp是一款用于測(cè)試SIP協(xié)議性能的開(kāi)源工具軟件,運(yùn)行于Linux平臺(tái),通過(guò)預(yù)先編排的測(cè)試場(chǎng)景腳本來(lái)控制SIP消息的收發(fā),它可以模擬用戶(hù)終端以及通訊服務(wù)器設(shè)備,完成和被測(cè)試設(shè)備的SIP協(xié)議流程的交互。使用不同的腳本配置,它可以充當(dāng)SIP協(xié)議中的UAC角色和UAS角色,并發(fā)或者串行地發(fā)起多個(gè)SIP會(huì)話(huà),并能實(shí)時(shí)輸出測(cè)試運(yùn)行的統(tǒng)計(jì)數(shù)據(jù)(呼叫速率、信令來(lái)回的延遲,以及消息收發(fā)數(shù)目統(tǒng)計(jì))。由于其性能強(qiáng)大和開(kāi)源免費(fèi)的特點(diǎn),Sipp已經(jīng)被廣泛應(yīng)用于通訊設(shè)備(如IP多媒體子系統(tǒng)中的CSCF、AS等設(shè)備)的壓力測(cè)試,具體步驟如圖3所示。
其中UAC和UAS都由SIPp來(lái)?yè)?dān)任。SIPp的安裝比較簡(jiǎn)便,從開(kāi)源網(wǎng)站上下載代碼,拷貝到Linux服務(wù)器上,完成編譯即可。但在測(cè)試前,需要完成測(cè)試場(chǎng)景腳本文件(XML格式)和用戶(hù)號(hào)碼腳本文件(CSV格式)的設(shè)計(jì)與編寫(xiě),并將消息收發(fā)流程調(diào)試通過(guò)。
3系統(tǒng)模塊功能設(shè)計(jì)與實(shí)現(xiàn)
3.1SSH接口模塊的設(shè)計(jì)與實(shí)現(xiàn)
對(duì)第三方模塊paramiko的接口進(jìn)行二次封裝,將繁瑣的協(xié)議函數(shù)封裝為簡(jiǎn)單的接口,主要包括執(zhí)行命令接口、上傳文件接口及下載文件接口。
SSH接口模塊分為幾個(gè)部分:
3.1.1SSH初始化接口
首先導(dǎo)入paramiko模塊
import paramiko
然后定義SSH封裝類(lèi)及其初始化函數(shù):
3.2SIPp控制模塊
SIPD工具本身運(yùn)行于Linux服務(wù)器上,需要調(diào)用ssh接口,遠(yuǎn)程執(zhí)行Sipp的運(yùn)行腳本,從而控制SIPp向被測(cè)試設(shè)備發(fā)起SIpp消息,模擬加載負(fù)荷。Sipp控制模塊有如下幾個(gè)部分:
3.2.1啟動(dòng)SIPp腳本
需要預(yù)先在運(yùn)行SIPp工具的linux服務(wù)器上,安裝好SIPp程序,編排好sip消息收發(fā)流程腳本文件(xml格式)和用戶(hù)號(hào)碼本腳本文件(CSV格式),然后以linux shell命令的方式啟動(dòng)SIPp:
SIPp_cmd="/TestTools/Sipp 10.5.1.20:5060-sf/TestTools/
以上代碼定義了一個(gè)字符串變量SIPp cmd,其內(nèi)容是一個(gè)Sipp啟動(dòng)命令,該命令執(zhí)行reg.xml中定義的消息收發(fā)序列,并以Reg_user.csv中定義的用戶(hù)號(hào)碼進(jìn)行迭代,以特定的速率(-r100參數(shù)指定,即每秒發(fā)送100次消息),反復(fù)執(zhí)行-m參數(shù)指定的次數(shù)(200000次),并且以后臺(tái)方式執(zhí)行(-bg參數(shù))。endprint
接著調(diào)用ssh接口模塊的執(zhí)行命令函數(shù)執(zhí)行該命令:
Ssh_module.ssh_exee_cm(SIPp_cmd)
這樣,SIPp控制模塊即通過(guò)ssh接口,在SiPp工具節(jié)點(diǎn)上啟動(dòng)一個(gè)測(cè)試流程。
3.2.2在測(cè)試過(guò)程中動(dòng)態(tài)調(diào)整SIpp發(fā)送消息的速率
壓力測(cè)試過(guò)程中,要求周期性地變化壓力程度,即SIPp發(fā)送消息的速率需要變化。在啟動(dòng)腳本中,我們通過(guò)-r參數(shù)指定了初始的消息發(fā)送速率,后續(xù)SIPp會(huì)按此速率持續(xù)運(yùn)行。在人工測(cè)試時(shí),我們可以在SIPp的運(yùn)行界面上,鍵入“+”、“-”、“*”、“/”動(dòng)態(tài)地調(diào)整消息發(fā)送速率。但在自動(dòng)化測(cè)試過(guò)程中,沒(méi)有人工干預(yù),并且SIPp運(yùn)行于后臺(tái)模式(即Sipp靜默運(yùn)行,無(wú)人機(jī)交互界面,也沒(méi)有打印輸出)。因此需要另想途徑調(diào)整SIPp的速率。通過(guò)研究SIPp的相關(guān)文檔,發(fā)現(xiàn)SIPp實(shí)例在運(yùn)行時(shí),預(yù)留有UDP協(xié)議的管理端口,該端口從8888開(kāi)始,每增加一個(gè)實(shí)例,該端口也順次加1,即第一個(gè)運(yùn)行的SIPp實(shí)例的管理端口是8888,第二個(gè)實(shí)例的管理端口是8889,依次類(lèi)推。可以通過(guò)向該端口發(fā)送udp消息的方式,來(lái)控制SUp實(shí)例的運(yùn)行。例如要調(diào)整第一個(gè)SIPp實(shí)例的消息發(fā)送速率為每秒1000次,相應(yīng)的Linux shell命令如下:
通過(guò)ssh接口模塊向Sipp節(jié)點(diǎn)發(fā)送命令的python代碼如下:
3.2.3停止SIPp腳本
壓力測(cè)試結(jié)束后,需要自動(dòng)停止SIPD節(jié)點(diǎn)的消息發(fā)送,此處有兩種方式:優(yōu)雅方式和強(qiáng)制方式。前者通過(guò)給SIPp發(fā)送結(jié)束命令,讓SIPp緩慢地結(jié)束整個(gè)測(cè)試流程,即:不再發(fā)送新的消息,然后等待已經(jīng)發(fā)出的消息全部收到響應(yīng)后,將整個(gè)流程關(guān)閉;而強(qiáng)制方式則不管已發(fā)送的消息是否已經(jīng)得到響應(yīng),直接將Sipp實(shí)例強(qiáng)行停止(通過(guò)linux的pkill命令)。
對(duì)于優(yōu)雅模式,我們?nèi)匀皇褂肧IPp的管理端口,相應(yīng)的py-thon代碼為:
3.3數(shù)據(jù)采集及分析模塊
在測(cè)試過(guò)程中,以及在測(cè)試結(jié)束后,都需要采集被測(cè)試設(shè)備運(yùn)行數(shù)據(jù),以便判斷設(shè)備是否運(yùn)行穩(wěn)定以及是否發(fā)生故障。本系統(tǒng)通過(guò)TCP Server/Client模型,登錄被測(cè)試設(shè)備的網(wǎng)管接口,執(zhí)行相應(yīng)的采集數(shù)據(jù)命令,得到設(shè)備運(yùn)行狀態(tài)數(shù)據(jù)。所有接口封裝為一個(gè)類(lèi),主要接口有初始化接口,登錄接口、執(zhí)行網(wǎng)管命令接口等。
初始化接口的python代碼如下:
4結(jié)束語(yǔ)
軟件測(cè)試是軟件開(kāi)發(fā)的一個(gè)有機(jī)組成部分,是軟件質(zhì)量保證的關(guān)鍵環(huán)節(jié),代表了需求、設(shè)計(jì)和編碼的最終檢查。本文利用SIPp工具能增加系統(tǒng)負(fù)荷的特性以及Pvthon腳本語(yǔ)言的便捷性和高可擴(kuò)展性,設(shè)計(jì)了基于Python和SIPp的自動(dòng)化壓力測(cè)試系統(tǒng),將人工測(cè)試步驟編排為自動(dòng)化測(cè)試,克服了現(xiàn)有測(cè)試系統(tǒng)的不足,極大地提高了測(cè)試效率,節(jié)約了測(cè)試成本。同時(shí),本文提供了核心部分的代碼,以期為相關(guān)人員提供參考。endprint