JDBC Request
這個Sampler可以向數(shù)據(jù)庫發(fā)送一個jdbc請求(sql語句),并獲取返回的數(shù)據(jù)庫數(shù)據(jù)進行操作吆视。它經(jīng)常需要和JDBC Connection Configuration配置原件(配置數(shù)據(jù)庫連接的相關(guān)屬性,如連接名诺凡、密碼等)一起使用变屁。
一、準備工作
1揽咕、本文使用的是mysql數(shù)據(jù)庫進行測試
2悲酷、數(shù)據(jù)庫中有表:user,表的數(shù)據(jù)結(jié)構(gòu)如下:
3心褐、下載mysql-connector-java-5.1.41舔涎,將jar包放置到Jmeter安裝目錄下的lib目錄下
二、配置JDBC Connection Configuration
添加JDBC Connection Configuration組件
參數(shù)說明:
- Variable Name:數(shù)據(jù)庫連接池的名稱逗爹,我們可以有多個jdbc connection * configuration亡嫌,每個可以起個不同的名稱,在jdbc request中可以通過這個名稱選擇合適的連接池進行使用掘而。
- Database URL:數(shù)據(jù)庫url挟冠,格式為jdbc:mysql://主機ip或者機器名稱:mysql監(jiān)聽的端口號/數(shù)據(jù)庫名稱, 如:jdbc:mysql://localhost:3306/test
- JDBC Driver class:JDBC驅(qū)動
- username:數(shù)據(jù)庫登陸的用戶名
- passwrod:數(shù)據(jù)庫登陸的密碼
不同數(shù)據(jù)庫具體的填寫方式袍睡,可以參考下面的表格:
Datebase | Driver class | Database URL |
---|---|---|
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://host:port/{dbname} |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql:{dbname} |
Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:user/pass@//host:port/service |
三知染、配置JDBC Request
添加JDBC Request請求
重要的參數(shù)說明:
- Variable Name:數(shù)據(jù)庫連接池的名字,需要與JDBC Connection
- Configuration的Variable Name Bound Pool名字保持一致
- Query:填寫的sql語句未尾不要加“;”
- Parameter valus:參數(shù)值
- Parameter types:參數(shù)類型斑胜,可參考:Javadoc for java.sql.Types
- Variable names:保存sql語句返回結(jié)果的變量名
- Result variable name:創(chuàng)建一個對象變量控淡,保存所有返回的結(jié)果
- Query timeout:查詢超時時間
- Handle result set:定義如何處理由callable statements語句返回的結(jié)果
配置好后嫌吠,查看執(zhí)行結(jié)果:
執(zhí)行到這里,我們已經(jīng)將數(shù)據(jù)從數(shù)據(jù)庫中原樣的查出來了掺炭,但具體如何之取出我們需要的數(shù)據(jù)呢辫诅,顯然,假如我們查詢的sql返回的只是一個數(shù)據(jù)涧狮,上面的方式已經(jīng)可以滿足我們的需求的炕矮,如我們查詢數(shù)據(jù)的記錄數(shù):
select count(*) from test
查詢出來的結(jié)果就是我們需要的內(nèi)容,或者通過正則表達式的獲取即可獲取我們的內(nèi)容者冤。
但假如像上面那樣子肤视,我們獲取出來的是多行數(shù)據(jù),我們需要如何來對數(shù)據(jù)進行遍篩選涉枫,只獲取出我們需要的數(shù)據(jù)呢邢滑?請看下面的分析。
四愿汰、JDBC Request參數(shù)化
方法(一)殊鞭、定義變量,在sql query中使用變量:
1尼桶、在Test Plan 中定義一個變量(當然也可以使用參數(shù)化:Jmeter參數(shù)化):
2操灿、在sql query 中使用${變量名}的方式引用:
select * from test where name='${name}'
3、執(zhí)行結(jié)果
方法(二)泵督、在sql query中使用”趾盐?“作為占位符,并傳遞參數(shù)值和參數(shù)類型小腊,如下圖所示:
1救鲤、傳遞的參數(shù)值是常量,如圖傳遞2個變量秩冈,多個變量使用“本缠,” 分隔。這里假如你有數(shù)據(jù)是int類型的入问,也要在Parameter types 那里標示為varchar類型丹锹,否則無法運行。
2芬失、傳遞的參數(shù)值是變量楣黍,使用${變量名}的方式