摘 要: 討論了LoadRunner在無線傳感器網絡應用系統開發中的應用。無線傳感器節點和簇節點作為數據采集和預處理節點,需要向后臺系統發送大量的數據。首次將LoadRunner引入無線傳感器網絡應用開發過程,對傳感器節點與后臺系統的通信進行仿真,并提出了運用LoadRunner進行測試和仿真的工作流程。有效地對后臺系統的性能進行了測試,同時節約了硬件系統的研發成本,縮短了項目工期。
關鍵詞: LoadRunner;無線傳感器網絡;性能測試
1 無線傳感器網絡
無線傳感器網絡(Wireless Sensor Networks)是由部署在觀測環境中的大量微型廉價低功耗的傳感器節點以無線多跳通信方式構成的網絡系統[1]。根據信息獲取和處理技術,可以將無線傳感器網絡劃分為傳統無線傳感器網絡和多媒體無線傳感器網絡[2]。
無線傳感器網絡將邏輯上的信息世界與真實的物理世界融合在一起,深刻地改變了人與自然的交互方式[3]??蓮V泛地應用于軍事、工農業控制、生物醫療、環境監測等諸多領域[4-7]。美國《商業周刊》認為,WSN是全球未來四大高技術產業之一,是21世紀世界最具有影響力的21項技術之一。MIT新技術評論認為,WSN是改變世界的十大新技術之一[6]。
目前國內外研究人員對傳統WSN的研究主要集中于網絡通信技術、基礎設施、中間件、傳感器節點、數據管理、嵌入式軟件系統等方面[6]。對于多媒體WSN,北京郵電大學智能通信軟件與多媒體北京市重點實驗室、中國科學院計算技術研究所、哈爾濱工業大學已開始對該領域的探索。但是這些研究成果尚處于起步階段,距離實際應用還相差甚遠[2]。目前關于WSN嵌入式軟件系統方面的研究成果主要是嵌入式操作系統,加利福尼亞大學伯克利分校研究開發了一個傳感器節點操作系統TinyOS,加利福尼亞大學洛杉磯分校研究了傳感器節點嵌入式操作系統SOS。而對WSN應用軟件的研究開發工作則遠遠落后于其他方面的研究,還有大量的工作需要完成, 諸多新問題尚待發現,全新的應用尚待開發,任重而道遠[6]。
LoadRunner目前已廣泛應用于傳統軟件項目的性能測試[8-11],也有研究人員將其運用于網絡可信性評測的仿真研究當中[12]。本文首次將其引入無線傳感器網絡應用系統的開發,提出了LoadRunner在無線傳感器網絡開發中的測試和仿真流程,有效解決了無線傳感器網絡應用開發中存在的開發成本高、開發周期長、沒有性能測試或者性能測試不充分等問題,取得了良好的效果。
2 將LoadRunner引入無線傳感器網絡應用開發
2.1 LoadRunner
LoadRunner是一種預測系統行為和性能的工業標準級負載測試工具。通過模擬上千萬用戶實施并發負載及實時性能監測來確認和查找問題,它能夠對整個企業的系統架構進行測試,最大限度地縮短測試時間,優化性能并加速應用系統的發布周期。
LoadRunner包含Virtual User Generator、Controller和Analysis[11]三個部件。Virtual User Generator可以在Windows、UNIX或Linux機器上同時產生成千上萬個用戶訪問,極大地減少負載測試所需的硬件和人力資源。Controller可以設定負載方案、業務流程組合和虛擬用戶數量。通過Controller的Rendezvous功能既能建立起持續且循環的負載,又能管理和驅動負載測試方案。同時,還可以利用它的日程計劃服務來定義用戶在什么時候訪問系統以產生負載,從而將測試過程自動化。Analysis負責收集匯總所有的測試數據,并提供高級的分析和報告工具,以便迅速查找到性能問題并追溯原由。使用LoadRunner的Web交易細節監測器,可以查看所有的圖象、框架和文本下載所需的時間。另外,Web交易細節監測器能夠分解用于客戶端、網絡和服務器上端到端的反應時間,便于確認問題,定位查找真正出錯的組件。例如可以將網絡延時進行分解,以判斷DNS解析時間、連接服務器或SSL認證所花費的時間。通過使用LoadRunner的分析工具,可以很快地查找到出錯的位置和原因并作出相應的調整。
LoadRunner內含集成的實時監測器,在負載測試過程中,可以隨時觀察到應用系統的運行性能。性能監測器可以實時顯示交易性能數據,也可以顯示其他系統組件如application server、web server、網絡設備和數據庫的實時性能,從而更快地發現系統瓶頸和其他問題所在。LoadRunner還通過可以無限精確重復進行的回歸測試保證系統發布的高性能。
2.2 運用LoadRunner進行測試和仿真的工作流程
運用LoadRunner進行測試和仿真的工作流程如圖1所示。
2.2.1 制定負載測試和仿真計劃
在任何類型的測試和仿真中,計劃都是必要的步驟。充分而詳盡的計劃是成功測試和仿真的關鍵。確定系統的組成,畫出系統的組成圖。組成圖主要包括系統中所有的組件(如傳感器節點和簇節點)的數目,組件部署的方式以及相互之間的通信方式,傳感器節點、簇節點、數據庫服務器、系統服務器的配置。
2.2.2 開發測試和仿真腳本
可以使用LoadRunner中虛擬用戶的活動來模擬傳感器節點和簇節點與系統的通信,而虛擬用戶的活動就包含在測試腳本中,因此測試腳本對系統測試和仿真而言非常重要。
開發測試腳本要使用Virtual User Generator組件。按照測試和仿真計劃定義每一個虛擬用戶的活動、結合點和事務。
Virtual User Generator中的腳本分為vuser_init、vuser_end和Action三部分。其中vuser_init和vuser_end都只能存在一個,不能再分割,而Action還可以分成無數多個部分。
對于傳感器節點和簇節點需要登陸的系統,可以把登陸部分放到vuser_init中,登陸后的通信過程放到Action中,注銷登陸部分放到vuser_end中。如果登陸操作需要放置集合點,那么登陸操作也要放到Action中,因為對于LoadRunner,vuser_init中不能添加集合點。在其他情況下,只要把操作部分放到Action中即可。在重復回放測試腳本時,vuser_init和vuser_end中的內容只會執行一次,重復執行的只是Action中的部分。
如果傳感器節點和簇節點在與系統通信過程中,提交了一些數據(例如要增加數據庫記錄)。這些操作都被記錄到了腳本中。當多個虛擬用戶運行腳本時,都會提交相同的記錄,這不僅不符合實際運行情況,而且有可能引起沖突。為了更加真實地模擬實際環境,需要各種各樣的輸入。LoadRunner提供了參數化輸入方式。用參數表示用戶的腳本可以大大縮短腳本的長度,同時還可以使用不同的數值對腳本進行測試。
參數化主要包含兩項任務:(1)在腳本中用參數取代常量值;(2)設置參數的屬性以及數據源。LoadRunner中支持的參數類型有DateTime、Group Name、Load Generator Name、Iteration Number、Random Number、Unique Number、Vuser ID、File、User Defined Function等。
2.2.3 創建運行場景
運行場景描述在測試和仿真活動中發生的各種事件。一個運行場景包括一個運行虛擬用戶活動的Load Generator機器列表,一個測試腳本的列表以及大量的虛擬用戶和虛擬用戶組。
2.2.4 運行測試
只需按照預定的場景,執行測試和仿真即可。
2.2.5 監視場景
在運行過程中,可以監視各個服務器的運行情況(Database Server、Web Server等)。監視場景可通過添加性能計數器來實現。
2.2.6 分析測試和仿真結果
在這一步中,需要分析大量的數據和圖表,生成各種不同的報告,最后得出結論。
2.3 運用LoadRunner對無線傳感器應用系統進行測試和仿真
無線傳感器節點與系統之間基于GPRS通過TCP協議進行通信,系統開發過程中,為了縮短項目周期,硬件研發與軟件研發同步進行。在項目初期即確定了傳感器節點和后臺系統之間的接口、交換數據的格式。硬件研發中選取了幾種方案,但是沒有定型,計劃在項目進行中根據軟硬件之間的銜接情況做出最后的決定,然而系統對性能的要求比較苛刻,如果根據項目預定的規模分別按照幾種方案制出所有的傳感器節點,其研發成本會相當高,經討論決定引入LoadRunner來進行傳感器節點的仿真,以壓縮研發成本,同時,又可以測試后臺系統的性能是否能夠滿足用戶需求。
由于篇幅所限,這里僅附上Virtual User Generator的部分用戶腳本:
(1)在vuser_init中打開相應的TCP連接
vuser_init()
{
int rc;
lrs_startup(257); //建立連接
rc=lrs_create_socket("userid","TCP","RemoteHost=
192.168.1.101:16688",LrsLastArg);
if(rc==0)
//連接成功建立
lr_output_message("Socket was successfully created ");
else
//連接建立失敗,報告錯誤碼
lr_output_message("An error occurred while creating
the socket, Error Code: %d", rc);
return 0;
}
(2)在Action中對傳感器簇節點與系統的通信進行仿真,為了真實模擬簇節點與系統的通信過程,對發送的數據databuf進行了參數化,部分代碼如下:
…… //建立集合點
lr_rendezvous("send"); //事務開始
lr_start_transaction("send");
//模擬簇節點向系統發送數據
lrs_send("userid", "databuf", LrsLastArg);
……
lr_end_transaction("send");
……
vuser_end中關閉TCP連接,腳本略。
(3)在確定運行場景時,根據系統需求,對集合點send處的用戶確定為100,可以模擬100個簇節點同時向系統發送數據。在運行場景的過程中,對服務器CPU、內存和硬盤相關的計數器進行了觀測,分別如圖2、圖3、圖4所示,同時觀測了服務器的.net、sql server相關計數器(均處于正常范圍),網絡接口的發包出錯情況和收包出錯情況(檢測過程中均為0),結果表明,系統能夠很好地滿足設計要求。
無線傳感器網絡作為21世紀的一項重要高新技術,已經得到廣大工程技術人員和科研人員的廣泛關注。本文在無線傳感器網絡應用開發中首次將LoadRunner引入開發過程,對傳感器節點和簇節點與后臺系統的通信進行了模擬和仿真,有效地提高了無線傳感器網絡系統開發中硬件和軟件研發的并行度,縮短了開發周期,大大降低了開發成本,取得了良好的效果。
參考文獻
[1] AKYILDIZ I F,SU W,SANKARASUBRAMANIAM Y,et al. Wireless sensor networks:a survey[J].Computer Networks,2002,38(4):393-422.
[2] 馬華東,陶丹.多媒體傳感器網絡及其研究進展[J].軟件學報,2006,17(9):2013-2028.
[3] 孫利民,李建中,陳渝,等.無線傳感器網絡[M].北京:清華大學出版社,2005.
[4] 李建中,李金寶,石勝飛.傳感器網絡及其數據管理的概念、問題與進展[J].軟件學報,2003,14(10):1717-1727.
[5] 任豐原,黃海寧,林闖.無線傳感器網絡[J].軟件學報,2003,14(7):1282-1291.
[6] 李建中,高宏.無線傳感器網絡的研究進展[J].計算機研究與發展,2008,45(1):1-15.
[7] 李志剛,周興社.傳感器網絡[J].計算機應用研究,2004(12):9-12.
[8] 李怡,周國祥.基于LoadRunner的一種性能測試流程方案研究與設計[J].計算機應用研究,2009,26(11):4143-4145.
[9] 赫建營,晏海華,劉超,等.一種有效的Web性能測試方法及其應用[J].計算機應用研究,2007,24(1):275-277.
[10] 浦云明,范明紅,許明娜.Web應用系統負載測試[J].計算機應用與軟件,2009,26(11):120-123.
[11] 文俊浩,桑春艷,何盼.電子政務系統性能測試應用研究[J].計算機科學,2009,36(4):179-180.
[12] 龐永剛,王慧強,鄭瑞娟.用于網絡可信性評測的事件注入技術仿真研究[J].系統仿真學報,2008,20(10):2713-2717.