提示:
關(guān)于JMeter如何連接MySQL數(shù)據(jù)庫(kù),前面文章已經(jīng)詳解的講解過了。因?yàn)榕渲脭?shù)據(jù)庫(kù)連接是比較固定的步驟,這里就不重復(fù)講解了。
本篇文章主要詳細(xì)說(shuō)明,使用JDBC Request
組件,如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢的各種操作。
JMeter中查詢語(yǔ)句的操作步驟:
- 添加測(cè)試計(jì)劃。
- 添加線程組,設(shè)置線程組的次數(shù)。
- 添加
JDBC Connection Configuration
組件,配置數(shù)據(jù)庫(kù)連接。
- 添加
JDBC Request
請(qǐng)求,編寫SQL語(yǔ)句,使用參數(shù)化。運(yùn)行腳本,發(fā)送SQL請(qǐng)求。
- 添加察看結(jié)果樹,查看結(jié)果。
1、使用“用戶自定義變量”實(shí)現(xiàn)參數(shù)化
即:在SQL Query
使用參數(shù)化變量。
在JMeter中,有兩個(gè)地方可以設(shè)置“用戶自定義變量”。
一種是“測(cè)試計(jì)劃”界面中設(shè)置“用戶自定義變量”。
一種是添加配置元件中的“用戶自定義變量”。
我們以“測(cè)試計(jì)劃”為例。如下圖:
(1)在“測(cè)試計(jì)劃”界面中設(shè)置“用戶自定義變量”。
我們添加了一個(gè)自定義變量用戶ID,如下圖:
(2)在JDBC Request
界面的SQL Query
中,使用${變量名}
的方式進(jìn)行引用。
- 我們?cè)?code>Varíable Name填寫對(duì)應(yīng)的數(shù)據(jù)庫(kù)配置名稱,與
JDBC Connection Configuration
組件中的Varíable Name
對(duì)應(yīng)。
Query Type
:選擇Select Statement
,因?yàn)槲覀冎贿M(jìn)行一條查詢的SQL語(yǔ)句。
- 編寫SQL語(yǔ)句,并使用
${變量名}
方式引用參數(shù)化變量。
如下圖所示:
2、 在SQL Query中使用占位符傳遞參數(shù)
傳遞的參數(shù)值有常量和變量之分。
(1)傳遞的參數(shù)值是常量
傳遞2個(gè)常量:用戶ID=3,用戶名=孫悟空。
需要注意:
- 如果我們需要發(fā)送帶有占位符的SQL語(yǔ)句,
Query Type
:需要選擇Prepared Select Statement
。
Parameter values
參數(shù)值和Parameter types
參數(shù)類型,都必須要填寫(參數(shù)類型與表設(shè)計(jì)結(jié)構(gòu)中的類型一致即可)。如果有多個(gè)占位符,就需要有多組數(shù)據(jù),之間用逗號(hào)分隔。
- 發(fā)送SQL請(qǐng)求時(shí),第一個(gè)參數(shù)會(huì)自動(dòng)賦值給第一個(gè)占位符,以此類推,注意參數(shù)的編寫順序。
如下圖所示:
(2)傳遞的參數(shù)值是變量
也就是占位符所接收的參數(shù)是一個(gè)參數(shù)化變量。我們把對(duì)應(yīng)常量的位置,變成參數(shù)化變量即可,其他同上。
如下圖所示:
各種形式的參數(shù)化可以這樣使用。關(guān)于參數(shù)化相關(guān)知識(shí),前面文章有詳細(xì)說(shuō)明。
3、Variables names參數(shù)的使用方法
Variables names
參數(shù)的作用是,把SQL語(yǔ)句查詢出來(lái)的數(shù)據(jù)保存到變量中。一般查詢返回幾個(gè)字段,就用幾個(gè)變量來(lái)進(jìn)行接收,不同的變量之間用逗號(hào)隔開。
JMeter官網(wǎng)給的解釋是:如果給這個(gè)參數(shù)設(shè)置了值,它會(huì)保存SQL語(yǔ)句返回的數(shù)據(jù)和返回?cái)?shù)據(jù)的總行數(shù)。
假如,SQL語(yǔ)句返回2行,3列的數(shù)據(jù),且Variables names
中設(shè)置為A,B,C
,那么如下變量會(huì)被設(shè)置為:
A_#=2 # A列的總行數(shù)
A_1=3 # A列的第一個(gè)數(shù)據(jù),也就是第1列, 第1行的數(shù)據(jù)
A_2=4 # A列的第二個(gè)數(shù)據(jù),也就是第1列, 第2行的數(shù)據(jù)
B_#=2 # B列的總行數(shù)
B_1=sunwukong@1268.com # B列的第一個(gè)數(shù)據(jù),也就是第2列, 第1行的數(shù)據(jù)
B_2=zhubajie@1268.com # B列的第二個(gè)數(shù)據(jù),也就是第2列, 第2行的數(shù)據(jù)
C_#=2 # C列的總行數(shù)
C_1=孫悟空 # C列的第一個(gè)數(shù)據(jù),也就是第3列, 第1行的數(shù)據(jù)
C_2=豬八戒 # C列的第二個(gè)數(shù)據(jù),也就是第3列, 第2行的數(shù)據(jù)
說(shuō)明:
如果返回結(jié)果為0,那么A_#
和C_#
會(huì)被設(shè)置為0,其它變量不會(huì)設(shè)置值。
如果第一次請(qǐng)求返回6行數(shù)據(jù),第二次請(qǐng)求只返回3行數(shù)據(jù),那么第一次那多的3行數(shù)據(jù),在線程變量中會(huì)被清除。
可以使用${A_#}
、${A_1}
來(lái)獲取相應(yīng)的值,作為參數(shù)化數(shù)據(jù)進(jìn)行傳遞。
可以添加Debug Sampler
組件,來(lái)查看參數(shù)是否獲取到了。
示例:
(1)JDBC Request
組件界面內(nèi)容
在Variable names
中定義接收數(shù)據(jù)的變量名,多個(gè)變量名之間用逗號(hào)分隔。
如下圖所示:
(2)查看結(jié)果
添加一個(gè)取樣器Debug Sampler
用來(lái)查看輸出的結(jié)果。(Debug Sampler
組件可以查看到JMeter腳本運(yùn)行中所有的變量)
JDBC Request
請(qǐng)求結(jié)果,如下圖所示:
查看Debug Sampler
中的輸出結(jié)果,如下圖所示:
我們從上圖中可以看到,JMeter把從數(shù)據(jù)庫(kù)中查詢出來(lái)的數(shù)據(jù),存儲(chǔ)在線程變量中了。
提示:
A
代表第一列所有的數(shù)據(jù),A_#
可以獲取到第一列的行數(shù)。A_n
可以獲得第一列第n行的數(shù)據(jù)。B
和C
的功能類似, 假如我們只需要第一列和第三列的數(shù)據(jù),可以寫成A,,C
,中間的,
不可以省略。
4、Result variable name參數(shù)使用方法
如果給這個(gè)參數(shù)設(shè)置值,它會(huì)創(chuàng)建一個(gè)對(duì)象變量,保存所有返回的結(jié)果。
示例:
(1)JDBC Request
組件界面內(nèi)容
在Result variable name
中定義接收數(shù)據(jù)的變量名。
如下圖所示:
(2)查看結(jié)果
添加一個(gè)取樣器Debug Sampler
用來(lái)查看輸出的結(jié)果。(Debug Sampler
組件可以查看到JMeter腳本運(yùn)行中所有的變量)
JDBC Request
請(qǐng)求結(jié)果,如下圖所示:
查看Debug Sampler
中的輸出結(jié)果,如下圖所示:
(3)數(shù)據(jù)處理
上面查看到的結(jié)果集,我們?nèi)绾螒?yīng)用里面的數(shù)據(jù)呢?
我們可以創(chuàng)建一個(gè)BeanShell
取樣器,也可以在JDBC Request
取樣器下一級(jí)添加后置處理器BeanShell PostProcessor
組件。
在里邊編寫如下代碼,來(lái)獲取需要的指定數(shù)據(jù),提供給后面的接口請(qǐng)求使用。
對(duì)象中具體數(shù)據(jù)的獲取方法:columnValue = vars.getObject("resultObject").get(0).get("Column Name")
5、總結(jié):
以上我們就把Parameter values
、Parameter types
、Variable names
、Result variable name
的使用方式進(jìn)行了說(shuō)明。
在日常工作中,可以舉一反三,靈活使用。
6、注意事項(xiàng):
(1)The server time zone value
服務(wù)器時(shí)區(qū)異常
如果報(bào)錯(cuò),如下:
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ù)庫(kù)連接URL后面加 serverTimezone=GMT
或serverTimezone=GMT%2B8
,即可解決。
(2)執(zhí)行多條SQL語(yǔ)句
執(zhí)行多條SQL語(yǔ)句時(shí),查詢語(yǔ)句select
和update
、insert
語(yǔ)句不能在同一個(gè)JDBC Request
組件中執(zhí)行。
當(dāng)執(zhí)行多條SQL 語(yǔ)句時(shí),每條語(yǔ)句后面加;
。
并且在 Database URL
后增加一個(gè)參數(shù)allowMultiQueries=true
,否則將不能夠執(zhí)行多條語(yǔ)句,報(bào)錯(cuò)。
(3)更新操作中文亂碼
需要在 Database URL
后增加一個(gè)參數(shù)characterEncoding=utf-8
,這樣就可以解決更新操作時(shí)候的中文亂碼了。
提示:一定要設(shè)置為UTF-8編碼嗎?不一定,要跟你的數(shù)據(jù)庫(kù)的編碼保持一致,就不會(huì)中文亂碼了。
(4)Datebase URL
添加參數(shù)規(guī)則
Datebase URL
后增加參數(shù),在dbname
后加?
,如有多個(gè)參數(shù),每個(gè)參數(shù)用
隔開,如:
jdbc:mysql://127.0.0.1:3306/guest?serverTimezone=GMTuseUnicode=truecharacterEncoding=utf-8allowMultiQueries=true
參考:https://www.cnblogs.com/linbo3168/p/6039489.html
以上就是JMeter對(duì)數(shù)據(jù)庫(kù)的查詢操作 的詳細(xì)內(nèi)容,更多關(guān)于JMeter數(shù)據(jù)庫(kù)操作 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- python軟件測(cè)試Jmeter性能測(cè)試JDBC Request(結(jié)合數(shù)據(jù)庫(kù))的使用詳解
- Jmeter基于JDBC請(qǐng)求實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)測(cè)試
- Jmeter連接Mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)過程詳解
- Jmeter連接數(shù)據(jù)庫(kù)過程圖解