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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM