場景1:業務單據參數化時要生成一組(多個時間,好比訂單日期,發貨日期等)將來的時間,運用JMeter提供的時間函數並不能較好的完成java
場景2:測試Java接口,確又不想繼承AbstractJavaSamplerClient 來完成,此時能夠用BeanShell Sampler來完成函數
場景3:線程共享變量,咱們但願線程之間共享一個變量,能夠利用BeanShell來完成性能
其它功能本身類推......測試
場景1:生成訂單日期與發貨日期,而後放入變量spa
場景1:業務單據參數化時要生成一組(多個時間,好比訂單日期,發貨日期等)將來的時間,運用JMeter提供的時間函數並不能較好的完成線程
場景2:測試Java接口,確又不想繼承AbstractJavaSamplerClient 來完成,此時能夠用BeanShell Sampler來完成調試
場景3:線程共享變量,咱們但願線程之間共享一個變量,能夠利用BeanShell來完成orm
其它功能本身類推......blog
場景1:生成訂單日期與發貨日期,而後放入變量繼承
代碼方便複製粘貼:
[java] view plaincopyprint?
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
String nowDate = sf.format(date);
Calendar cal = Calendar.getInstance();
cal.setTime(sf.parse(nowDate));
cal.add(Calendar.DAY_OF_YEAR, +3);
String chanceDate = sf.format(cal.getTime());
cal.add(Calendar.DAY_OF_YEAR, +7);
String planFinishDate = sf.format(cal.getTime());
vars.put("orderDate",chanceDate);
vars.put("delivery",planFinishDate);
這裏的 orderDate delivery 在Vars中,在JMeter中是以Map的形式存放的,咱們只須要${變量名}來引用,變量可以保證數據一致性(簡單說就是線程互不干擾)。走起,調用試試:
1.Java請求調用
2.結果樹中察看
若是這兩個時間(orderDate,delivery)在測試過程當中只須要生成一次,能夠把BeanShell Sampler 放在僅一次控制器下,這樣性能更加。
場景2:
下面BeanUtil是一個接口程序,已經打包BeanShell.jar,如今測試其中的getUserName與getAddress方法
直接用BeanShell Sampler到調用接口方法:
上圖中,咱們簡單的調用了getUserName()與getAddress()方法
log.error是在控制檯輸出結果(僅僅調試的時候用,正式測試時去除掉)。
vars.put()是把取得的結果放到變量,供下一個Sampler調用()。
固然有個最得要的部分別忘記了,接口包BeanShell.jar要放到%JMETER_HOME%\lib目錄(建議),固然你也能夠在測試計劃中加入(不建議)
以下圖:
若是 BeanShell.jar(你的包名能夠任意取名)依賴別的包,那麼它所依賴的包也要一道放到%JMETER_HOME%\lib目錄。
場景3
線程共享變量
JMeter中線程間共享變量能夠經過定義屬性值來完成,JMeter啓動時會讀取一些屬性文件,好比jmeter.properties、user.properties,這些屬性
值是能夠增長的,也能夠修改的,經過BeanShell能夠對其進行更改。
以BeanShell Sampler爲例,在其中經過props.put()來增長屬性,props.get()來獲取屬性。
在其它Sampler中,好比Java Sampler中經過 ${__property(【屬性名稱】,,)}來獲取。
上圖中加入一個test屬性,下圖用 ${__property(test,,)}引用。
結束!
轉載至:http://mp.weixin.qq.com/s?__biz=MjM5Mjg0MzMzMw==&mid=212500831&idx=2&sn=e63797a433ff18aef548184c3f210432&scene=0#rd