JMeter JDBC Request(實現往mysql批量造數)

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函數生成數據再往數據庫添加。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章