1. 程式人生 > >JMeter之JMS介面測試

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應用的效能測試。