出差某单位现场,测试性能问题,Jmeter 脚本中存在通过连接池访问数据库方式获取数据,客户现场不允许直接连接数据库访问数据,而是通过 ssh 方式连接到数据库服务,在通过 127.0.0.1 的方式访问
通过 java,建立 ssh 通道,配置本地转发到远程和远程转发到本地的相关参数
通过 jdbc:mysql://127.0.0.1:映射到本地的端口/dbname 方式访问 mysql
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);
    // }
    //
        }
下载ssh.jar
前提:将ssh.jar包和jsch-0.1.54.jar包放在 jmeter/lib/ext 下面,重启 jmeter
第一步:
// 参数依次为:
    //映射到本地的端口(确保没有被占用);
    //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);

第二步:
url 位置:jdbc:mysql://127.0.0.1:beanshell 中设置的映射到本地的端口/数据库名称?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8

第三步:

** 注意:**
建立 ssh 之前,需要确保映射到本地的端口没有被占用
ssh 建立一次之后,就无需建立了,在脚本里注释就好