1. 程式人生 > 其它 >Jmeter如何進行二次開發

Jmeter如何進行二次開發

轉載至:https://mp.weixin.qq.com/s/XcOEU3BsShTro9eRgsQEsA

01概述

為什麼需要做二次開發?JMeter作為一款開源的效能、介面測試工具,有時候無法滿足我們工作的需要,一般體現在:協議不支援、沒有相應資料處理功能等。

一般這種情況下,我們可以做的選擇有:

  • 第一種找外掛

  • 第二種自定義實現

JMeter二次開發一般又分為三類情況:

  • 自定義元件、依託於JMeter的core的jar實現。一般來說,程式碼量較大

  • 依託於java請求實現自定義協議的擴充套件。推薦方式

  • 自定義函式來實現特定的一些資料處理的功能。(和伺服器沒有互動),比如加密、簽名的生成、編碼處理,解密等等。



02基於java請求的二次開發

首先,我們依賴的jar包分為兩種:

  • JMeter框架層面的:實現的是效能層面的統計相關工作。需要的jar包有ApacheJMeter_core.jar,是JMeter的核心jar包 ,所有基於JMeter的二次開發基本上都需要用到該jar包。
    基於jave請求所以還需要ApacheJMeter_java.jar

  • 擴充套件的協議本身所需要的:取決於協議本身

    接下來開啟eclipes,匯入需要的jar包,自定義的java請求要繼承Jmeter所提供的.AbstractJavaSamplerClient類。可以看到這裡需要重寫的方法是runTest方法。

我們先寫一個簡單的例子,認識一下常見的方法:

將該專案導成jar包,放到JMeter lib目錄下,ext檔案中

如何設定傳入引數?

重寫getDefaultParameters()方法,在runtest方法中,使用arg0. getParameter(“引數名”)呼叫

程式碼:

效果:

到這裡的話,我們就把JMeter層面的東西搞定了,那麼我們怎麼讓他實現我們想要的功能?

這個時候就要用到擴充套件協議所需要的jar包了,我們把這個jar也匯入到eclipse中,在runTest方法中呼叫,設定其返回結果,這樣就可以在這裡面應用了,因本人實力有限,這個地方舉一個簡單的例子。假設我們的業務(和伺服器互動)是一個計算器,程式碼如下:

在JMeter框架中我們實現的操作就是設定傳入的引數,一般和業務有關,方法就用getDefaultParameters:

其次是runTest方法,我們要做的第一步就是獲取傳到的引數,使用arg0. getIntParamete方法,例項化業務物件,例項化SampleResult物件,開始計時,業務處理,設定結果,設定狀態,結束計時,返回SampleResult物件即可。

有需要時,可在語句中使用try catch丟擲異常,對異常狀態進行處理

最後匯出jar包即可,執行效果:

這裡需要注意的是業務類:

業務類所依賴的類都必須以jar包的形式存在於Jmeter的lib目錄下,以及業務類所以依賴的類,有可能在Jmeter的lib目錄中本身就存在。有可能會版本不一致,此時需要進行評估,一般保留高版本(前提是能夠相容低版本才行)。否則就可能需要進行程式碼層面的變更,使用統一的版本來實現。



03JMeter自定義函式

在使用JMeter的過程中,我們經常會需要進行各種各樣的資料處理,比如說編碼、解碼、加密、解密、特定的值生成,如果JMeter本身沒有提供,我們則可以通過自定義函式的方式,實現擴充套件。

我們依賴的jar包有哪些呢?

首先JMeter層面,依賴的jar包主要有兩個ApacheJMeter_core.jar以及ApacheJMeter_functions.jar兩個包,功能本身所依賴的包就是功能實現的jar包,功能本身是脫離JMeter存在的。

首先我們還是匯入JMeter的jar包,建立javaproject專案,建立包,注意package中必須包含關鍵字functions,建立類,繼承自AbstractFunction。

這裡需要重寫的方法有四個:

該方法就是返回Hello World,如果在使用時,在execute中呼叫功能包並返回結果,我們看一下怎麼傳遞引數

匯出jar包做法和基於java請求一樣,測試結果如下:

我們會發現一個問題,就是當使用引數呼叫函式不能被呼叫,如圖,那麼要怎麼處理呢?

函式的入參本身是Jmeter的一個引數(類似於${xxx}),則需要進行二次轉化,操作方法如下:

匯出jra包,執行指令碼結果為:

這裡就不在說如何呼叫功能jar包,處理方法和基於java請求二次開發一樣,在execute方法中進行呼叫,返回結果即可,這裡也要把功能的jar包也要放到lib目錄下。

小技巧:

小技巧:

    • 如果希望將依賴包放在lib以外的目錄,則建議修改Jmeter的配置檔案jmeter.properties. 中user.classpath

    • 自定義函式,其package中必須包含關鍵字functions具體以Jmeter.properties檔案中的配置項為準。
      classfinder.functions.contain=.functions