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