Jmeter使用筆記之函數


用Jmeter才做了一個項目的測試,就不得不對函數這部分吐槽一下,真是有點弱,難怪大多數人不用這個功能,不過如果用的好也是很方便的,以下慢慢說。

一、BeanShell函數

在測試中遇到了時間戳的加減,查到發現__BeanShell可以做表達式的運算,滿心歡喜的用了,結果發現沒有結果,再三確認發現不是自己使用的問題,隨即

測試了12+12,發現沒有問題。最后猜測應該是這個函數是int類型的計算,測試后發現這里的最大值就是int類型的最大值。(心里又默默的吐槽了一番為何

不弄成long類型呢?)

二、javaScript函數

1、由於BeanShell無法滿足自己的要求,隨機查看發現了__javaScript函數,於是開始使用,函數如下${__javaScript(new Date(2016,0,29).valueOf(),)},設置如下

發現HTTP的請求中原樣輸出了,為什么呢?

new Date(2016,0,29).valueOf()這個在瀏覽器的控制台執行時沒有任何問題的!這個問題也無從考證。

后來用new Date().valueOf()發現可以,那怎樣才能得到指定時間的時間戳呢?

經過不斷反復的驗證,發現在Jmeter中如果用__javaScript函數取得指定日期的時間戳,只能通過${__javaScript(new Date("Jan 29 2016").valueOf(),)},必須是

字符串初始化才可以,其他的都不行。(這里又再次吐槽了一番,設計了這個函數,為何功能這么弱?)

2、__javaScript函數操作路徑

 

上面的設置是得不到正確路徑的為什么呢?如下,"E:\\jmeter"+".dat",這個在瀏覽器的console執行時沒有問題的?

后來把"E:\\jmeter"+".dat"改為"E:\\\\jmeter"+".dat"執行成功,才恍然大悟,從然是執行的JS但是參數的傳遞還是通過Java來的,所以

才會造成這種現象

三、threadNum函數

測試中難免要用到跟線程相關的參數,這時候可能會想到${__threadNum}這個線程號的函數,但是這個函數也有它的局限性,首先不能工作在配置元件中

比如用戶定義變量等等,其次多個線程組這里返回的線程號是一致的,so在設計的時候要考慮清楚

四、P函數

測試中如果遇到多個線程組之間傳遞變量的情況,可能一種方式就是用屬性才操作,那么通過${__P(,)}來讀取屬性就是一種好的方式

五、setProperty函數

變量之間傳遞屬性,那么必須設置屬性,可以通過${__setProperty(,,)}進行設置屬性。其實在剛開始的時候知道可以通過這么設置,但是卻不知道

這個函數應該運行在哪個組件中后來才了解到了beanshell。

六、time函數

一般HTTP請求中的隨機數都是通過時間戳的方式生成的,${__time(,)}這個函數剛好可以生產12位以毫秒為單位的時間戳,如果是10位的話${__time(/1000,)}

可以這樣使用


免責聲明!

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



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