jmeter(11)-jdbc請求及請求后的響應結果如何提取


參考博文:
https://www.cnblogs.com/wuzm/p/10862904.html

https://www.cnblogs.com/qmfsun/p/5912532.html

 

一.環境准備-數據庫壓力測試

a、jmeter5.1.1版本最新版本,可以去網頁下載:https://jmeter.apache.org/download_jmeter.cgi

b、jdbc驅動:

jmeter要鏈接mysql數據庫,首先得下載mysql jdbc驅動包 (注:驅動包的版本一定要與你數據庫的版本匹配,驅動版本低於mysql版本有可能會導致連接失敗報錯)

我這里下載的是  mysql-connector-java-8.0.19.jar

下載地址:https://dev.mysql.com/downloads/connector/j/

准備好驅動包后,按照如圖進行設置:

點擊測試計划-->點擊瀏覽-->選中mysql驅動jar包-->打開

c、在測試計划下,把JDBC驅動包添加上,也可以將驅動包放入jmeter的lib目錄下,即可自動加載。

 

二.操作步驟

新建一個線程組→添加配置元件---JDBC Connection Configuration(連接數據庫組件)→
添加取樣器→JDBC Request(JDBC請求)

JMeter如果進行JDBC請求,
請求后的響應結果如何給下一個請求用(也就是傳說中的關聯)

1.添加 "JDBC Connection Configuration"里面用來配置一些數據庫連接的信息

JDBC Connection設置創建數據庫連接(供JDBC Request Sampler使用)

1) Variable Name Bound to Pool:數據庫連接池的變量名。 需要唯一標識。與JDBC取樣器中的相對應,決定JDBC取樣的配置。

原理:JDBC request可以通過選擇不同的連接池名來選擇不同的數據庫連接。
VariableName變量名稱:與JDBC Request的Variable name保持一致,因為鏈接數據庫是需 要在JDBC Connection Configuration中配置好的,
然后賦予一個變量名稱,那么JDBCRequest想要去訪問數據庫,就必須通過這個配置好的元件去連接,
所以JDBCReques就需要通過讀取JDBC Connection Configuration的變量中的信息。

Variable Name:連接池綁定的jmeter變量的名稱,自定義填寫,必須與JDBC連接配置的“變量名稱”字段一致。

比如JDBC Connection Configuration里面的Variable Name是jdbc_config

那么在寫JDBC請求時,需要填寫的Variable Name就必須是jdbc_config!!!

Validation Query驗證查詢,不同版本的填寫格式可能不同(比如3.1是Select 1,2.6是Select1),格式錯誤會報錯。最新的Jmeter5.1.1下拉框可選擇。

 

2 ) Connection Pool Configuration 連接池配置參數如下

a. Max Number of Connections: 該數據庫連接池的最大連接數,一般可設置為0,意思是每個線程都使用單獨的數據庫連接,線程之間數據庫連接不共享,在大多數情況下,將其設置為0,這意味着每個線程將得到它自己的池,其中只有一個連接,即線程之間不共享連接。如果您真的想要使用共享池(為什么?),那么將max count與線程數相同,以確保線程不會相互等待。
b. Max Wait(ms)}: 在連接池中取回連接最大等待時間,在查詢過程中, 超過設置的值,連接池會拋出錯誤

c. Time Between Eviction Runs (ms)疏散時間,數據庫空閑清理的間隔時間

d. Auto Commit自動提交。有三個選項,true、 false、編輯(自己通過imeter提供的函數設置)

Transaction lsolation:

事務間隔級別設置,主要有如下幾個選項:

[TRANSACTION NODE]事務節點

TRANSACTION READ UNCOMMITTED事務未提交讀
TRANSACTION READ COMMITTED事務已提交讀
TRANSACTION SERIALIZABLE事務序列化
DEFAULT默認

TRANSACTION REPEATABLE READ事務重復讀

3) Connection Validation by Pool

這是Jmeter用來檢驗數據庫連接是否有效的一種機制,超過5秒沒有使用的話,就會用validation query去測試下這個連接是否有效

1、Test While ldle 當空閑的時候測試連接是否斷開,測試連接池的空閑連接,驗證查詢將會被使用去測試。

2、Soft Min Evictable Idle Time(ms) :最少的時間連接可能在池中閑置,然后才有資格被閑置的對象驅逐出去,額外的條件是至少在池中保持連接。默認值為5000(5秒)

4)Database Connection Configuration

a. Database URL:數據庫服務器地址。如jdbc:mysql://localhost:3306/test 表示本地數據庫,3306端口,數據庫名稱為test

如果想執行多條語句可以使用(allowMutiQueries-true表示在JDBC中執行多條Selec語句)
可配置如下:

jdbc:mysql://ip:3306/數據庫名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

jdbc:mysql://{ip}:{port}/{dbname}?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

 

useUnicode=true 使用Unicode編碼格式(字符集編碼格式)

characterEncoding=utf8 使用UTF-8解碼(字符集編碼格式)

allowMultiQueries=true 允許多個query一起使用(1個請求中添加多個sql語句)



b. JDBCDriver Class:據庫IDBC驅動類 名i com.mysaLjdbc.Driver.3、Username:數據庫用戶名root
c. password: 數據庫密碼(注意,是明文)

請求中執行多條sql的關鍵兩步
1. 【JDBC Connection Configuration 】在配量DataBase URL的時候,加上allowMultiQueries-true參數如:jdbc:mysq://192 168 0.183:3306/mysql?allowMultiQueries=utrue
2. 【JDBC Request】 在jdbc請中, QueryType一定要選擇Callable statement,使用Callablestatement時, 一次可以包含多個SQL,但非結尾的SQL要加“;”

 

 

 

 

2.添加一個“CSV Data Set Config”,用來在后續的JDBC請求中select語句中where條件參數化使用

user_ids這個字段我們將使用參數化,參數化的值也是從數據庫中拷貝出來的

這樣使用查詢語句的話才會成功。

 

3.添加JDBC請求

Query Type:

 

 上面這里如果不是很清晰的話,可以參考
https://www.cnblogs.com/yiyaxuan/p/12367848.html 這里我分別舉例子實際操作附有截圖。

 

4.請求測試可以發現jdbc請求已經成果,並能在響應數據中看到返回的結果

 

5.那么接下來的問題就來了,如果我的下一個請求,需要JDBC中的請求,那我該怎么得到JDBC中的響應數據呢?

在JMETER中可以使用“正則表達式提取 器”來實現,那么怎么來實現呢,需要在jdbc請求后面添加一個后置的“正則表達式提取器”(表達式中的關鍵部分是   ([^"]+)    ),添加的表達式如下

 

6.為了驗證是否能正確取得jdbc中的響應結果數據,模擬添加了一個簡單的http請求

 

7.http請求的“查看結果樹”中可以看到成功的取得的user_id的信息

 

多說幾句,如果SQL語句寫成  select 'user_id='|| '"' ||  user_id ||'"'  from sys_user b where b.USER_ID='13707'的形式,則可以通過下面的正則表達式來取到user_id=后面的內容,正則表達式為:user_id=" (.+?)"

 

 

 

 

 

配置完畢,接下來填寫JDBC請求

Variable Name:與JDBC Connection Configuration中的Variable Name保持一致

Query Type:語句類型,查詢用select,增刪改用update,一起用可以選擇callable

Query:填寫對應的語句(這里用了一個簡單的查詢語句作為示例)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM