JMeter 接口和性能測(cè)試常用函數(shù)最全解析!

JMeter工具是接口和性能測(cè)試一個(gè)非常主流的工具,其中非常強(qiáng)大的一個(gè)點(diǎn)就是封裝了很多函數(shù)可以直接調(diào)用來實(shí)現(xiàn)豐富的功能。所以,學(xué)習(xí)好JMeter的函數(shù)的使用能幫助我們更好的使用這個(gè)工具編寫接口和性能測(cè)試腳本。

函數(shù)的概念和基本介紹

因?yàn)閖meter是java開發(fā)的,所以jmeter的函數(shù)其實(shí)就是java封裝的函數(shù)和方法,可以實(shí)現(xiàn)某個(gè)功能的封裝。jmeter函數(shù)的名字都是以雙下劃線開頭,后面跟函數(shù)名稱,這個(gè)跟java命名規(guī)則是相符的,比如:__BeanShell(,),調(diào)用函數(shù)的寫法是${__BeanShell(,)}。

如果函數(shù)有參數(shù)就帶小括號(hào),沒有參數(shù)可以不要小括號(hào);多個(gè)參數(shù)之間用英文逗號(hào)分隔,多個(gè)參數(shù)時(shí)逗號(hào)不能少。

函數(shù)的參數(shù)是可以引用變量,函數(shù)可以引用變量。函數(shù)也可以引函數(shù),就是函數(shù)的嵌套調(diào)用。

Jmeter的函數(shù)有兩種:

1、自帶的函數(shù) ;比如digest的函數(shù)

2、擴(kuò)展函數(shù),比如別人寫的擴(kuò)展函數(shù)、自己二次開發(fā)寫的函數(shù):比如Md5函數(shù)就是需要導(dǎo)入jpgc的插件后才有的擴(kuò)展函數(shù)。

Jmeter常用的函數(shù)

1、${__RandomString} :隨機(jī)字符串,可以在函數(shù)的參數(shù)部分調(diào)用另外一個(gè)函數(shù),如下圖所示:

調(diào)用后運(yùn)行的結(jié)果如圖,可以隨機(jī)在指定的字符中生成5-10位長度的字符串:

2、${__time(,)} 獲取當(dāng)前的時(shí)間戳函數(shù),不能做時(shí)間的加減。默認(rèn)是時(shí)間戳,也可以定義格式:年月日 ,時(shí)分秒,年月日-時(shí)分秒

4、${__digest(,)} 進(jìn)行加密算法的函數(shù), 只能做最簡單的加密,支持如下幾種算法:

比如MD5加密算法:如果用Jmeter自帶的函數(shù),只有通過digest進(jìn)行MD5加密。

5、${__counter(,)}:計(jì)數(shù)函數(shù),用于計(jì)數(shù),比如發(fā)送了多少次請(qǐng)求的計(jì)數(shù);

注意:這個(gè)函數(shù)只能做簡單累加 +1,最大20億數(shù)字。如果超過的變量的下標(biāo),就取不到這個(gè)數(shù)據(jù)了。

第一個(gè)參數(shù)控制每個(gè)用戶有自己的獨(dú)立計(jì)數(shù)器還是所有用戶使用全局計(jì)數(shù)器:

True 每個(gè)虛擬用戶有自己的計(jì)數(shù)器,每個(gè)虛擬用戶的計(jì)數(shù)器保持獨(dú)立

FALSE:全局計(jì)數(shù)器,所有的用戶共享一個(gè)計(jì)數(shù)器,默認(rèn)是false

案例:設(shè)置3個(gè)并發(fā)用戶數(shù),每個(gè)用戶循環(huán)2次;取樣器里調(diào)用這個(gè)counter函數(shù)兩次,一個(gè)Ture一個(gè)false;查看結(jié)果樹查看計(jì)數(shù)器的結(jié)果:

True的時(shí)候,每個(gè)線程第一次都是1。第二次都是2;因?yàn)槊總€(gè)用戶都獨(dú)立維護(hù)一個(gè)計(jì)數(shù)器。每個(gè)用戶調(diào)用自己的計(jì)數(shù)器2次-【這個(gè)可以用于計(jì)算測(cè)試計(jì)劃運(yùn)行了多少次】

