您好,登錄后才能下訂單哦!
- 需求分析
在做接口自動(dòng)化和性能測試,經(jīng)常會(huì)遇到一些請求參數(shù)是根據(jù)上一個(gè)請求結(jié)果,動(dòng)態(tài)變化的參數(shù)個(gè)數(shù),參數(shù)名可能相同,也可能為序列遞增格式,參數(shù)個(gè)數(shù)可能為10、20個(gè),這樣就導(dǎo)致手工不好模擬該請求效果,需要進(jìn)行封裝自定義函數(shù)才能實(shí)現(xiàn)該效果
??Jmeter是一款開源的性能測試工具,目前是行業(yè)內(nèi)使用率最高的性能測試工具之一,Jmeter是使用JAVA語言開發(fā)的,本文介紹如何使用JAVA語言開發(fā)自己需要的擴(kuò)展函數(shù)
- 目前業(yè)界流行的兩種開發(fā)模式,本文介紹第二種
1、使用Jmeter二次開源環(huán)境,直接在org.apache.jmeter.functions包下面開發(fā)自己需要的函數(shù),然后導(dǎo)出該jar包,替換Jmeter目錄的ApacheJMeter_functions.jar文件
2、直接在Maven 項(xiàng)目下開發(fā)自定義函數(shù),然后打包,該方法、簡單、高效
- 開發(fā)思路
1、使用Eclipse創(chuàng)建Maven 項(xiàng)目,配置Pom文件,引入擴(kuò)展function所需的依賴包;
2、創(chuàng)建類,然后繼承AbstractFunction,實(shí)現(xiàn)四個(gè)主方法;
3、對編寫好的項(xiàng)目進(jìn)行編譯、打包
4、把打包好的函數(shù)放到j(luò)meter擴(kuò)展目錄,調(diào)用自定義函數(shù),檢查是否正確;
JDK環(huán)境 | Jmeter依賴包版本 | Maven倉庫版本 |
---|---|---|
1.8 | 4.0 | 3.5.3 |
一、新建Maven項(xiàng)目
1.File》New》Project,選擇Maven》Maven Project,一直點(diǎn)擊Next,此處Package包名一定要以.functions格式結(jié)束,否則開發(fā)出來的函數(shù),Jmeter讀取不到
2.配置Pom文件,Pom文件配置的Jmeter4.0版本,只要保存了Pom文件,系統(tǒng)就會(huì)自動(dòng)下載和關(guān)聯(lián)相應(yīng)的jar包,Pom配置文件如下:
3.保存Pom文件之后,系統(tǒng)會(huì)自動(dòng)下載關(guān)聯(lián)的依賴文件,如下圖:
4.此時(shí),由于對pom文件進(jìn)行了修改,項(xiàng)目頂層會(huì)出現(xiàn)一把×,并且編譯可能就會(huì)報(bào)錯(cuò),需要執(zhí)行Maven》Update Project更新外部依賴的Jar包
JMeter設(shè)計(jì)讓一些核心的類可以在非UI的方式下運(yùn)行的時(shí)候能被加載進(jìn)來,這些類會(huì)被優(yōu)先加載。加載這些類的時(shí)候是通過命名規(guī)則來實(shí)現(xiàn)的。所有實(shí)現(xiàn)function的類必需包含".functions",所以我們自定義實(shí)現(xiàn)的類里必須包含".functions",比如如下申明的包名為:"jmeter.test.functions"
1.2. 首先在Jmeter.test.functions包下創(chuàng)建一個(gè)類,類名稱為Save_Body_Data,需要繼承AbstractFunction類,然后實(shí)現(xiàn)父類的四個(gè)方法
private static final List<String> desc = new LinkedList<String>(); /*該變量用來獲取對參數(shù)值輸入進(jìn)行描述*/
private static final String KEY = "__Media_Save_Body_Data"; /*這個(gè)是在函數(shù)助手上顯示的函數(shù)名稱*/
static {
desc.add("請輸入第一個(gè)參數(shù),類似variable=value,其中變量值可以寫成變量格式,格式為${value},如果有多個(gè)參數(shù),只需要用&連接"
+ "類似variable=value&variable1=value1,第一個(gè)參數(shù)也可以置空,然后在Body data中填寫也行");
desc.add("請輸入第二個(gè)參數(shù),該參數(shù)為變化的序列id,需要和jmeter中獲取的變量名保持一致");
desc.add("請輸入第三個(gè)參數(shù),該參數(shù)為申明重復(fù)參遞增參數(shù)名是否一樣,填否則序列遞增,如id[0]、id[1],不填則默認(rèn)相同");
desc.add("請輸入第四個(gè)參數(shù),該參數(shù)值是用來在jmeter的Body_Data用來調(diào)用的,可以根據(jù)需要自定義,不填則默認(rèn)為第二個(gè)參數(shù)名");
desc.add("請輸入第五個(gè)參數(shù),該參數(shù)為序列的連接字符比如%、&,不填則默認(rèn)為&");
/*該描述是針對函數(shù)的輸入值進(jìn)行描述*/
}
這里主要是定義變量desc、KEY 然后將描述顯示到函數(shù)的參數(shù)描述中,如下圖
setParameters函數(shù)作用就是獲取函數(shù)輸入框界面輸入的值,將輸入的值傳遞給execute
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
/*該函數(shù)用來獲取輸入的值*/
/*這里,后面的1,2分別指接受的最小參數(shù)個(gè)數(shù)為1,以及接受的最大參數(shù)個(gè)數(shù)為5*/
checkParameterCount(parameters,1,5);
values = parameters.toArray();
/*將值存入類變量中,把接受到的參數(shù)裝成array,然后用value[i]取出來 */
}
public String getReferenceKey() {
/*本方法是提供一個(gè)在Jmeter函數(shù)助手顯示的函數(shù)名稱*/
return KEY;
}
getArgumentDesc函數(shù)用來獲取對輸入?yún)?shù)的描述
public List<String> getArgumentDesc() {
/*該函數(shù)用來獲取對輸入?yún)?shù)的描述*/
return desc;
}
三、編譯、打包
編譯打包完成,在target目錄會(huì)生成一個(gè)jar包,如下圖所示
四、驗(yàn)證開發(fā)的函數(shù)是否正常
- 函數(shù)功能介紹
1、本次開發(fā)的函數(shù)實(shí)現(xiàn)的效果為通過傳入5個(gè)參數(shù),其中只有第二個(gè)為必填項(xiàng),其它參數(shù)可以為空
2、第一個(gè)參數(shù)可以為空,當(dāng)為空的時(shí)候,則需要把parameters中的參數(shù)和值在body data中手動(dòng)寫入,本次就是在body data中手工寫入了不會(huì)變化的參數(shù)名,你也可以直接把這些參數(shù)傳入到第一個(gè)參數(shù),格式為funid=imp_provider&destfunid=pur_apply_provider&parentId=${apply_id}
&pagetype=import&eventcode=import&user_id=${user}&dataType=json
3、第二個(gè)參數(shù)為獲取的變量名稱,該名稱一定要和jmeter中json path中定義的參數(shù)名一致,這樣才能獲取到j(luò)meter中變化的參數(shù)
4、第三個(gè)參數(shù)為判斷重復(fù)變化的參數(shù)名稱的格式是一樣還是序列遞增,比如id[0],id[1],默認(rèn)不填相同,如果是序列遞增,只需要填否
5、第四個(gè)參數(shù)則是用來保存整個(gè)函數(shù)封裝的字符串,默認(rèn)不填則會(huì)把所有字符串封裝到第二個(gè)參數(shù)中,填寫了則封裝在該參數(shù)中,需要在body data中調(diào)用該變量,調(diào)用方式為${變量名}
6、第五個(gè)參數(shù)則為各個(gè)參數(shù)的連接方式,默認(rèn)不填則為&
Jmeter.test.functions.jar下載方法見文章末尾介紹
完整源碼如下:
? ?如果文章對你有幫助,可以在右下角點(diǎn)擊關(guān)注功能,歡迎轉(zhuǎn)發(fā)、拍磚,本人會(huì)持續(xù)推出與測試有關(guān)的文章,與大家分享測試技術(shù),每一篇原創(chuàng)文章都是用心編寫,杜絕抄襲復(fù)制,微信公眾號與本平臺(tái)文章同步,方便大家查閱
QQ技術(shù)交流群:加群請輸入驗(yàn)證信息51CTO
??????????????
微信二維碼關(guān)注公眾號:
????????????
關(guān)注之后,回復(fù)資源下載,即可獲取本人共享的各種資源下載地址
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。