溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

發(fā)布時間:2021-06-16 13:50:42 來源:億速云 閱讀:268 作者:Leah 欄目:開發(fā)技術

本篇文章給大家分享的是有關使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1、使用“用戶自定義變量”實現(xiàn)參數(shù)化

即:在SQL Query使用參數(shù)化變量。

在JMeter中,有兩個地方可以設置“用戶自定義變量”。

一種是“測試計劃”界面中設置“用戶自定義變量”。

一種是添加配置元件中的“用戶自定義變量”。

我們以“測試計劃”為例。如下圖:

(1)在“測試計劃”界面中設置“用戶自定義變量”。

我們添加了一個自定義變量用戶ID,如下圖:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

(2)在JDBC Request界面的SQL Query中,使用${變量名}的方式進行引用。

  1. 我們在Varíable Name填寫對應的數(shù)據(jù)庫配置名稱,與JDBC Connection Configuration組件中的Varíable Name對應。

  2. Query Type:選擇Select Statement,因為我們只進行一條查詢的SQL語句。

  3. 編寫SQL語句,并使用${變量名}方式引用參數(shù)化變量。

如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

2、 在SQL Query中使用占位符傳遞參數(shù)

傳遞的參數(shù)值有常量和變量之分。

(1)傳遞的參數(shù)值是常量

傳遞2個常量:用戶ID=3,用戶名=孫悟空。

需要注意:

  1. 如果我們需要發(fā)送帶有占位符的SQL語句,Query Type:需要選擇Prepared Select Statement

  2. Parameter values參數(shù)值和Parameter types參數(shù)類型,都必須要填寫(參數(shù)類型與表設計結構中的類型一致即可)。如果有多個占位符,就需要有多組數(shù)據(jù),之間用逗號分隔。

  3. 發(fā)送SQL請求時,第一個參數(shù)會自動賦值給第一個占位符,以此類推,注意參數(shù)的編寫順序。

如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

(2)傳遞的參數(shù)值是變量

也就是占位符所接收的參數(shù)是一個參數(shù)化變量。我們把對應常量的位置,變成參數(shù)化變量即可,其他同上。

如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

各種形式的參數(shù)化可以這樣使用。關于參數(shù)化相關知識,前面文章有詳細說明。

3、Variables names參數(shù)的使用方法

Variables names參數(shù)的作用是,把SQL語句查詢出來的數(shù)據(jù)保存到變量中。一般查詢返回幾個字段,就用幾個變量來進行接收,不同的變量之間用逗號隔開。

JMeter官網(wǎng)給的解釋是:如果給這個參數(shù)設置了值,它會保存SQL語句返回的數(shù)據(jù)和返回數(shù)據(jù)的總行數(shù)。

假如,SQL語句返回2行,3列的數(shù)據(jù),且Variables names中設置為A,B,C,那么如下變量會被設置為:

A_#=2     # A列的總行數(shù)
A_1=3     # A列的第一個數(shù)據(jù),也就是第1列, 第1行的數(shù)據(jù)
A_2=4     # A列的第二個數(shù)據(jù),也就是第1列, 第2行的數(shù)據(jù)
B_#=2     # B列的總行數(shù)
B_1=sunwukong@1268.com    # B列的第一個數(shù)據(jù),也就是第2列, 第1行的數(shù)據(jù)
B_2=zhubajie@1268.com     # B列的第二個數(shù)據(jù),也就是第2列, 第2行的數(shù)據(jù)
C_#=2     # C列的總行數(shù)
C_1=孫悟空    # C列的第一個數(shù)據(jù),也就是第3列, 第1行的數(shù)據(jù)
C_2=豬八戒    # C列的第二個數(shù)據(jù),也就是第3列, 第2行的數(shù)據(jù)

說明:

如果返回結果為0,那么A_#C_#會被設置為0,其它變量不會設置值。

