JMeter作為Apache的開源性能測試工具允許使用者對其進行二次開發擴充,比如使用者可以擴充自定義的函數(函數是可以在測試腳本中插入到任何Sampler或者測試元素中,可以封裝一些功能,比如對使用者名加解密函數或者得到一個自定義功能等)
首先本文将以Java擴充一個傳回兩個數值之和函數的例子來簡單示範整個過程。總體來說,二次開發擴充JMeter的函數可以分成下面幾個步驟:
建立Maven項目,引入擴充JMeter Function所需的依賴包
編寫實作自定義函數的代碼,并對其編譯打包
将編譯好的包拷貝至JMeter的擴充目錄,編輯測試腳本,調用自定義函數
使用并檢視自定義的函數是否正确
參考JMeter官方API的AbstractFunction,它将指導我們建立自己的函數 <code>&__7DDemoPlus</code>函數,以便我們了解它是怎麼生成的。
建立一個Maven項目,打開pom.xml,加入ApacheJMeter_functions依賴庫
要實作二次擴充函數,主要有兩點:
定義function的類的package聲明必須包含".functions"
需要繼承實作AbstractFunction四個方法
定義包名
繼承并實作AbstractFunction四個抽象方法:
<code>execute</code>方法用于接收Jmeter傳入的參數值并執行工作
<code>setParameters</code>方法用于傳遞執行過程中的實際參數值
<code>getReferenceKey</code>方法用于定義函數名字
<code>getArgumentDesc</code>方法用于描述函數參數
在控制台使用 <code>mvn cleanpackage</code>打包
拷貝自定義函數封包件到jmeter/lib/ext目錄下
重新開機Jmeter後打開函數助手,并生成并複制自定義函數表達式
并使用BeanShell調用自定義函數,并檢查結果
我們可以看到控制台已經正确輸出函數結果了
至此,我們的Jmeter擴充函數已經完成了,同學們是不是so easy。。。😁
目前能實作壓測ActiveMQ有以下方法:
JMS Sampler
自定義Java請求
JSR223 Sampler
BeanShell Sampler
擴充Function(今天介紹的)
接下我們在以上示例的基礎實踐壓測ActiveMQ消息服務
想要了解ActiveMQ是啥,首先得知道JMS,是以先對MOM和JMS做一個介紹
企業消息系統,即面向消息的中間件,提供了以松散耦合的靈活方式內建應用程式的一種機制。它們提供了基于存儲和轉發的應用程式之間的異步資料發送,即應用程式彼此不直接通信,而是與作為中介的MOM通信。
Java Message Service:是Java平台上有關面向消息中間件的技術規範。 有一個比較通俗的解釋,JMS類似于JDBC,JDBC是可以用來通路許多不同關系資料庫的API,而JMS則提供同樣與廠商無關的通路的API,以通路消息收發服務。比如IBM 的MQSeries、BEA的Weblogic JMS service;而ActiveMQ也是其中的一種,是以:activeMQ就是支援jms規範的一個server;它對于JDBC和資料庫的關系來說,它就是個mysql(MQSeries就是DB2,Weblogic JMS service就是Oracle)。 在沒有JDBC之前,程式員需要通路資料庫的時候,需要根據不同的資料庫進行不同的編碼;在有了JDBC之後,開發過程中,對于不同資料庫的通路方法被規範化,隻需要根據不同的資料庫使用不同的資料庫驅動,就可以用通用的方法通路資料庫。 在沒有JMS之前,程式員開發過程中,如果需要和MOM進行消息發送或接受的時候,需要根據不同的MOM進行不同的編碼;相同的,有了JMS之後,代碼被規範使用。
ActiveMQ是目前最流行的消息中間件之一,是一種在分布式系統中應用程式借以傳遞消息的媒介,常見的消息中間有ActiveMQ,RabbitMQ,Kafka。ActiveMQ是Apache下的開源項目,完全支援JMS1.1和JSE1.4規範的JMS Provider實作
特點:
支援多種語言編寫用戶端
對spring的支援,很容易和spring整合
支援多種傳送協定:TCP,SSL,NIO,UDP等
支援AJAX
消息形式:
點對點(Queue)
一對多(Topic)
加入依賴庫
實作消費者代碼類,這裡我們使用Queue的消息形式
導入ApacheJMeter_functions依賴庫及ActiveMQ相關依賴庫
實作生産者代碼類
編寫一個RunMian測試類
運作RunMian發送消息,檢視消費端接受情況
我們看到消費端已經收到消息,測試成功
接下來擴充實作JmeterActiveMQFunction
在控制台使用 <code>mvn cleanpackage</code>打包測試類
使用 <code>mvn dependency:copy-dependencies-DoutputDirectory=lib</code>複制所依賴的jar包都會到項目下的lib目錄下
複制測試代碼Jar包到jmeter\lib\ext目錄下,複制依賴包到jmeter\lib目錄下
重新開機Jmeter後打開函數助手,并生成并複制自定義函數表達式,使用 <code>__Random</code>函數對消息内容簡單參數化
下面我們将進行性能壓測,設定線程組,設定5個并發線程。定義并使用BeanShell調用自定義函數
我們可以看到消費端已經接收到消息