Jmeter
Bean shell
最近在學習使用 Jmeter 來進行接口測試,使用 Jmeter 提供的基礎方法無法完成測試需求,所以需要編寫一些 Bean shell 腳本。下面將對 Bean shell的一些使用方法進行簡單的介紹。
1. 什么是 Bean shell
Bean shell
官網(wǎng):http://www.BeanShell.org/
-
BeanShell
是一種完全符合Java語法規(guī)范的腳本語言,并且又擁有自己的一些語法和方法; -
BeanShell
是一種松散類型的腳本語言(這點和JS類似); -
BeanShell
是用Java寫成的,一個小型的、免費的、可以下載的、嵌入式的Java
源代碼解釋器,具有對象腳本語言特性,非常精簡的解釋器jar
文件大小為175k。 -
BeanShell
執(zhí)行標準Java語句和表達式,另外包括一些腳本命令和語法。
2. Jmeter 有哪些 Bean shell
- 定時器:
BeanShell Timer
- 前置處理器:
BeanShell PreProcessor
- 采樣器:
BeanShell Sampler
- 后置處理器:
BeanShell PostProcessor
- 斷言:
BeanShell斷言
- 監(jiān)聽器:
BeanShell Listener
3. Bean shell常用內置變量
JMeter在它的BeanShell中內置了變量,用戶可以通過這些變量與JMeter進行交互,其中主要的變量及其使用方法如下:
log
:寫入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
ctx
:該變量引用了當前線程的上下文-
vars - (JMeterVariables)
:操作jmeter
變量,這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),它是測試用例與BeanShell交互的橋梁,常用方法:- a) vars.get(String key):從jmeter中獲得變量值
- b) vars.put(String key,String value):數(shù)據(jù)存到jmeter變量中
-
props - (JMeterProperties - class java.util.Properties)
:操作jmeter屬性,該變量引用了JMeter的配置信息,可以獲取Jmeter的屬性,它的使用方法與vars類似,但是只能put進去String類型的值,而不能是一個對象。對應于java.util.Properties。- a) props.get("START.HMS"); 注:START.HMS為屬性名,在文件jmeter.properties中定義
- b) props.put("PROP1","1234");
-
prev - (SampleResult)
:獲取前面的sample返回的信息,常用方法:- a) getResponseDataAsString():獲取響應信息
- b) getResponseCode() :獲取響應code
更多的方法可以查看官方文檔:http://jmeter.apache.org/api/org/apache/jmeter/
3. Bean shell 的用法
3.1 測試需求
假設現(xiàn)在有這樣的測試需求:
對 http 接口xx 進行壓力測試,需要根據(jù)時間戳隨機 uid 模擬用戶訪問,然后解析接口返回的 Json 串從中得到 vid 值并作為下一步使用,判斷該次請求返回的列表組長度及響應碼是否符合要求。
3.2 測試流程
創(chuàng)建線程組
創(chuàng)建 http sampler
-
創(chuàng)建 BeanShell PreProcessor 生成隨機 uid
可以創(chuàng)建 BeanShell PreProcessor,然后編寫隨機生成方法,這里可以自由的指定自己需要的規(guī)則。比如下圖中使用"test_ + 當前時間 + 隨機數(shù)" 的規(guī)則生成偽uid。
可以使用log.info()
方便進行調試,可以在下方的 log 中進行查看。
可以使用vars.put()
方法將變量存放到 jmeter 的變量中,然后就可以在 http 請求中通過${uid}
的方式進行使用了。
PreProcessor.PNG -
創(chuàng)建 BeanShell PostProcessor
解析返回的 json串,這里使用第三方的 fastjson.jar 來進行解析,只需要將fastjson.jar
放到 jmter 安裝目錄的lib\ext
文件夾下即可使用。PostProcessor .PNG -
創(chuàng)建 Beanshell斷言
Beanshell斷言.PNG
[參考文獻]