1. 背景

出差某单位现场,测试性能问题,Jmeter 脚本中存在通过连接池访问数据库方式获取数据,客户现场不允许直接连接数据库访问数据,而是通过 ssh 方式连接到数据库服务,在通过 127.0.0.1 的方式访问

2.解决思路

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

第一步:

// 参数依次为:

    //映射到本地的端口(确保没有被占用);

    //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 建立一次之后,就无需建立了,在脚本里注释就好


↙↙↙阅读原文可查看相关链接,并与作者交流