jmeter 使用 ssh 方式訪問資料庫

喵喵發表於2020-10-19

1. 背景

出差某單位現場,測試效能問題,Jmeter指令碼中存在通過連線池訪問資料庫方式獲取資料,客戶現場不允許直接連線資料庫訪問資料,而是通過ssh方式連線到資料庫服務,在通過127.0.0.1的方式訪問

2.解決思路

  • 通過java,建立ssh通道,配置本地轉發到遠端和遠端轉發到本地的相關引數

  • 通過jdbc:mysql://127.0.0.1:對映到本地的埠/dbname 方式訪問mysql

3.實現

3.1 java實現建立ssh

package ssh_connect;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

import java.sql.*;

public class connect_ssh{



/*

* lPort:對映到本地的埠

* sship:ssh服務ip

* sshport:ssh埠,預設22

* sshname:ssh使用者名稱

* sshpwd:ssh密碼

* mysqlport:mysql服務埠

*/


public static void start_ssh(int lPort,String sship,int sshport,String sshname,

String sshpwd,int mysqlport){

JSch jsch=null;

Session session = null;

try{

jsch = new JSch();

//設定ssh的使用者名稱、ip地址、埠,一般預設埠22

session = jsch.getSession(sshname, sship, sshport);

session.setPassword(sshpwd);

session.setConfig("StrictHostKeyChecking", "no");

session.connect();

//本地轉發到遠端

session.setPortForwardingL(lPort, sship, mysqlport);

//遠端轉發到本地

session.setPortForwardingR(mysqlport,sship, lPort);

//除錯時可以解注

// System.out.println("ssh連線成功,ssh版本號:"+session.getServerVersion());

}

catch (Exception e){

e.printStackTrace();

}

}



//除錯時可以解注

// public static void main(String[] args) throws Exception{

// start_ssh(3334,"172.16.81.29",22,"htc","123123",3307);

// }

//

}

3.2 將該方法打成jar包

下載ssh.jar

3.3 在Jmeter指令碼中使用

前提:將ssh.jar包和jsch-0.1.54.jar包放在jmeter/lib/ext下面,重啟jmeter

第一步:

  • 線上程中,建立一個Beanshell請求,內容如下:
// 引數依次為:

//對映到本地的埠(確保沒有被佔用);

//sh服務ip;

//ssh埠(預設22);

//ssh使用者名稱;

//ssh密碼;

//mysql服務埠

import ssh_connect.connect_ssh;

connect_ssh a= new connect_ssh();

a.start_ssh(3338,"172.16.81.29",22,"root","123123",3307);

第二步:

  • 新增JDBC Connection Configuration

url位置:jdbc:mysql://127.0.0.1:beanshell中設定的對映到本地的埠/資料庫名稱?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8

第三步:

  • 正常新增JDBC Request

** 注意:**

建立ssh之前,需要確保對映到本地的埠沒有被佔用
ssh建立一次之後,就無需建立了,在指令碼里註釋就好

相關文章