為什么需要自定義函數(shù)呢羞反?
Jmeter作為一個(gè)工具是有局限性的布朦,在某些場(chǎng)景中,jmeter可能無法滿足我們的測(cè)試需求苟弛,這時(shí)我們可以:
1喝滞,找第三方的插件:
2,對(duì)Jmeter進(jìn)行二次開發(fā):
一般來說膏秫,涉及到數(shù)據(jù)的處理相關(guān)問題右遭,例如數(shù)據(jù)加密,數(shù)據(jù)格式轉(zhuǎn)換等缤削,可以通過自定義函數(shù)的方式來實(shí)現(xiàn)窘哈。
先使用Java IDE編寫基于JMeter庫(kù)的自定義函數(shù):
第一步創(chuàng)建一個(gè)Java project:
在Java project的build Path中倒入Jmeter的依賴庫(kù)ApacheJMeter_core.jar和ApacheJMeter_function.jar:
在Java project下面創(chuàng)建Java package,名字以functions結(jié)尾:
這時(shí)因?yàn)樵贘meter.propeties中定義了Jmeter查找class的規(guī)則:
創(chuàng)建java class亭敢,選擇自定義java class的父類滚婉,繼承自org.apache.jmeter.functions.AbstractFunction
注意:
1. 自定義函數(shù)的package的名字的最后必須是.functions
2. 自定義函數(shù)是需要繼承Jmeter的org.apache.jmeter.functions.AbstractFunction
自動(dòng)生成的class文件中,getReferenceKey()函數(shù)是用于返回自定義函數(shù)的名字帅刀,下面的例子中让腹,自定義函數(shù)名是“__Hello”:
函數(shù)execute是Jmeter自定義函數(shù)的主要邏輯代碼,在這里寫自己的業(yè)務(wù)邏輯:
然后將寫好的Java類函數(shù)導(dǎo)出為Jar file:
將導(dǎo)出的jar文件放入Jmeter的lib/ext下面扣溺,然后重啟Jmeter:
在Jmeter的函數(shù)界面中就可以找到自定義的函數(shù)了:
上面是個(gè)簡(jiǎn)單的例子骇窍,只是介紹了Jmeter自定義函數(shù)的大致流程,下面介紹一下如何給自定義函數(shù)傳遞參數(shù)锥余,和如何在自定義函數(shù)中使用業(yè)務(wù)jar包腹纳。
首先說明Jmeter自定義函數(shù)的原則,建議把業(yè)務(wù)相關(guān)的代碼單獨(dú)打成jar包驱犹,然后在Jmeter自定義函數(shù)中引用嘲恍。
先寫一個(gè)簡(jiǎn)單Java class來模擬業(yè)務(wù)邏輯代碼:
把業(yè)務(wù)邏輯代碼導(dǎo)出為jar包,在Jmeter自定義java project中倒入:
在Jmeter 自定義函數(shù)類中先定義輸入?yún)?shù)列表和參數(shù)列表說明雄驹,需要結(jié)合具體的業(yè)務(wù)場(chǎng)景來設(shè)定佃牛。通過調(diào)用add方法來添加多個(gè)函數(shù)的輸入?yún)?shù):
定義全局變量用于接受輸入的參數(shù)值:
修改setParameters方法來接受和處理用戶調(diào)用函數(shù)時(shí)所傳遞的參數(shù)值:
接下來修改execute方法,把自定義函數(shù)的業(yè)務(wù)邏輯寫在這個(gè)方法里面荠医,先實(shí)例化業(yè)務(wù)類Calc吁脱,然后調(diào)用實(shí)例的方法處理輸入?yún)?shù),并返回相應(yīng)的輸出:
然后將寫好的自定義函數(shù)導(dǎo)出為jar包彬向,放入Jmeter的lib/ext目錄下兼贡,再將業(yè)務(wù)邏輯包放入Jmeter的lib目錄下,重啟Jmeter娃胆,就可以在函數(shù)助手里調(diào)用自定義函數(shù)了: