出差某单位现场,测试性能问题,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 建立一次之后,就无需建立了,在脚本里注释就好