JMeter如何實現參數名稱和個數動態變化的接口請求


  • 需求分析
    在做接口自動化和性能測試,經常會遇到一些請求參數是根據上一個請求結果,動態變化的參數個數,參數名可能相同,也可能為序列遞增格式,參數個數可能為10、20個,這樣就導致手工不好模擬該請求效果,需要進行封裝自定義函數才能實現該效果

Jmeter是一款開源的性能測試工具,目前是行業內使用率最高的性能測試工具之一,Jmeter是使用JAVA語言開發的,本文介紹如何使用JAVA語言開發自己需要的擴展函數

  • 目前業界流行的兩種開發模式,本文介紹第二種
    1、使用Jmeter二次開源環境,直接在org.apache.jmeter.functions包下面開發自己需要的函數,然后導出該jar包,替換Jmeter目錄的ApacheJMeter_functions.jar文件
    2、直接在Maven 項目下開發自定義函數,然后打包,該方法、簡單、高效

  • 開發思路
    1、使用Eclipse創建Maven 項目,配置Pom文件,引入擴展function所需的依賴包;
    2、創建類,然后繼承AbstractFunction,實現四個主方法;
    3、對編寫好的項目進行編譯、打包
    4、把打包好的函數放到jmeter擴展目錄,調用自定義函數,檢查是否正確;
JDK環境 Jmeter依賴包版本 Maven倉庫版本
1.8 4.0 3.5.3

一、新建Maven項目
1. File》New》Project,選擇Maven》Maven Project,一直點擊Next,此處Package包名一定要以.functions格式結束,否則開發出來的函數,Jmeter讀取不到
在這里插入圖片描述在這里插入圖片描述
2. 配置Pom文件,Pom文件配置的Jmeter4.0版本,只要保存了Pom文件,系統就會自動下載和關聯相應的jar包,Pom配置文件如下:
在這里插入圖片描述
3. 保存Pom文件之后,系統會自動下載關聯的依賴文件,如下圖:
在這里插入圖片描述在這里插入圖片描述
4. 此時,由於對pom文件進行了修改,項目頂層會出現一把×,並且編譯可能就會報錯,需要執行Maven》Update Project更新外部依賴的Jar包

更新前:

在這里插入圖片描述在這里插入圖片描述

更新后,編譯、打包正常:

在這里插入圖片描述
二、編寫自定義函數代碼

要實現擴展Jmeter function,主要有兩點


1. 實現function的類的package聲明必須包含".functions"

JMeter設計讓一些核心的類可以在非UI的方式下運行的時候能被加載進來,這些類會被優先加載。加載這些類的時候是通過命名規則來實現的。所有實現function的類必需包含".functions",所以我們自定義實現的類里必須包含".functions",比如如下申明的包名為:“jmeter.test.functions”

在這里插入圖片描述
2. 首先在Jmeter.test.functions包下創建一個類,類名稱為Save_Body_Data,需要繼承AbstractFunction類,然后實現父類的四個方法

	  private static final List<String> desc = new LinkedList<String>();  /*該變量用來獲取對參數值輸入進行描述*/

     private static final String KEY = "__Media_Save_Body_Data";  /*這個是在函數助手上顯示的函數名稱*/

     static {
         desc.add("請輸入第一個參數,類似variable=value,其中變量值可以寫成變量格式,格式為${value},如果有多個參數,只需要用&連接"
         		+ "類似variable=value&variable1=value1,第一個參數也可以置空,然后在Body data中填寫也行");  
         desc.add("請輸入第二個參數,該參數為變化的序列id,需要和jmeter中獲取的變量名保持一致");  
         desc.add("請輸入第三個參數,該參數為申明重復參遞增參數名是否一樣,填否則序列遞增,如id[0]、id[1],不填則默認相同"); 
         desc.add("請輸入第四個參數,該參數值是用來在jmeter的Body_Data用來調用的,可以根據需要自定義,不填則默認為第二個參數名"); 
         desc.add("請輸入第五個參數,該參數為序列的連接字符比如%、&,不填則默認為&");
         /*該描述是針對函數的輸入值進行描述*/
     }


3. 這里主要是定義變量desc、KEY 然后將描述顯示到函數的參數描述中,如下圖
在這里插入圖片描述

