陳鵬飛
【摘 要】針對當(dāng)前各個自動測試系統(tǒng)之間相互獨立,缺乏數(shù)據(jù)共享,難以提供遠(yuǎn)程實時監(jiān)控的問題,設(shè)計了用于存儲數(shù)據(jù)的服務(wù)器,研究了基于WebSocket的面向長連接的實時通信技術(shù),實現(xiàn)了一套與自動測試系統(tǒng)交互的即時通信系統(tǒng)。該系統(tǒng)滿足數(shù)據(jù)的統(tǒng)一管理,同時滿足訪問端的實時數(shù)據(jù)顯示要求。
【關(guān)鍵字】自動測試系統(tǒng);WebSocket;TestCenter
中圖分類號: TM932 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2018)16-0229-002
DOI:10.19694/j.cnki.issn2095-2457.2018.16.106
【Abstract】In view of the fact that each automatic test system is independent of each other, lacks data sharing, and it is difficult to provide remote real-time monitoring, a server for storing data is designed, and a real-time communication technology based on web sockets for long connection is studied. A set of instant messaging systems that interact with automated test systems.The system satisfies the unified management of data while meeting the real-time data display requirements of the access side.
【Key words】Automatic test system;WebSocket;TestCenter
0 引言
自動測試不僅能降低大量重復(fù)測試中由于人體疲勞造成的誤操作,而且能替代人完成遠(yuǎn)距離或惡劣環(huán)境下的測試任務(wù),同時適用于被測相關(guān)信號瞬間出現(xiàn)難以捕捉的測量場合,可在測量時間極短而數(shù)據(jù)處理工作量極大的測試任務(wù)中,從而最大限度地提高工作效率。
1 系統(tǒng)結(jié)構(gòu)
本文旨在設(shè)計自動測試系統(tǒng)與服務(wù)器交互的實時通信模塊,該模塊通過WebSocket技術(shù)與服務(wù)器建立連接,實現(xiàn)實時數(shù)據(jù)的及時傳輸。其中自動測試系統(tǒng)中的軟件是基于TestCenter開發(fā),實時通信模塊以插件的形式嵌入到TestCenter[1-2]。TestCenter是一款專為加速開發(fā)自動測試系統(tǒng)而設(shè)計的測試開發(fā)與管理軟件平臺,由中國電子科技集團(tuán)公司第四十一研究所獨立自主研發(fā)的自動測試平臺軟件,配備TestCenter的自動測試系統(tǒng)在航空航天、國防/軍工、汽車電子、無線通信、醫(yī)療電子等領(lǐng)域的應(yīng)用日益廣泛。服務(wù)器上運行的是基于Java EE開發(fā)的Web程序,部署在Tomcat容器中。
在一個測試網(wǎng)絡(luò)內(nèi)一般會有多臺功能相同或不同的自動測試系統(tǒng),用于實現(xiàn)多種被測件的測試,而服務(wù)器只有一個。自動測試系統(tǒng)作為測試集群中的獨立站點同遠(yuǎn)程中心服務(wù)器進(jìn)行信息交互,遠(yuǎn)程中心通過Web服務(wù)器進(jìn)行測試信息的采集以及存儲,同時,遠(yuǎn)程中心通過網(wǎng)頁的方式對外提供信息服務(wù)。整個系統(tǒng)的結(jié)構(gòu)如圖 1所示。
首先是自動測試系統(tǒng)同遠(yuǎn)程中心的交互。自動測試系統(tǒng)內(nèi)置工作站并作為訪問端,主動向服務(wù)器申請建立基于WebSocket[3-4]的可靠連接。自動測試系統(tǒng)獲取的數(shù)據(jù)一方面作為一般數(shù)據(jù)傳輸給Web服務(wù)器進(jìn)行存儲,包括系統(tǒng)配置、資源配置、被測件、測試程序、測試項目、測試結(jié)果等信息,另一方面測試過程中的瞬時數(shù)據(jù)將作為實時數(shù)據(jù)傳輸給服務(wù)器,服務(wù)器接收數(shù)據(jù)后再向客戶端的訂閱者群發(fā),此類數(shù)據(jù)主要包括用戶的操作指令和測試進(jìn)度。
然后是客戶端以網(wǎng)頁的形式同遠(yuǎn)程中心進(jìn)行信息交互。實時通信功能是通過B/S體系體現(xiàn)的,用戶通過瀏覽器同Web服務(wù)器建立WebSocket連接,發(fā)送實時數(shù)據(jù)請求并查看實時數(shù)據(jù)。
本系統(tǒng)將WebSocket技術(shù)與自動測試系統(tǒng)相結(jié)合對其進(jìn)行遠(yuǎn)程實時監(jiān)控,使得自動測試系統(tǒng)的測試狀態(tài)更為及時、主動和便捷,從而達(dá)到實時的目的。
2 實時通信模塊的設(shè)計
實時通信模塊的構(gòu)成包括三部分,分別是Web服務(wù)器上的WebSocket服務(wù)端、自動測試系統(tǒng)上的WebSocket客戶端和瀏覽器上的WebSocket客戶端。
2.1 WebSocket服務(wù)端設(shè)計
Web服務(wù)器主要提供網(wǎng)頁訪問和WebSocket服務(wù)兩個功能。WebSocket服務(wù)通過使用Tomcat的websocket實現(xiàn),需要tomcat-websocket.jar和websocket-api.jar兩個包,在Web服務(wù)器初始化后立即開始監(jiān)聽,主要的事件方法包括:
@ServerEndpoint("/websocket")
public class WebSocket{
@OnOpen
public void onOpen(Session session, EndpointConfig config){……}
@OnClose
public void onClose(Session session){……}
@OnError
public void OnError(Session session, Throwable t){……}
@OnMessage
public void onMessage(Session session, String msg, boolean last){……}
}
在onOpen的連接事件中,WebSocket服務(wù)端會根據(jù)連接請求參數(shù)的不同區(qū)分請求者是自動測試系統(tǒng)還是瀏覽器,同時維護(hù)請求者的句柄,從而提供測試集群到遠(yuǎn)程中心以及瀏覽器到遠(yuǎn)程中心的雙向全雙工實時通信。
2.2 自動測試系統(tǒng)上的WebSocket客戶端設(shè)計
自動測試系統(tǒng)與服務(wù)器進(jìn)行數(shù)據(jù)交互時,通常采用TCP協(xié)議,需要在服務(wù)器上建立TCP服務(wù)端,在這種情況下,考慮到服務(wù)器還需要通過網(wǎng)頁方式提供服務(wù),因而需要在服務(wù)器上打通TCP服務(wù)端和網(wǎng)頁服務(wù)的通信功能,實現(xiàn)過程較為復(fù)雜。
WebSocket技術(shù)可以簡單的規(guī)避了該問題。首先是在Web服務(wù)器上非常方便的集成WebSocket服務(wù)端,可以無縫的與Web服務(wù)進(jìn)行交互,其次WebSocket技術(shù)已經(jīng)普及,目前Node.js、Java、C++、Python、C#等多種語言都有自己的解決方案,在自動測試系統(tǒng)和瀏覽器上可以方便的開發(fā)WebSocket客戶端。
自動測試系統(tǒng)中的軟件是在TestCenter的基礎(chǔ)上做二次開發(fā),使用了websocket-sharp(https://github.com/sta/websocket-sharp)組件實現(xiàn)。主要包括創(chuàng)建WebSocket實例、設(shè)置事件處理方法、連接服務(wù)端、發(fā)送數(shù)據(jù)和關(guān)閉連接等操作,如圖 2所示。
2.3 瀏覽器上的WebSocket客戶端設(shè)計
瀏覽器上利用JS技術(shù)插入WebSocket。由于HTTP協(xié)議無法實現(xiàn)服務(wù)器主動向客戶端發(fā)送消息,大多數(shù)Web應(yīng)用是通過頻繁的異步JavaScript和AJAX請求實現(xiàn)長輪詢。輪詢的效率低,非常浪費資源。HTML5的WebSocket技術(shù)與Web服務(wù)端建立的是長時間的連接,無論是服務(wù)端還是客戶端都可以通過建立的連接將數(shù)據(jù)推送到另一端。WebSocket只需要建立一次連接,就可以一直保持連接狀態(tài),這相比于輪詢方式的不停建立連接顯然效率要大大提高,在信息交互頻繁的情況下減少了數(shù)據(jù)傳輸?shù)牧俊?/p>
在瀏覽器上采用了HTML5自帶的API來實現(xiàn)WebSocket,主要的操作和上節(jié)中的流程一致。
3 結(jié)束語
本文著重設(shè)計了自動測試系統(tǒng)中的實時通信模塊,該設(shè)計保證了實時數(shù)據(jù)的正常傳輸及顯示,可以滿足自動測試系統(tǒng)、遠(yuǎn)程中心以及客戶端三者間的實時傳輸要求。
【參考文獻(xiàn)】
[1]宋斌,方葛豐,劉毅.自動測試系統(tǒng)軟件平臺TestCenter體系結(jié)構(gòu)設(shè)計與分析[J].測控技術(shù),2013,8.
[2]方葛豐,劉毅,等.自動測試系統(tǒng)軟件平臺技術(shù)[J].儀器儀表,2009,10.
[3]張藝.基于WebSocket的即時通信系統(tǒng)研究與實現(xiàn)[J].軟件,2015,3.
[4]劉維峰,左澤軍,趙利強(qiáng)等.基于HTML5的生產(chǎn)裝置實時監(jiān)測可視化[J].計算機(jī)工程與設(shè)計,2015.3.