一、下載mysql jar包
下載mysql jar包
http://dev.mysql.com/downloads/connector/j/
網盤下載地址:mysql-connector-java-commercial-5.1.25-bin.jar
查看jar包支持的mysql版本:http://dev.mysql.com/doc/connector-j/en/connector-j-versions.html
查看mysql數據庫版本:SELECT VERSION();
注:如果下載的jar包版本不支持mysql數據庫,運行Jmter時可能會報錯:no suitable driver found for jdbc:mysql//……..
為Jmeter添加jar文件
下載后解壓.zip文件,把mysql-connector-java-x.x.x-bin.jar(例中:mysql-connector-java-commercial-5.1.25-bin.jar)放到Jmeter安裝目錄下的lib目錄下(例中:D:\Program Files\apache-jmeter-2.13\lib)
2. 啟動Jmeter,添加需要的原件,Sampler
二、配置JDBC Connection Configuration
重要參數說明:
- Variable Name:數據庫連接池的名稱,我們可以有多個jdbc connection configuration,每個可以起個不同的名稱,在jdbc request中可以通過這個名稱選擇合適的連接池進行使用。
- Max Number of Connection: 數據庫最大鏈接數
- PoolTimeout: 數據庫鏈接超時,單位ms
- Idle Cleanup Interval (ms): 數據庫空閑清理的間隔時間,單位ms
- Auto Commit:自動提交。有三個選項,true、false、編輯(自己通過jmeter提供的函數設置)
- Transaction Isolation:
事務間隔級別設置,主要有如下幾個選項:(對JMX加解密)
【TRANSACTION_NODE 事務節點 、
TRANSACTION_READ_UNCOMMITTED 事務未提交讀、
TRANSACTION_READ_COMMITTED 事務已提交讀 、
TRANSACTION_SERIALIZABLE 事務序列化 、
DEFAULT 默認、
TRANSACTION_REPEATABLE_READ 事務重復讀、 - Database URL:數據庫url,jdbc:mysql://主機ip或者機器名稱:mysql監聽的端口號/數據庫名稱, 如:jdbc:mysql://localhost:3306/test
- JDBC Driver class:JDBC驅動
- username:數據庫登陸的用戶名
- passwrod:數據庫登陸的密碼
(1) Variable Name Bound to Pool
Variable Name,數據庫連接池的變量名,之后JDBC request可以通過選擇不同的連接池名來選擇不同的數據庫連接
Variable name變量名稱:與JDBC Request的Variable name保持一致
原因:因為鏈接數據庫是需要在JDBC Connection Configuration中配置好的,然后賦予一個變量名稱,那么JDBC Request想要去訪問數據庫,就必須通過這個配置好的元件去鏈接,所以JDBC Reques就需要通過讀取JDBC Connection Configuration的變量中的信息,
那怎么讀取呢,JDBC Reques就需要用到這個變量了,就需要到名稱為mysql的元件中去應用。
(2) Connection Pool Configuration
中文:池中允許的最大連接數。在大多數情況下,將其設置為0,這意味着每個線程將得到它自己的池,其中只有一個連接,即線程之間不共享連接。如果您真的想要使用共享池(為什么?),那么將max count與線程數相同,以確保線程不會相互等待。
原文:aximum number of connections allowed in the pool. In most cases, set this to zero (0) . This means that each thread will get its own pool with a single connection in it, i.e. the connections are not shared between threads. If you really want to use shared pooling (why?), then set the max count to the same as the number of threads to ensure threads don't wait on each other.
Max Wait (ms) 在連接池中取回連接最大等待時間
中文:如果在試圖檢索連接過程中(取回連接)超過所設置期限,連接池拋出一個錯誤
原文:ool throws an error if the timeout period is exceeded in the process of trying to retrieve a connection
Time Between Eviction Runs (ms) 疏散時間
中文:在空閑對象驅逐線程運行期間,可以休眠的毫秒數。當非正值時,將運行無空閑對象驅逐器線程。(默認為“60000”,1分鍾)(如果當前連接池中某個連接在空閑了time Between Eviction Runs Millis時間后任然沒有使用,則被物理性的關閉掉。)
原文:The number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no idle object evictor thread will be run. (Defaults to " 60000 ", 1 minute)
Auto Commit 自動提交sql語句
中文:打開或關閉連接的自動提交。
原文:Turn auto commit on or off for the connections.
(3) Connection Validation by Pool
這是Jmeter用來檢驗數據庫連接是否有效的一種機制,超過5秒沒有使用的話,就會用validation query去測試下這個連接是否有效
中文:測試連接池的空閑連接,驗證查詢將會被使用去測試。
原文:Test idle connections of the pool, see BasicDataSource.html#getTestWhileIdle . Validation Query will be used to test it.
Soft Min Evictable Idle Time(ms)
中文:最少的時間連接可能在池中閑置,然后才有資格被閑置的對象驅逐出去,額外的條件是至少在池中保持連接。默認值為5000(5秒)
原文:Minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle object evictor, with the extra condition that at least minIdle connections remain in the pool. See BasicDataSource.html#getSoftMinEvictableIdleTimeMillis . Defaults to 5000 (5 seconds)
(4) Database Connection Configuration
Database URL: jdbc:mysql://服務器地址:3306/數據庫名
(比如:jdbc:mysql://ip:3306/數據庫名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true)
備注:“&allowMultiQueries=true” 這句話的意思呢 是為了在JDBC中執行多條select語句的時候用的!
JDBC Driver class:數據庫JDBC驅動類名:com.mysql.jdbc.Driver
Username:數據庫連接用戶名
password:數據庫連接密碼
例如(上面url或class如有問題,可試一試下面的):
Database URL: jdbc:mysql://localhost:3306/information_schema?serverTimezone=GMT%2B8
JDBC Driver class: com.mysql.cj.jdbc.Driver
Username:root
password:xxx
不同數據庫具體的填寫方式,可以參考下面的表格:
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 |
Ingres (2006) |
ingres.jdbc.IngresDriver |
jdbc:ingres://host:port/db[;attr=value] |
MSSQL |
com.microsoft.sqlserver.jdbc.SQLServerDriver 或者 net.sourceforge.jtds.jdbc.Driver |
jdbc:sqlserver://IP:1433;databaseName=DBname 或者 jdbc:jtds:sqlserver://localhost:1433/"+"library"
|
填寫后大致如下:
三、配置JDBC Request
重要的參數說明:
- Variable Name:數據庫連接池的名字,需要與JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
- Query:填寫的sql語句未尾不要加“;”
- Parameter valus:參數值
- Parameter types:參數類型,可參考:Javadoc for java.sql.Types
- Variable names:保存sql語句返回結果的變量名
- Result variable name:創建一個對象變量,保存所有返回的結果
- Query timeout:查詢超時時間
- Handle result set:定義如何處理由callable statements語句返回的結果
執行到這里,我們已經將數據從數據庫中原樣的查出來了,但具體如何之取出我們需要的數據呢,顯然,假如我們查詢的sql返回的只是一個數據,上面的方式已經可以滿足我們的需求的,如我們查詢數據的記錄數,
select count(*) from test
查詢出來的結果就是我們需要的內容,或者通過正則表達式的獲取即可獲取我們的內容。
但假如像上面那樣子,我們獲取出來的是多行數據,我們需要如何來對數據進行遍歷,只獲取出我們需要的數據呢?請看下面的分析。