setParameters函數作用就是獲取函數輸入框界面輸入的值,將輸入的值傳遞給execute

	public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
   	  /*該函數用來獲取輸入的值*/
   	  /*這里,后面的1,2分別指接受的最小參數個數為1,以及接受的最大參數個數為5*/
   	  checkParameterCount(parameters,1,5);
         values = parameters.toArray();
         /*將值存入類變量中,把接受到的參數裝成array,然后用value[i]取出來 */
   }

getReferenceKey函數是提供一個在Jmeter函數助手顯示的函數名稱

	public String getReferenceKey() {
   	  /*本方法是提供一個在Jmeter函數助手顯示的函數名稱*/
   	return KEY;
   }

getArgumentDesc函數用來獲取對輸入參數的描述

	public List<String> getArgumentDesc() {
   	  /*該函數用來獲取對輸入參數的描述*/
   	return desc;
   }

execute函數用來實現獲取輸入的參數,然后通過對參數做需要的處理,該函數是開發中最重要的模塊,並且進行最后執行,本次案例中主要實現的功能就是獲取上一個接口返回的變量個數,然后對獲取的變量名和參數值進行封裝,最后通過字符連接成我們需要的效果

在這里插入圖片描述

三、編譯、打包
1. 編寫代碼完成,就可以進行編譯、打包操作了,右鍵點擊項目》Run As》Maven build
在這里插入圖片描述
2. 在Goals中輸入package,然后點擊Apply》Run執行編譯,打包操作
在這里插入圖片描述
3. 編譯打包完成,在target目錄會生成一個jar包,如下圖所示
在這里插入圖片描述在這里插入圖片描述
四、驗證開發的函數是否正常
1. 首先把Jmeter.test.functions函數放到jmeter的\lib\ext目錄
在這里插入圖片描述
2. 然后啟動jmeter,進入選項》函數助手對話框,選擇_Media_Save_Body_Data,輸入參數值,點擊生成按鈕(點了生成,系統就會生成一個函數,然后就相當於做了復制功能,可以拷貝到需要調用的地方)本次 只輸入第二個參數值(該值必須為上一個接口定義的變量名稱,稍后介紹如何使用該函數)
在這里插入圖片描述
3. 首先需要在上一個接口添加JSON Extractor元件,用來獲取變化的參數值
在這里插入圖片描述
4. 然后使用BeanShell Sampler調用生成的函數,該sample執行成功之后,就會生成我們要的字段效果
在這里插入圖片描述
5. 手工請求參數如下
在這里插入圖片描述
6. 通過代碼實現的參數只需要用參數名稱=值然后每個參數使用&連接即可
在這里插入圖片描述
7. 執行結果,如下:
在這里插入圖片描述在這里插入圖片描述

函數功能介紹

1、本次開發的函數實現的效果為通過傳入5個參數,其中只有第二個為必填項,其它參數可以為空
2、第一個參數可以為空,當為空的時候,則需要把parameters中的參數和值在body data中手動寫入,本次就是在body data中手工寫入了不會變化的參數名,你也可以直接把這些參數傳入到第一個參數,格式為funid=imp_provider&destfunid=pur_apply_provider&parentId=${apply_id}
&pagetype=import&eventcode=import&user_id=KaTeX parse error: Expected 'EOF', got '&' at position 7: {user}&̲dataType=json 3…{變量名}
6、第五個參數則為各個參數的連接方式,默認不填則為&

Jmeter.test.functions.jar下載方法見文章末尾介紹

完整源碼如下:

在這里插入圖片描述


如果文章對你有幫助,歡迎關注本人公眾號,公眾號與本平台文章同步,方便大家查閱,本人會持續推出與測試有關的文章,與大家分享測試技術,每一篇原創文章都是用心編寫,杜絕抄襲復制


QQ技術交流群:加群請輸入驗證信息 博客園
              在這里插入圖片描述


微信二維碼關注公眾號:

在這里插入圖片描述


關注之后,回復資源下載,即可獲取本人共享的各種資源下載地址

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dkyHNY2D-1569554485737)(https://s1.51cto.com/images/blog/201908/06/2e62f8806e1dc1c391c4332ac7fd70b1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)]


免責聲明!

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



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