JMeter之JMS介面測試
JMeter是Apache開發的一款小巧易用的開源效能測試工具,由java語言開發。JMeter不僅免費開源而且功能強大、易於擴充套件,如果有一定Java開發基礎的話還可以在JMeter上做擴充套件開發新的外掛等,幾乎能滿足各種效能測試需求。JMeter中使用Sampler元件(取樣器)來模擬各種的型別的請求資料格式,類似於LR中的協議(比LR中的協議概念更廣),如:http、ftp、soap、tcp等等。JMeter中支援的JMS Point-to Point、JMS Publisher和JMS Subscriber分別用於傳送JMS的PTP訊息和PUB/SUB訊息,因此可以選擇使用JMeter來測試JMS。
MOM(訊息中介軟體)作為訊息資料交換的平臺,也是影響應用執行效率的潛在環節。在Java程式中,是通過JMS與MOM進行互動的。作為Java實現的效能測試工具JMeter也能使用JMS對應用的訊息交換和相關的資料處理能力進行測試。在整個測試過程中,JMeter測試的重點是訊息的產生者和消費者的能力,而不是MOM本身。JMeter雖然能使用JMS對MOM進行測試,但是它本身並沒有提供JMS需要使用的包(實現類)。因此在使用JMeter測試JMS時需要使用到具體的MOM的相關jar包。以下結合流行的開源訊息中介軟體ActiveMQ來演示如何使用JMeter來實現對JMS的測試。
1、安裝並啟動ActiveMQ服務
2、測試前的準備
使用JMeter進行壓力測試時,所有的JMeter依賴的包需要複製到%JMETER_HOME%/lib目錄下。對於ActiveMQ來說,就是複製%ACTIVEMQ_HOME%/lib目錄下jar包,可根據實際情況來考慮是否複製。JMeter在測試時使用了JNDI,為了提供JNDI提供者的資訊,需要提供jndi.properties。同時需要將jndi.properties放到JMeter的%JMETER_HOME%/lib和%JMETER_HOME%/bin目錄中,還需要將jndi.properties與%JMETER_HOME%/bin目錄下的ApacheJMeter.jar打包在一起。對於ActiveMQ,jndi.properties的演示內容如下:
1 #java.naming.factory.initial = org.activemq.jndi.ActiveMQInitialContextFactory 2 java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory 3 java.naming.provider.url = tcp://localhost:61616 4 5 #指定connectionFactory的jndi名字,多個名字之間可以逗號分隔。 6 #以下為例: 7 #對於topic,使用(TopicConnectionFactory)context.lookup("connectionFactry") 8 #對於queue,(QueueConnectionFactory)context.lookup("connectionFactory") 9 connectionFactoryNames = connectionFactory 10 11 #註冊queue,格式: 12 #queue.[jndiName] = [physicalName] 13 #使用時:(Queue)context.lookup("jndiName"),此處是MyQueue 14 queue.MyQueue = example.MyQueue 15 16 #註冊topic,格式: 17 # topic.[jndiName] = [physicalName] 18 #使用時:(Topic)context.lookup("jndiName"),此處是MyTopic 19 topic.MyTopic = example.MyTopic
3、測試JMS的PTP模型
對於點對點模型,JMeter只提供了一種Sampler:JMS Point-to-Point。如圖所示建立測試計劃:
QueueConnection Factory:連線工廠,輸入jndi配置檔案中配置的connectionFactory
JNDI name Request queue:請求佇列名,輸入jndi配置檔案中配置的MyQueue
JNDI name Receive queue:接收佇列名,輸入jndi配置檔案中配置的MyQueue
Content:訊息內容,比如輸入:this is a test
Initial Context Factory:輸入org.apache.activemq.jndi.ActiveMQInitialContextFactory
Provider URL:提供者URL,即安裝的ActiveMQ的服務地址tcp://yourIP:61616
執行除錯時通過監視器元件檢視是否傳送成功,如下說明發送成功:
4、測試JMS的PUB/SUB模型
在實際測試時,釋出者和訂閱者並不是需要同時(非同步)出現的。比如有時我們可能想測試單位時間內訊息釋出者的訊息產生量,此時就不需要訊息釋出者,只需要訂閱者就可以了。本例為了說明這兩種Sampler的使用,建立兩個JMeter例項分別用於傳送和接收訊息。
1)首先新建如下訂閱者的測試計劃:
勾選使用jndi配置檔案,並分別輸入jndi中配置的連線工廠和目的地名稱,如上圖所示,點選執行下的啟動,使用訊息消費者處於接收狀態。
2)然後新建如下發布者的測試計劃:
勾選使用jndi配置檔案,並分別輸入jndi中配置的連線工廠和目的地名稱以及要傳送的訊息內容,此處為:this is a pubish test,如上圖所示,點選執行下的啟動,以傳送訊息,檢視監視器元件檢查訊息是否傳送成功,如下說明發送成功:
檢查訊息消費者是否接收到訊息,如下說明接收成功:
上面已完成了JMeter對JMS的基本測試演示,實際測試時可能需要根據實際的場景選擇合適的取樣器,新增其他測試元件來建立和增強測試計劃,根據真實測試的中介軟體拷貝依賴包以及配置jndi以完成JMS應用的效能測試。