如果第一次請求返回6行數(shù)據(jù),第二次請求只返回3行數(shù)據(jù),那么第一次那多的3行數(shù)據(jù),在線程變量中會被清除。

可以使用${A_#}、${A_1}來獲取相應的值,作為參數(shù)化數(shù)據(jù)進行傳遞。

可以添加Debug Sampler組件,來查看參數(shù)是否獲取到了。

示例:

(1)JDBC Request組件界面內(nèi)容

Variable names中定義接收數(shù)據(jù)的變量名,多個變量名之間用逗號分隔。

如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

(2)查看結果

添加一個取樣器Debug Sampler用來查看輸出的結果。(Debug Sampler組件可以查看到JMeter腳本運行中所有的變量)

JDBC Request請求結果,如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

查看Debug Sampler中的輸出結果,如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

我們從上圖中可以看到,JMeter把從數(shù)據(jù)庫中查詢出來的數(shù)據(jù),存儲在線程變量中了。

提示:

A代表第一列所有的數(shù)據(jù),A_#可以獲取到第一列的行數(shù)。A_n可以獲得第一列第n行的數(shù)據(jù)。BC的功能類似, 假如我們只需要第一列和第三列的數(shù)據(jù),可以寫成A,,C,中間的,不可以省略。

4、Result variable name參數(shù)使用方法

如果給這個參數(shù)設置值,它會創(chuàng)建一個對象變量,保存所有返回的結果。

示例:

(1)JDBC Request組件界面內(nèi)容

Result variable name中定義接收數(shù)據(jù)的變量名。

如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

(2)查看結果

添加一個取樣器Debug Sampler用來查看輸出的結果。(Debug Sampler組件可以查看到JMeter腳本運行中所有的變量)

JDBC Request請求結果,如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

查看Debug Sampler中的輸出結果,如下圖所示:

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

(3)數(shù)據(jù)處理

上面查看到的結果集,我們?nèi)绾螒美锩娴臄?shù)據(jù)呢?

我們可以創(chuàng)建一個BeanShell取樣器,也可以在JDBC Request取樣器下一級添加后置處理器BeanShell PostProcessor組件。

在里邊編寫如下代碼,來獲取需要的指定數(shù)據(jù),提供給后面的接口請求使用。

使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作

對象中具體數(shù)據(jù)的獲取方法:columnValue = vars.getObject("resultObject").get(0).get("Column Name")

5、總結:

以上我們就把Parameter valuesParameter types、Variable names、Result variable name的使用方式進行了說明。

在日常工作中,可以舉一反三,靈活使用。

6、注意事項:

(1)The server time zone value服務器時區(qū)異常

如果報錯,如下:

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.)

解決方法:數(shù)據(jù)庫連接URL后面加 serverTimezone=GMTserverTimezone=GMT%2B8,即可解決。

(2)執(zhí)行多條SQL語句

執(zhí)行多條SQL語句時,查詢語句selectupdateinsert語句不能在同一個JDBC Request組件中執(zhí)行。

當執(zhí)行多條SQL 語句時,每條語句后面加;。

并且在 Database URL 后增加一個參數(shù)allowMultiQueries=true,否則將不能夠執(zhí)行多條語句,報錯。

(3)更新操作中文亂碼

需要在 Database URL 后增加一個參數(shù)characterEncoding=utf-8,這樣就可以解決更新操作時候的中文亂碼了。

提示:一定要設置為UTF-8編碼嗎?不一定,要跟你的數(shù)據(jù)庫的編碼保持一致,就不會中文亂碼了。

(4)Datebase URL添加參數(shù)規(guī)則

Datebase URL后增加參數(shù),在dbname后加?,如有多個參數(shù),每個參數(shù)用&隔開,如:

jdbc:mysql://127.0.0.1:3306/guest?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true

以上就是使用JMeter怎么實現(xiàn)數(shù)據(jù)庫查詢操作,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI