一、jmeter測試數據庫基本步驟:以MySQL爲例
1、需將mysql-connector-java-X.X.X-bin.jar放入到jmeter安裝目錄下的./lib目錄,重啓jmeter
2、配置JDBC Connection Configuration
其中:
Database URL爲數據庫的JDBC連接字符串
JDBC Driver class 爲驅動類名稱,需將對應jar包放入到jmeter's/lib目錄下
Username :數據庫用戶名
Password:數據庫賬號對應的密碼
以下是各數據庫Database URL、JDBC Driver class 填寫方式
數據庫名 | Database URL | Driver class |
MySQL | jdbc:mysql://host[:port]/dbname | com.mysql.jdbc.Driver |
PostgreSQL | jdbc:postgresql:{dbname} | org.postgresql.Driver |
Oracle | jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(connect_data=(sid={sid}))) | oracle.jdbc.OracleDriver |
Ingress (2006) | jdbc:ingres://host:port/db[;attr=value] | ingres.jdbc.IngresDriver |
Microsoft SQL Server (MS JDBC driver) | jdbc:sqlserver://host:port;DatabaseName=dbname | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Apache Derby | jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]] | org.apache.derby.jdbc.ClientDriver |
3、配置JDBC Request
二、JDBC Request 中各參數含義及其使用例子
1、JDBC Request面板中各參數含義
Query Type:根據不同的使用場景設置SQL的語句類型,如:Select Statement用於查詢,Update Statement則可用於更新和刪除記錄、Prepared Select Statement則爲帶參數的select 語句的查詢
Parameter values:參數的值,對應SQl中?的值,如有多個值,使用逗號分隔。若值爲NULL則使用 “]NULL[” 。結合Query Type爲Prepared Select Statement、Prepared Update Statement 來使用
Parameter types:Parameter values中參數值對應的類型,e.g. INTEGER, DATE, VARCHAR, DOUBLE,如有多個值,使用逗號分隔。
Variable names:變量名稱,用於保存Select statements, Prepared Select Statements or CallableStatement 等查詢語句返回的值,如返回多個值使用逗號分隔。
Result variable name:官網解釋:If specified, this will create an Object variable containing a list of row maps. Each map contains the column name as the key and the column data as the value。Usage:
columnValue = vars.getObject("resultObject").get(0).get("Column Name");
2、例子
以下例子共同使用到的內容
a、本地存在數據庫course,其下有一張數據表user,如下:
b、所有例子中JDBC Connection Configuration配置如下:
例子1)保存查詢語句中返回的結果
在JDBC Request 的執行語句中輸入:select userName,age from user ,Variable names輸入 p1,p2,p1,p2分別對應SQL中的userName,age。
執行結果如下:
可以看到Debug Sampler中的響應
p1_#=5,p2_#=5爲行數
p1_1=test1 表示查詢結果第1行第1列
p1_2=test2 表示查詢結果第1行第2列
..............
p2_1=20 表示查詢結果第2行第1列
p2_2=20 表示查詢結果第2行第2列
..............
例子2)給執行的SQL傳入變量:
場景:查詢20歲的用戶信息
方法:在JDBC Request 的執行類型選擇:Prepared Select Statement,
Query爲:select userName,age from user where age=? 【注:其中?代表佔位符】
Parameter values 輸入20
Parameter type輸入varchar
如下:
執行結果:在查看結果樹中可以看到搜索到20歲的用戶信息
例子3)往數據庫表user插入多條數據(這裏插入5條數據爲例)
創建測試計劃,具體使用到的組件如下:
a、在線程組中,輸入線程數爲5
b、CSV Data Set Config配置及user.csv內容如下:
c、JDBC Connection Configuration配置如下:
d、JDBC Request配置如下
其中Query Type選擇“Prepared Update Statement”,
Parameter values中的${__Random(20,30,)},${__RandomString(6,123456,)},${__RandomString(1,01,)},${__RandomString(1,01,)},${__RandomString(1,01,)}分別使用了函數組手中的函數來產生隨機數,用來對應數據庫表user的age、password、sex、permission、isDelete的值
而${id},${username}爲CSV Data Set Config中的變量,對應數據庫表user的id,userName的值。
執行結果如下:共有5條JDBC Request請求,每個請求往數據表user寫入一條記錄,共寫入5條數據
三、使用過程中遇到的報錯
1、Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
原因:未在jmeter安裝目錄下的./lib目錄下放入mysql-connector-java-X.X.X-bin.jar
解決方法:將mysql-connector-java-X.X.X-bin.jar放入到./lib目錄,並重啓jmeter
2、CLIENT_PLUGIN_AUTH is required
原因:導入的 mysql-connector-java-X.X.X-bin.jar版本問題(原來導入mysql-connector-java-8.0.17.jar),上網查資料,知驅動和mysql數據庫的版本也有關係(參考mysql-connector-java之6.0.6版本,SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required異常問題 - wenqi0501的個人空間 - OSCHINA https://my.oschina.net/u/3640994/blog/3000068)
mysql官網驅動版本和數據庫版本說明,地址:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html
解決方法:替換成mysql-connector-java-5.1.47.jar後問題解決
參考文檔:
Apache JMeter - User's Manual: Building a Simple Database Test Plan http://jmeter.apache.org/usermanual/build-db-test-plan.html
Apache JMeter - User's Manual: Component Reference http://jmeter.apache.org/usermanual/component_reference.html#JDBC_Request
數據庫驅動下載參考:Java連接MySQL mysql-connector-java-bin.jar驅動包的下載與安裝 - qq_41950447的博客 - CSDN博客 https://blog.csdn.net/qq_41950447/article/details/90085170