您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關使用JMeter怎么實現數據庫查詢操作,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
即:在SQL Query
使用參數化變量。
在JMeter中,有兩個地方可以設置“用戶自定義變量”。
一種是“測試計劃”界面中設置“用戶自定義變量”。
一種是添加配置元件中的“用戶自定義變量”。
我們以“測試計劃”為例。如下圖:
(1)在“測試計劃”界面中設置“用戶自定義變量”。
我們添加了一個自定義變量用戶ID,如下圖:
(2)在JDBC Request
界面的SQL Query
中,使用${變量名}
的方式進行引用。
我們在Varíable Name
填寫對應的數據庫配置名稱,與JDBC Connection Configuration
組件中的Varíable Name
對應。
Query Type
:選擇Select Statement
,因為我們只進行一條查詢的SQL語句。
編寫SQL語句,并使用${變量名}
方式引用參數化變量。
如下圖所示:
傳遞的參數值有常量和變量之分。
(1)傳遞的參數值是常量
傳遞2個常量:用戶ID=3,用戶名=孫悟空。
需要注意:
如果我們需要發送帶有占位符的SQL語句,Query Type
:需要選擇Prepared Select Statement
。
Parameter values
參數值和Parameter types
參數類型,都必須要填寫(參數類型與表設計結構中的類型一致即可)。如果有多個占位符,就需要有多組數據,之間用逗號分隔。
發送SQL請求時,第一個參數會自動賦值給第一個占位符,以此類推,注意參數的編寫順序。
如下圖所示:
(2)傳遞的參數值是變量
也就是占位符所接收的參數是一個參數化變量。我們把對應常量的位置,變成參數化變量即可,其他同上。
如下圖所示:
各種形式的參數化可以這樣使用。關于參數化相關知識,前面文章有詳細說明。
Variables names
參數的作用是,把SQL語句查詢出來的數據保存到變量中。一般查詢返回幾個字段,就用幾個變量來進行接收,不同的變量之間用逗號隔開。
JMeter官網給的解釋是:如果給這個參數設置了值,它會保存SQL語句返回的數據和返回數據的總行數。
假如,SQL語句返回2行,3列的數據,且Variables names
中設置為A,B,C
,那么如下變量會被設置為:
A_#=2 # A列的總行數
A_1=3 # A列的第一個數據,也就是第1列, 第1行的數據
A_2=4 # A列的第二個數據,也就是第1列, 第2行的數據
B_#=2 # B列的總行數
B_1=sunwukong@1268.com # B列的第一個數據,也就是第2列, 第1行的數據
B_2=zhubajie@1268.com # B列的第二個數據,也就是第2列, 第2行的數據
C_#=2 # C列的總行數
C_1=孫悟空 # C列的第一個數據,也就是第3列, 第1行的數據
C_2=豬八戒 # C列的第二個數據,也就是第3列, 第2行的數據
說明:
如果返回結果為0,那么
A_#
和C_#
會被設置為0,其它變量不會設置值。如果第一次請求返回6行數據,第二次請求只返回3行數據,那么第一次那多的3行數據,在線程變量中會被清除。
可以使用
${A_#}
、${A_1}
來獲取相應的值,作為參數化數據進行傳遞。可以添加
Debug Sampler
組件,來查看參數是否獲取到了。
示例:
(1)JDBC Request
組件界面內容
在Variable names
中定義接收數據的變量名,多個變量名之間用逗號分隔。
如下圖所示:
(2)查看結果
添加一個取樣器Debug Sampler
用來查看輸出的結果。(Debug Sampler
組件可以查看到JMeter腳本運行中所有的變量)
JDBC Request
請求結果,如下圖所示:
查看Debug Sampler
中的輸出結果,如下圖所示:
我們從上圖中可以看到,JMeter把從數據庫中查詢出來的數據,存儲在線程變量中了。
提示:
A
代表第一列所有的數據,A_#
可以獲取到第一列的行數。A_n
可以獲得第一列第n行的數據。B
和C
的功能類似, 假如我們只需要第一列和第三列的數據,可以寫成A,,C
,中間的,
不可以省略。
如果給這個參數設置值,它會創建一個對象變量,保存所有返回的結果。
示例:
(1)JDBC Request
組件界面內容
在Result variable name
中定義接收數據的變量名。
如下圖所示:
(2)查看結果
添加一個取樣器Debug Sampler
用來查看輸出的結果。(Debug Sampler
組件可以查看到JMeter腳本運行中所有的變量)
JDBC Request
請求結果,如下圖所示:
查看Debug Sampler
中的輸出結果,如下圖所示:
(3)數據處理
上面查看到的結果集,我們如何應用里面的數據呢?
我們可以創建一個BeanShell
取樣器,也可以在JDBC Request
取樣器下一級添加后置處理器BeanShell PostProcessor
組件。
在里邊編寫如下代碼,來獲取需要的指定數據,提供給后面的接口請求使用。
對象中具體數據的獲取方法:columnValue = vars.getObject("resultObject").get(0).get("Column Name")
以上我們就把Parameter values
、Parameter types
、Variable names
、Result variable name
的使用方式進行了說明。
在日常工作中,可以舉一反三,靈活使用。
6、注意事項:
(1)The server time zone value
服務器時區異常
如果報錯,如下:
Cannot create PoolableConnectionFactory (The server time zone value '?????????????????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.)
解決方法:數據庫連接URL后面加 serverTimezone=GMT
或serverTimezone=GMT%2B8
,即可解決。
(2)執行多條SQL語句
執行多條SQL語句時,查詢語句select
和update
、insert
語句不能在同一個JDBC Request
組件中執行。
當執行多條SQL 語句時,每條語句后面加;
。
并且在 Database URL
后增加一個參數allowMultiQueries=true
,否則將不能夠執行多條語句,報錯。
(3)更新操作中文亂碼
需要在 Database URL
后增加一個參數characterEncoding=utf-8
,這樣就可以解決更新操作時候的中文亂碼了。
提示:一定要設置為UTF-8編碼嗎?不一定,要跟你的數據庫的編碼保持一致,就不會中文亂碼了。
(4)Datebase URL
添加參數規則
Datebase URL
后增加參數,在dbname
后加?
,如有多個參數,每個參數用&
隔開,如:
jdbc:mysql://127.0.0.1:3306/guest?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
以上就是使用JMeter怎么實現數據庫查詢操作,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。