beanshell是jmeter內嵌的一個java解釋器,大概175k,比較小,你可以在這個元件中運行自己的腳本,前置處理器,定時器,取樣器,斷言,監聽器都有beanshell元件,但是都大同小異,先來看beanshell前置處理器

reset interpreter:是否每次都重啟解釋器,可以不用動,但是大並發量的情況下官方建議改為true
parameter:其中的數據會被自動轉換出string類型,不需要加“”,第一個參數用bsh.args[0]調用,第二個參數用bsh.args[1]調用,Parameters可以引用全部的參數,如圖所示:


File name:要引用的腳本地址
script:我們自己編寫腳本的地方
常用的內置變量有:
log:log.info(string s),打印如上,也可以log.error(string s),不過這個會有紅色警告

ctx:訪問上下問,比如線程的編號等
vars:這個是最常用的,用來設置變量以便后面引用,常用的方法,vars.put(string s,string s1 ),vars.get(string s),vars.putObject(string s,Object o),vars.getObject(string s )


props:訪問bin目錄下面jmeter.properties中的各種屬性,也可以修改,常用方法,props.put(string s,string s),props.get(string s)

prev:訪問之前的取樣器的內容,常用的prev.getResponseDataAsString(),返回的可能是json字符串,需要用json庫去解析。

常用的beanshell有:
beanshell前置處理器:用來對數據進行處理,如接口的加密,通過jar包來對參數進行加密,jar包放在lib目錄下
beanshell定時器:利用線程的sleep方法來靈活休眠
beashell后置處理器:調用prev變量來獲取前面請求的返回值,頭部信息等
beashell斷言:這個是最好用的,當其他的斷言無法滿足需求時(如判斷返回值是否是一個六位的整數),可以編寫代碼:


可以在這里做出一些判斷,如果不滿足則斷言失敗,方法為SampleResult.setSuccessful(false)或者Failure=true,也可以像上面一樣利用prev獲取響應的數據。
常用的就這些變量吧,其中ctx中有許多方法,如設置變量等,可以用於線程間的傳參,prev可以獲取請求和響應的所有內容(請求頭,狀態碼等),總之功能很強大。
