1 需求背景

    对数据库进行压力测试时,需要模拟同一时间大量的sql请求发送,借助于jmeter的 sql请求可以实现,但是对RDS来说,需要进行端口映射(跳板机)访问远程数据库,对于单线程手工测试来说,可以直接通过CRT进行端口跳转访问,但是对于多线程并发访问时,各个线程都需要开启端口映射,此时CRT无法满足,借助于第三方插件,通过定制 jmeter脚本,可以帮助我们实现测试目标。

2 工具/包

2.1 Apache-jmeter

   Jmeter支持java语言,是一个开源的性能测试工具,通过扩展,可以实现非常丰富的功能,本讲义中的版本是2.11,jmeter的安装配置过程略

2.2 eclipse

   在eclipse中写java sample插件,eclipse的安装配置过程略

2.3 Com.jcraft.jsch

   一个开源的第三方JAR包,主要利用它来进行端口映射

3 插件开发

3.1 新建工程

   新建一个java工程,将下载下来的Com.jcraft.jsch 源码导入,并新建一个package,用于编写java sample,结构如图所示。

利用jmeter java sample端口转发实现对远程数据库的压力测试_bc

3.2 配置buildpath

将%JMETER_HOME%\lib 及 %JMETER_HOME%\lib\ext 导入

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_02

3.3 Constants类

该类主要配置运行参数,例如数据库连接,用户名,数据库密码,端口号等,如果这些变量基本是不变的话可以写在Constants里。

/*Constant.java*/

package startSSH;

public class Constants {

   static final String driver="com.mysql.jdbc.Driver";

   static final String connServer="jdbc:mysql://localhost:12306/";

   static final String dataBase="ccms_qinjiaoshou";

   static final String userName="*******";

   static final String passWord="*******";

   static final String ssh_server="******";

   static final int ssh_server_port=22;

   static final String ssh_loginName="yang.yang";

   static final String ssh_loginPassword="***********";

   static final int local_port=12306;

   static final int remote_port=3306;

   static final String remote_server="******";

   static final String ZH_Encoding="?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true";



}

3.4 openSSH类

在openSSH中,定义了参数以及默认值,并开启端口转发,以及由于环境问题,这些参数并不是固定的,这种写死在代码中的方式就不灵活,JMETER 提供了读取参数的方法,参见

/*openSSH.java*/

利用jmeter java sample端口转发实现对远程数据库的压力测试_java_03

 如图

利用jmeter java sample端口转发实现对远程数据库的压力测试_java_04

入口函数

利用jmeter java sample端口转发实现对远程数据库的压力测试_bc_05

入口函数是为了让jmeter找到对应的函数入口,见图

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_06

 注意,端口应该作参数化处理,多个线程占用一个端口会出现连接失败的问题。一个SQL请求结束后,应释放该线程占用的端口资源,需要将该线程已占用的端口关闭。

3.5 closeSSH类

该类主要用于释放线程占用的端口

/*closeSSH.java*/

入口函数:

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_07

 

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_08

4 连接测试

4.1 Jar包导出

分别将项目导出为 JAR包,导出 2次 ,命名为openSSH.jar 和 closeSSH.jar,分别用于开启端口sample 以及关闭关口sample

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_09

 导出时注意选择对应的入口函数

利用jmeter java sample端口转发实现对远程数据库的压力测试_bc_10

利用jmeter java sample端口转发实现对远程数据库的压力测试_开发语言_11

 将2个 jar文件 以及 mysql jdbc jar 放到%JMETER_home%\lib\ext目录下,然后以admin身份运行jmeter。

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_12

 4.2 java sample

在Jmeter中 新建线程组,定义一个用户定义变量以保存随机端口号,新建java sample

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_13

 该 java请求用于打开端口,选择类名称,填入适当的参数,注意localport那一栏填写随机值。

利用jmeter java sample端口转发实现对远程数据库的压力测试_开发语言_14

 4.3 sql sample

首先配置JDBC连接

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_15

利用jmeter java sample端口转发实现对远程数据库的压力测试_sql_16

 注意:Variable Name不能为空;最大连接数设置要>jmeter线程数,端口号用随机数替代

配置完jdbc连接后,新建sql请求就可以了

利用jmeter java sample端口转发实现对远程数据库的压力测试_数据库_17

 最后加上关闭端口的java sample

利用jmeter java sample端口转发实现对远程数据库的压力测试_java_18

 开始测试,注意观察jmeter console日志及sql结果树

利用jmeter java sample端口转发实现对远程数据库的压力测试_java_19

利用jmeter java sample端口转发实现对远程数据库的压力测试_bc_20

利用jmeter java sample端口转发实现对远程数据库的压力测试_java_21

 可见打开了57734的端口映射,而且正确进行了查询,成功实现了模拟SSH进行端口转发的需求。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java数据库