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 建立一次之後,就無需建立了,在指令碼里註釋就好

相關文章