1.測試準備
安裝mysql數據庫,我安裝的是8.0.12
安裝Navicat Premium數據庫管理工具
準備連接mysql的jar包 mysql-connector-java-8.0.11.jar
有一個數據庫HttpRunner,下面有三張表,以teacher表爲例
2.在JMeter中添加jar包
方式1直接將jar包複製到JMeter的lib目錄下
方式2在測試計劃中添加
3.JDBC Connection Configuration
JMeter添加配置元件JDBC Connection Configuration
配置數據庫連接的相關屬性,如連接名、密碼等
記住這裏的Variable Name for created pool(自己取的名字)
4. JDBC Request
這個Sampler可以向數據庫發送一個jdbc請求(sql語句),並獲取返回的數據庫數據進行操作。
示例1:從數據表teacher中查詢出subjectid爲1的所有老師的姓名,在HTTP請求中用該變量請求
1.JDBC Request,這裏就用到了connection中的mysqltest
JDBC Request 參數說明:
Variable Name:數據庫連接池的名字,需要與JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
Query:sql語句
Parameter valus:參數值
Parameter types:參數類型,可參考:Javadoc for java.sql.Types,如integer、varchar
Variable names:保存sql語句返回結果的變量名
Result variable name:創建一個對象變量,保存所有返回的結果
Query timeout:查詢超時時間
Handle result set:定義如何處理由callable statements語句返回的結果
Query Type有幾種,常用:
Prepared Select Statement:查詢
Prepared Update Statement:插入、修改、刪除
Variable names:如果設置了這個值,會保存sql語句返回的數據和返回數據的總行數。添加一個Debug Samplar來看下輸出的結果就明白了,如下:
2、運行結果
可以看到Debug Sampler中的響應
A_#,B_#都代表行數
A_1:表示查詢結果第1行第1列
A_2:表示第第2行第1列
B_1:表示第1行第2列
B_2:表示第2行第2列
3、HTTP請求,模擬請求,只是看下請求的URL
使用的時候用${變量名}
示例2:在示例1的基礎上,將從mysql查詢出來的數據保存到本地,再使用
因爲示例1查詢出來的結果不只一個,想保存到本地,再用CSV引用文件
1、保存到本地
首先可以把JDBC請求放在僅有一次控制器中,因爲查詢保存只需要一次
獲取相應的數據:columnValue=vars.getObject("tname").get(i).get("teacher_name");
import java.io.*;
//保存到本地函數
public static void saveStringToTxt(String file,String str) {
FileWriter fw = null;
try {
//如果文件存在,則追加內容;如果文件不存在,則創建文件
File f=new File(file);
fw = new FileWriter(f, true);
} catch (IOException e) {
e.printStackTrace();
}
PrintWriter pw = new PrintWriter(fw);
pw.println(str);
pw.flush();
try {
fw.flush();
pw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
for(int i = 0; i < ${A_#}; i++){
//tname爲JDBC Request中Result Variable name
columnValue=vars.getObject("tname").get(i).get("teacher_name");
saveStringToTxt("/Users/yiqin/Documents/tname.txt",columnValue);
//log.info("result:"+columnValue);
}
2、CSV引用文件使用
示例3:在性能測試過程中經常需要批量造數,試着來實現一下
造數的目的有時候是需要按較嚴格的規則,有時候就只是簡單的增加表的容量
這裏用到Query Type爲Prepared Update Statement,寫過java JDBC就很容易理解,語句裏面的問號是佔位符,這裏我用了3個變量,其中${__counter(False,test)},${__Random(1,5,ran)}是JMeter的常用函數,可通過函數助手添加;${teachername}是外部導入的文件變量,通過配置元件CSV數據文件實現。
之後查看數據表可以看到數據添加進來了。所以可以通過這種方式開幾個線程往數據庫添加數據,還可以寫java函數生成數據再往數據庫添加。