某一天碰到一個問題,覺得很有必要整理一篇文章出來~

因為項目的原因,假設我們要實現如下要求: 從數據庫的用戶表里獲取用戶信息,並作為參數全部傳遞給登錄請求,分別完成登錄操作。
一、jmeter連接數據庫
1、添加JDBC Connection Configuration(右鍵測試計划-->配置元件-->JDBC Connection Configuration)
2、配置數據庫連接信息,其中
- DataBase URL: jdbc:mysql://192.168.88.130:3306/dataname?useUnicode=true&characterEncoding=utf-8
- 1)192.168.88.130:3306為數據庫的地址和端口號;dataname為數據庫名
- 2)useUnicode=true&characterEncoding=utf-8 指定字符的編碼解碼格式utf-8
- JDBC Driver Class : com.mysql.jdbc.Driver 此為mysql數據庫的驅動
- Username: 數據庫的登錄用戶名
- Password: 數據庫的密碼
3、導入mysql驅動包
- 下載好mysql的驅動包(mysql-connector-java-5.1.7-bin.jar),放到jmeter的lib目錄下
- 選中測試計划,添加mysql驅動包
-
二、添加jdbc請求並設置變量
1、添加線程組-->右鍵線程組-->添加jdbc request,並做好設置

2、添加Debug PostProcessor用於查看變量phone值的獲取,添加查看結果樹並運行;得到以下結果。說明jmeter發起的jdbc請求及變量設置正常

三、實現循環讀取庫的用戶信息,並傳遞到下一個登錄請求
接下來就要思考怎么將查庫得到的用戶手機號,作為參數傳遞給下一個登錄請求。這里需要引用到 ForEach控制器
1、添加ForEach控制器(右鍵線程組-->邏輯控制器-->ForEach控制器),並先嘗試如下設置

- 輸入變量的前綴:phone; 從之前的jdbc request設置的變量得知,我們要取的值為phone_1、phone_2、phone_3......,所以這里輸入phone
- Start index for loop:0; 變量循環啟動的索引,第一個元素起始索引+1
- End index for loop:6; 變量循環結束的索引。所以這里是取值phone_1、phone_2、...、phone_6
- 輸出的變量名稱:t_phone; 用於替換循環下的請求的變量
2、在ForEach控制器下添加登錄請求,並進行變量引用

3、運行后,查看結果,成功從庫里獲取了前6個用戶手機號,並分別成功登錄

以上這種處理需要自行查庫獲知總共有多少個用戶,再去設置ForEach控制器的End index for loop值(設置為用戶總數),就可以將庫里所有用戶進行參數傳值登錄了;
問題:能不能jmeter自動去獲知數據庫表的用戶數,然后去循環取值進行登錄呢?
當然可以,先用jdbc request查出用戶數,再直接對ForEach控制器的End index for loop值進行設置就ok了
實操:
a、添加一個jdbc請求,查詢用戶表的用戶總數,並設置變量count

b、設置ForEach控制器的End index for loop值

c、運行,查看結果成功
