?

基于Apache ZooKeeper和ActiveMQ的分布式軟件測試方法

2016-02-13 07:50呂茜
現代計算機 2016年36期
關鍵詞:測試程序軟件測試結點

呂茜

(國家新聞出版廣電總局監管中心,北京 102209)

基于Apache ZooKeeper和ActiveMQ的分布式軟件測試方法

呂茜

(國家新聞出版廣電總局監管中心,北京 102209)

云計算的發展使得分布式軟件測試成為一種常態,節點的管理和通信是其中的兩個關鍵問題。給出一個基Apache ZooKeeper和ActiveMQ的測試方法,能有效解決上述兩個問題,并結合實際項目給出在Java平臺使用的關鍵代碼。

分布式測試;Apache ZooKeeper;Active MQ

0 引言

隨著互聯網和云計算技術的發展,軟件測試領域也遭受著新的挑戰和進行著新的變革。在傳統軟件測試中,被測程序和測試程序一般存在于同一個主機或者有限的多個主機之中。而在云計算流行的今天,尤其是在軟件即服務SaaS(Software as a Service)提供的支持下,測試程序可以分布在多個數量客觀的計算節點中,然后根據用戶的計算請求,例如計算節點的數量或者根據當前在線的活動計算節點,動態分配可用的測試節點,然后再進行測試。以往這些節點的管理與使用都是測試人員或者系統管理人員負責,現在由于云計算的運用,需要計算機自動處理。那么如何管理這些節點以及怎么應用這些節點,成為當前測試技術的關鍵問題所在。

1 Apache ZooKeeper介紹及應用

如前文所述,當前測試技術的第一個關鍵問題就是測試節點的管理。當節點不多的時候,可以采用人工管理的方法,比如我們通過VMware或者Hyper-V等虛擬化平臺創建了若干個測試節點,可以通過這些虛擬化平臺提供的管理工具來檢查測試節點的狀態和負載。但是當節點很多,或者節點處于不同的區域時,進行人工管理就是一件非常費勁的時間。因為有的虛擬機雖然處于開機狀態,但卻因為某個原因系統沒有響應,這時該測試節點其實是不可用的?;蛘弋斚到y因為維護重啟完成而不能及時發現該測試節點的可用性從而降低測試的實時性。還有一個問題,就是在實際項目當中,被測程序或者測試程序有許多的配置信息需要在運行時讀取,如果配置信息需要更改,那么如何讓所有的節點獲知這個變化就非常繁瑣了。

Apache ZooKeeper是一個開源文件應用程序接口(API),能使大型系統的分布式進程相互同步,這樣所有提出請求的客戶端就可以得到一致的數據。Apache ZooKeeper的數據模型類似于一棵樹,如圖1所示。

圖1 Apache ZooKeeper數據模型

Apache ZooKeeper的節點(Znode)有如下幾個特點:

①觀察者:客戶端可以在ZNode上設置觀察者(watches)。所有對ZNode的修改都將觸發觀察者,之后再清除觀察者。當一個觀察者被觸發,ZooKeeper就會發送一個通知給客戶端。

②數據訪問:數據被原子性的保存在命名空間的每一個ZNode中。Read可以獲得與ZNode相關聯的數據,write用來修改數據。每個結點都有一個ACL(Access Control List)來限制誰可以進行這些操作。

③臨時節點:ZooKeeper也有臨時結點的概念。這些結點在ZNode被創建的時候存在,當會話結束時,結點就會被刪除。因為這樣的臨時結點不允許有子結點。

④數列節點:當創建一個ZNode,ZooKeeper還可以請求附加一個遞增計數器到最后的路徑。這個計數器對于父節點來說是唯一的。

基于這四個特點,ApacheZooKeeper主要有四個方面的應用:通知服務、配置管理、集群管理和分布式鎖。我們在分布式測試中用到的就是配置管理和集群管理這兩個個方向,其拓撲結構如圖2和圖3所示:我們以Java平臺為例,測試程序部署在Apache

圖2 Apache ZooKeeper配置管理

圖3 Apache ZooKeeper集群管理

Tomcat之中,我們重寫ServletContextListener類來實現

當測試程序啟動之后自動在Apache ZooKeeper中注冊,核心代碼及注釋如下所示:

至于后面如何從活躍節點中選取合適的節點來進行自動化測試,其算法不在本文的探討范圍之類,大體可以根據吞吐量或者節點的負載來進行選擇。

Apache ZooKeeper配置管理的核心代碼如下所示:

2 ActiveMQ介紹及應用

前文解決了節點的管理和選擇問題,那么剩下的一個問題就是如何應用被選擇的測試節點,尤其是被測程序和測試節點的通信問題。一般有如下方式:

(1)被測程序和測試程序的直接通信:基于被測程序所在主機與測試程序所在主機之間的通信

該方法提供了主機到主機之間的通信,從而當被測程序和測試程序之間需要通信的時候,可以采用本地方法直接調用,使得被測程序和測試程序從頂層看是在同一個主機之中。該方法有如下幾種實現方式:SSH/Telnet、STAF等,如圖4所示。

在SSH/Telnet方法中,被測主機和測試主機需要實現SSH/Telnet協議,對于雙方都是類Unix的操作系統來說,SSH/Telnet都是自身就提供了的,對于Windows操作系統來說,可以通過安裝Cygwin或者OpenSSH for win32來實現。STAF(Software Test Automation Framework)是一個自動化測試框架,支持Linux、Windows等多個操作系統,當被測主機和測試主機都安裝并配置了STAF之后,雙方可以通過STAF提供的服務進行通信,例如:process(遠程調用)、fs(文件操作)等。使用這種主機到主機通信的方式有一個比較繁瑣的地方在于系統的配置。例如SSH/Telnet方法時,Windows測試主機的配置以及主機的防火墻配置;STAF方法的被測主機和測試主機環境的搭建和權限的管理等。而優勢也是比較明顯的,就是在被測程序端可以直接控制測試程序的執行,就和在本地運行一樣。

圖4 主機到主機的通信

(2)被測程序與測試程序之間的間接通信:基于消息中間件的模式

與第一種主機到主機之間的通信不同,被測程序與測試程序之間緊密耦合,被測程序需要直接控制測試程序的管理,這種方法只能對特定的程序或者協議使用,比如Jenkins提供的Master和Slave之間的通信;Selenium Grid實現的分布式測試等等。前者只能用于Jenkins提供的持續集成,后者只能用于Selenium分布式網頁測試。

那么有沒有一種配置簡單也具有較好通用性的解決方案呢?消息隊列MQ(Message Queue)就是一種兼顧這兩方面要求的技術。當前運用較多的開源MQ中間件有ActiveMQ、RabitMQ、Apache Kafa等,其中ActiveMQ運用較為廣泛。

ActiveMQ是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ是一個完全支持JMS1.1和J2EE 1.4規范的JMS Provider實現。當前主流的開發語言都提供了針對ActiveMQ的客戶端編程接口,比如:Java、C/C++、C#等。

在使用ActiveMQ時,測試程序在啟動之后連接ActiveMQ服務器并創建隊列/主題并作為消息的生產者;被測程序在啟動之后連接ActiveMQ服務器并連接測試程序創建的隊列/主題并作為消息的消費者。隊列是一種一對一的模式,也就是一個消息生產者對應一個消息消費者,對于我們來說,就是一個被測程序對應一個測試程序;而主題訂閱模式,一個消息生產者對應多個消息消費者,當一個被測程序寫入需要測試的消息時,各個監聽的消息消費者都可以接收并處理該消息,而當需要進行某項測試的時候,被測程序根據自身使用的編程語言使用上文所述的客戶端API在隊列/主題中發布一條新的消息,然后ActiveMQ會根據負載均衡,動態選擇一個當前活動的消息消費者接收并處理該消息,從而實現被測程序和測試程序直接的通信。以隊列形式為例的系統拓撲結構如圖5所示:

圖5 基于Active MQ的通信

不同的被測程序和測試程序,只需要使用不同的隊列/主題即可實現環境的復用,而且環境的搭建較為簡單,只需要維護ActiveMQ服務器或者集群即可。

使用ActiveMQ的關鍵代碼如下所示:

3 基于Apache ZooKeeper和ActiveMQ的分布式測試系統架構

綜上,本文設計的基于Apache ZooKeeper和ActiveMQ的分布式測試系統,即可以實被測程序和測試程序之間的直接通信,也能實現間接通信,具有較好的通用性和可擴展性,其架構如圖6所示:

圖6 系統架構

被測節點啟動后,在ActiveMQ中創建相應的測試隊列;測試節點啟動后,連接ActiveMQ并監聽其可處理的測試隊列,同時在Apache ZooKeeper中注冊臨時節點。被測程序可以通過查詢Apache ZooKeeper獲得當前活動的測試程序節點,并按照一定的調度算法選擇合適的測試程序進行測試;也可以通過ActiveMQ發送測試命令,由ActiveMQ進行負載均衡選擇合適的測試程序進行測試。

在實際項目中,因為一些服務器在國外,所以如果我們使用本地的測試程序節點去測試這些國外服務器托管的被測程序,那么因為網絡延遲的限制會導致測試效率低下。在這種情況下,我們通過將本地和國外的測試程序節點根據所在位置的不同,在Apache ZooKeeper中劃分為兩個組:Internal組和External組。測試程序節點啟動時,根據其域名或者IP范圍的不同,分別在相應的組注冊。被測程序在發布測試任務時,根據其節點所處的位置,相應的從Internal組或者External組選擇測試程序節點進行測試。而對于被測程序和測試程序與節點所處位置不同的情況,則直接使用ActiveMQ的隊列進行處理。

4 結語

基于Apache ZooKeeper和ActiveMQ的分布式測試架構,環境搭建簡單、可用性和可靠性高,能有效、方便地管理被測程序節點和測試程序節點,在分布式測試中發揮著巨大的作用。

[1]Apache ZooKeeper官方網站:http://ZooKeeper.apache.org/

[2]ActiveMQ官方網站:http://activemq.apache.org/

[3]ActiveMQ的幾種通信方式:http://shmilyaw-hotmail-com.iteye.com/blog/1897635

[4]分布式服務框架ZooKeeper--管理分布式環境中的數據:https://www.ibm.com/developerworks/cn/opensource/os-cn-ZooKeeper/

A Distributed Testing Method Based on Apache ZooKeeper and Active MQ

LV Qian
(State Administration of Press,Publication,Radio,Film,and Television of the People's Republic of China,Beijing 102209)

Distributed testing becomes much more usual with the development of Cloud Computing in the nowadays,management and communication in the nodes are the two key points in it.Presents a testing method based on Apache Zookeeper and ActiveMQ that can handle the points perfectly,and demonstrates the usage in real project with key code on Java platform.

Distributed Testing;Apache ZooKeeper;Active MQ

1007-1423(2016)36-0052-06

10.3969/j.issn.1007-1423.2016.36.014

呂茜(1984-),女,河南鄭州人,本科,中級工程師,從事領域為長期從事廣播電視監測工作

2016-10-18

2016-12-18

猜你喜歡
測試程序軟件測試結點
LEACH 算法應用于礦井無線通信的路由算法研究
基于八數碼問題的搜索算法的研究
基于OBE的軟件測試課程教學改革探索
航天軟件測試模型構建與應用
EXCEL和VBA實現軟件測試記錄管理
基于Castle型機械手的三溫量產測試平臺實現
手機APP交互界面人因適合性測試程序的設計與實現
軟件測試工程化模型及應用研究
電氣自動化控制設備可靠性測試探討
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合