Jmeter全方面講解——Jmeter的元件使用介紹:(四)前置處理器詳解


Jmeter的前置處理器可以用來在取樣器執行前做一些數據准備操作,也需要注意使用的作用域問題。常用的前置處理器有:用戶參數、BeanShell預處理器、JDBC預處理器。

一、用戶參數
【用戶參數】與前面介紹過的【用戶定義的變量】有相似之處,先來介紹下用戶參數的使用方法再去區分兩者的異同。
1、注意作用域的問題,(1)如果是放在測試計划下,則整個測試計划都可以引用該處定義的變量
(2)如果是放在線程組下,則只能在所放的線程組下引用
(3)如果是在請求下,則只能在具體請求下引用

2、用戶參數有名稱,用戶_N的定義,下面進行實例講解。
實例1:只定義一個用戶,則在引用變量的時候,永遠都是這個用戶的值。如圖:
image

image

image

執行結果:
image

實例2:定義多個用戶,則在引用變量的時候,會進行順序循環取對應用戶的值。如圖:
image

image

執行結果:
image

image

3、【用戶參數】與【用戶自定義的變量】的區別:
(1)【用戶參數】可以給每個參數賦多個值,而【用戶自定義的變量】只能賦一個值。
image

image

此處引發了一個思考,如果【用戶參數】與【用戶定義的變量】的變量名稱重復的時候,會引用哪個值呢?答案是會引用到【用戶參數】的值,此處是就近原則,離取樣器執行前最近的一次賦值為准。如此案例中,【用戶參數】與【用戶定義的變量】都含有name變量,則在執行的時候,會引用了【用戶參數】的值。
執行結果:
image

(2)【用戶參數】會在每次取樣器執行之前都運行一次,而【用戶自定義的變量】只會運行一次,這里使用在兩個元件中都使用time函數舉例
image

image

image

image

執行結果:
image

image

image

可以觀察到,用戶參數time1的變量值每次執行請求前都會變化一次,而用戶定義的變量time2的變量值都不會變。

二:Beanshell前置處理器
該元件功能十分強大,可以編寫Java代碼進行一些數據准備等操作。
1、先介紹下Jmeter里Beanshell的內置變量操作
(1)vars變量:用來操作Jmeter的變量值得,常用的方法有:
(1.1)vars.get("key"):從Jmeter變量中獲取指定鍵的值
(1.2)vars.put("key","value"):向Jmeter變量設置變量鍵值對
例子:
image
附上代碼:
String name=vars.get("name"); //此處獲取Jmeter的變量值轉換成Java的變量
log.info("獲取到的變量值為:="+name);//打印一下獲取的變量值

vars.put("phone","13211111111"); //向Jmeter變量中設置一個phone變量
log.info("設置phone的變量值為:="+vars.get("phone")); //打印一下設置的phone值
通過此變量可以對Jmeter變量進行設置或者獲取操作。點擊下右上角的三角形即可查看日志。
日志信息為:
image

image

(2)ctx變量:用來獲取當前線程的上下文信息,常用方法:
(2.1)ctx.getVariables().get("key"):等價於vars.get("key"),從Jmeter變量中獲取指定鍵的值
(2.2)ctx.getProperties().getProperty("key"):獲取Jmeter的屬性,這里可以獲取Jmeter.properties配置文件下的屬性。
(2.3)ctx.getThreadNum():獲取當前線程組編號
例子:
image

附上代碼:
log.info("=通過ctx形式獲取一下Jmeter存儲的變量:="+ctx.getVariables().get("name"));
log.info("
=通過ctx形式獲取一下Jmeter屬性:="+ctx.getProperties().getProperty("sampleresult.default.encoding")); //此處驗證下獲取我們先前配置的編碼屬性
log.info("=====通過ctx形式獲取一下當前線程編號:="+ctx.getThreadNum());

日志展示:
image

(3)log變量:用來記錄日志,會寫進jmeter.log文件中,常用方法:
(3.1)log.info():打印普通日志
(3.2)log.warn():打印警告日志
(3.3)log.error():打印錯誤日志
例子:
image

(4)props變量:用來操作jmeter的屬性的,常用方法有:
(4.1)props.get("propName"):獲取Jmeter的指定屬性信息
(4.2)props.put("propName","propValue"):給Jmeter設置屬性
(4.3)props.containsKey("key"):判斷Jmeter是否存在指定key的屬性
(4.4)props.contains("values"):判斷Jmeter是否存在指定value的屬性
例子:
image
附上代碼:
log.info("通過props變量獲取下Jmeter的編碼屬性:"+props.get("sampleresult.default.encoding"));
log.info("通過props變量判斷下Jmeter的編碼屬性是否存在:"+props.containsKey("sampleresult.default.encoding"));

2、再來介紹下Beanshell的自帶數組傳參的使用
先看圖:
image
Beanshell是支持將變量值傳入到這里的數組的,多個值用“空格”隔開,下面舉個例子:

image

3、還有更高級的功能,比如:通過導入外部Jar包,調用外部Jar包的方法,完成自定義的功能,后續介紹到高級部分再進行補充

4、下面進行實際使用
(1)、在取樣器執行前,准備一些必要的參數,如時間參數
image

通過這個前置處理器提供了這個time變量參數,就可以在取樣器中使用該變量了
image

執行結果:
image

三:JDBC預處理器
用於在執行JDBC請求前,進行一些數據准備等操作,比如腳本在執行前,需要在數據庫新建一些記錄等數據。
例子:通過JDBC預處理器向數據庫中插入一些數據。

(1)執行JDBC預處理器前的表數據:
image

(2)編寫JDBC預處理器
image

(3)執行后,查看數據庫,數據新增成功了
image

(4)對上述例子可以改進下,有時候我們造數據的時候,可能是需要隨機生成一些測試數據的,那么我們就可以通過隨機變量傳進去。
image


免責聲明!

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



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