天天看點

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

JMeter作為Apache的開源性能測試工具允許使用者對其進行二次開發擴充,比如使用者可以擴充自定義的函數(函數是可以在測試腳本中插入到任何Sampler或者測試元素中,可以封裝一些功能,比如對使用者名加解密函數或者得到一個自定義功能等)

首先本文将以Java擴充一個傳回兩個數值之和函數的例子來簡單示範整個過程。總體來說,二次開發擴充JMeter的函數可以分成下面幾個步驟:

建立Maven項目,引入擴充JMeter Function所需的依賴包

編寫實作自定義函數的代碼,并對其編譯打包

将編譯好的包拷貝至JMeter的擴充目錄,編輯測試腳本,調用自定義函數

使用并檢視自定義的函數是否正确

參考JMeter官方API的AbstractFunction,它将指導我們建立自己的函數 ​<code>​&amp;__7DDemoPlus​</code>​函數,以便我們了解它是怎麼生成的。

建立一個Maven項目,打開pom.xml,加入ApacheJMeter_functions依賴庫

要實作二次擴充函數,主要有兩點:

定義function的類的package聲明必須包含".functions"

需要繼承實作AbstractFunction四個方法

定義包名

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

繼承并實作AbstractFunction四個抽象方法:

<code>execute</code>方法用于接收Jmeter傳入的參數值并執行工作

<code>setParameters</code>方法用于傳遞執行過程中的實際參數值

<code>getReferenceKey</code>方法用于定義函數名字

<code>getArgumentDesc</code>方法用于描述函數參數

在控制台使用 ​<code>​mvn cleanpackage​</code>​打包

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

拷貝自定義函數封包件到jmeter/lib/ext目錄下

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

重新開機Jmeter後打開函數助手,并生成并複制自定義函數表達式

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

并使用BeanShell調用自定義函數,并檢查結果

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

我們可以看到控制台已經正确輸出函數結果了

至此,我們的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發送消息,檢視消費端接受情況

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

我們看到消費端已經收到消息,測試成功

接下來擴充實作JmeterActiveMQFunction

在控制台使用 ​<code>​mvn cleanpackage​</code>​打包測試類

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

使用 ​<code>​mvn dependency:copy-dependencies-DoutputDirectory=lib​</code>​複制所依賴的jar包都會到項目下的lib目錄下

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

複制測試代碼Jar包到jmeter\lib\ext目錄下,複制依賴包到jmeter\lib目錄下

重新開機Jmeter後打開函數助手,并生成并複制自定義函數表達式,使用 ​<code>​__Random​</code>​函數對消息内容簡單參數化

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

下面我們将進行性能壓測,設定線程組,設定5個并發線程。定義并使用BeanShell調用自定義函數

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐

我們可以看到消費端已經接收到消息

性能工具之Jmeter擴充函數及壓測ActiveMQ實踐