False的時(shí)候,線程數(shù)共享一個(gè)計(jì)數(shù)器:所以3個(gè)用戶2次循環(huán),分別123456??偣舱{(diào)用這個(gè)計(jì)數(shù)器函數(shù)6次。

第二個(gè)參數(shù):調(diào)用counter函數(shù),生成值并賦值給后面的變量名 后面的接口可以調(diào)用這個(gè)變量名,比如$ {num}, 就可以得到這個(gè)隨機(jī)數(shù)字。

這個(gè)函數(shù)的使用場(chǎng)景主要有兩個(gè):

使用場(chǎng)景1:統(tǒng)計(jì)發(fā)送請(qǐng)求的數(shù)量????

使用場(chǎng)景2:counter函數(shù)生成的數(shù)字做變量名的下標(biāo),實(shí)現(xiàn)循環(huán)依次調(diào)用多個(gè)變量;

這個(gè)有弊端:只會(huì)無限增+1 ,越界了就取不到數(shù)據(jù)了

6、${__V(,)},這個(gè)是很重要的一個(gè)函數(shù)。因?yàn)樽兞坷锊荒苤苯诱{(diào)用函數(shù)和變量,這個(gè)V函數(shù)就可以實(shí)現(xiàn)變量里調(diào)用函數(shù)和調(diào)用變量的功能

第一個(gè)參數(shù):可以是變量 ,也可以是函數(shù),相互進(jìn)行拼接,實(shí)現(xiàn)變量里調(diào)用函數(shù)和調(diào)用變量

用counter函數(shù):運(yùn)算結(jié)果里就可以看到分別調(diào)用-test1,test2,test3,test4四個(gè)變量。

執(zhí)行后會(huì)發(fā)現(xiàn)后面 循環(huán)6次,后面兩個(gè)值是空的;這就是count的弊端,只會(huì)無限增+1 ,越界了就取不到數(shù)據(jù)了。所以,此時(shí)我們可以用計(jì)數(shù)器實(shí)現(xiàn)。

7、屬性函數(shù):JMeter的用戶參數(shù)不能直接跨線程組調(diào)用,所以需要實(shí)現(xiàn)跨線程組就可以設(shè)置為屬性,屬性是工具的屬性,在哪里都可以使用,實(shí)現(xiàn)用戶參數(shù)跨線程組使用。

7.1 ${__setProperty(,)} 設(shè)置動(dòng)態(tài)屬性函數(shù)

a. 在函數(shù)里設(shè)置屬性的名字和屬性值:屬性值可以設(shè)置固定的值,也可以調(diào)用變量獲取值

b. 調(diào)用這個(gè)setProperty的函數(shù),才會(huì)添加屬性成功。

c. 運(yùn)行Jmeter腳本,會(huì)執(zhí)行這個(gè)函數(shù)的調(diào)用,就會(huì)設(shè)置屬性,此時(shí)再去檢查一下Jmeter的屬性顯示,就能看到設(shè)置的動(dòng)態(tài)屬性。

d. 一旦設(shè)置了, 要把Jmeter工具關(guān)閉了才會(huì)釋放。沒有關(guān)閉工具,屬性一直都在可用。

運(yùn)行腳本后,可以在JMeter的屬性里看到屬性值:

7.2 {__P(,)} ${__property(,)} 獲取屬性函數(shù),這兩個(gè)函數(shù)是同一個(gè)函數(shù)。

直接去獲取Jmeter屬性里的值。因?yàn)閷傩允嵌鄠€(gè)線程組共享的,這樣可以實(shí)現(xiàn)用戶參數(shù)跨線程組的使用,這個(gè)場(chǎng)景再混合場(chǎng)景性能模型的時(shí)候會(huì)使用。

總結(jié)

JMeter還有很多其他的函數(shù),但是做性能測(cè)試和接口功能測(cè)試基本上掌握以上的函數(shù)就可以,其他的函數(shù)如果工作里用到再額外學(xué)習(xí)即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容