目录
1 需求背景
2 工具/包
2.1 Apache-jmeter
2.2 eclipse
2.3 Com.jcraft.jsch
3 插件开发
3.1 新建工程
3.2 配置buildpath
3.3 Constants类
3.4 openSSH类
3.5 closeSSH类
4 连接测试
4.1 Jar包导出
4.2 java sample
4.3 sql sample
1 需求背景
对数据库进行压力测试时,需要模拟同一时间大量的sql请求发送,借助于jmeter的 sql请求可以实现,但是对RDS来说,需要进行端口映射(跳板机)访问远程数据库,对于单线程手工测试来说,可以直接通过CRT进行端口跳转访问,但是对于多线程并发访问时,各个线程都需要开启端口映射,此时CRT无法满足,借助于第三方插件,通过定制 jmeter脚本,可以帮助我们实现测试目标。
2 工具/包
2.1 Apache-jmeter
Jmeter支持java语言,是一个开源的性能测试工具,通过扩展,可以实现非常丰富的功能,本讲义中的版本是2.11,以下是在 Windows 平台上安装和配置 JMeter 的一般步骤:
-
下载 JMeter:
- 访问 Apache JMeter 官方网站(https://jmeter.apache.org)。
- 在网站上找到最新版本的 JMeter,点击下载链接。
-
安装 JMeter:
- 下载完成后,将 JMeter 压缩包解压到你选择的目录中,例如 "C:\Program Files"。
- 进入解压后的 JMeter 目录,找到 jmeter.bat(Windows 批处理文件)。
-
配置 Java 环境:
- 在运行 JMeter 之前,确保已经安装了 Java 开发工具包(JDK)。可以在命令提示符中输入 "java -version" 来检查 Java 是否正确安装和配置。
-
启动 JMeter:
- 双击运行 jmeter.bat 文件,或者在命令提示符中进入 JMeter 目录并运行 jmeter.bat 文件来启动 JMeter。
-
创建测试计划:
- 在 JMeter 启动后,你将看到一个空白的测试计划。右键点击测试计划,选择 "Add" -> "Threads (Users)" -> "Thread Group" 来创建一个新的线程组。
- 在线程组中,你可以设置并发用户数、循环次数等。
-
添加测试元件:
- 在线程组下,你可以添加各种测试元件,如 HTTP 请求、FTP 请求、数据库请求等。右键点击线程组,选择 "Add" -> "Sampler" 来添加所需的测试元件。
-
配置测试元件:
- 配置每个测试元件的属性,例如目标 URL、请求参数、身份验证等。右键点击测试元件,选择 "Add" -> "Config Element" 或 "Add" -> "Listener" 来添加和配置所需的元件。
-
运行压力测试:
- 配置完所有测试元件后,点击工具栏上的 "Start" 按钮(绿色三角形)来开始压力测试。
- JMeter 将模拟并发用户的行为,发送请求并收集结果。
以上是在 Windows 平台上安装和配置 JMeter 的基本步骤。在安装过程中,请确保已经正确配置了 Java 环境,并根据你的需求和场景进行相应的配置和测试计划编写。
2.2 eclipse
在eclipse中写java sample插件,以下是在 Windows 平台上安装和配置 Eclipse 的一般步骤:
-
下载 Eclipse:
- 访问 Eclipse 官方网站(https://www.eclipse.org)。
- 在网站上找到适合你的开发需求的 Eclipse 版本,比如 Eclipse IDE for Java Developers、Eclipse IDE for Java EE Developers 等。
- 点击下载链接并选择适合你操作系统的安装包。
-
安装 Eclipse:
- 下载完成后,解压安装包到你选择的目录中,例如 "C:\Program Files"。
- 运行解压后的 Eclipse 可执行文件(通常是 eclipse.exe)来启动 Eclipse。
-
选择工作空间(Workspace):
- 当你第一次运行 Eclipse 时,它会要求你选择一个工作空间,这是 Eclipse 存储项目和设置的地方。你可以选择接受默认的工作空间,也可以指定自己的位置。
-
配置插件:
- 一般情况下,你可能需要根据你的开发需求安装一些插件。Eclipse 有一个内置的插件安装器,可以通过 "Help" -> "Eclipse Marketplace" 或 "Help" -> "Install New Software" 来安装需要的插件。
-
配置 JDK:
- 在开始编写 Java 代码之前,需要确保已经安装了 Java 开发工具包(JDK)。打开 Eclipse 后,转到 "Window" -> "Preferences" -> "Java" -> "Installed JREs",确保已经配置了正确的 JDK。
-
创建项目:
- 在 Eclipse 中,可以通过 "File" -> "New" -> "Java Project" 来创建一个新的 Java 项目。根据向导指示,输入项目名称和其他信息,然后点击 "Finish" 完成创建。
-
编写和运行代码:
- 在创建项目后,你可以开始编写和编辑 Java 代码。创建新的类、包等,然后右键点击类名并选择 "Run As" -> "Java Application" 来运行代码。
以上是在 Windows 平台上安装和配置 Eclipse 的基本步骤。在安装过程中,记得仔细阅读安装向导的说明,根据个人需求进行定制和配置。
2.3 Com.jcraft.jsch
com.jcraft.jsch 是一个 Java 实现的 SSH2 协议库,它提供了在 Java 应用程序中进行 SSH 连接和操作远程主机的功能。它是一个开源库,可以用于开发需要通过 SSH 协议进行远程通信的应用程序。
使用 com.jcraft.jsch 库,你可以实现以下功能:
-
SSH 连接:建立与远程主机的安全连接,并进行身份验证和授权。
-
远程命令执行:执行远程主机上的命令,并获取命令的输出结果。
-
文件传输:上传和下载文件到远程主机。
-
端口转发:通过 SSH 隧道实现本地端口与远程主机之间的转发。
下面是一个简单的示例代码,演示如何使用 com.jcraft.jsch 连接到远程主机并执行命令:
import com.jcraft.jsch.*;
public class SSHExample {
public static void main(String[] args) {
String host = "remote-host";
String username = "username";
String password = "password";
int port = 22;
try {
JSch jsch = new JSch();
// 创建 SSH session
Session session = jsch.getSession(username, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
// 创建 SSH channel
Channel channel = session.openChannel("exec");
// 设置要执行的命令
((ChannelExec) channel).setCommand("ls -l");
// 连接并执行命令
channel.connect();
// 获取命令输出结果
InputStream in = channel.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 关闭连接
channel.disconnect();
session.disconnect();
} catch (JSchException | IOException e) {
e.printStackTrace();
}
}
}
以上代码通过 com.jcraft.jsch 库连接到远程主机,并执行了一个简单的 ls 命令来列出远程主机的文件列表。你可以根据需要扩展和修改这个示例,实现更复杂的功能,如文件传输、端口转发等。
3 插件开发
3.1 新建工程
新建一个java工程,将下载下来的Com.jcraft.jsch 源码导入,并新建一个package,用于编写java sample,结构如图所示。
3.2 配置buildpath
将%JMETER_HOME%\lib 及 %JMETER_HOME%\lib\ext 导入
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找到对应的函数入口,见图
注意,端口应该作参数化处理,多个线程占用一个端口会出现连接失败的问题。一个SQL请求结束后,应释放该线程占用的端口资源,需要将该线程已占用的端口关闭。
3.5 closeSSH类
该类主要用于释放线程占用的端口
/*closeSSH.java*/
入口函数:
4 连接测试
4.1 Jar包导出
分别将项目导出为 JAR包,导出 2次 ,命名为openSSH.jar 和 closeSSH.jar,分别用于开启端口sample 以及关闭关口sample
导出时注意选择对应的入口函数
将2个 jar文件 以及 mysql jdbc jar 放到%JMETER_home%\lib\ext目录下,然后以admin身份运行jmeter。
4.2 java sample
在Jmeter中 新建线程组,定义一个用户定义变量以保存随机端口号,新建java sample
该 java请求用于打开端口,选择类名称,填入适当的参数,注意localport那一栏填写随机值。
4.3 sql sample
首先配置JDBC连接
注意:Variable Name不能为空;最大连接数设置要>jmeter线程数,端口号用随机数替代
配置完jdbc连接后,新建sql请求就可以了
最后加上关闭端口的java sample
开始测试,注意观察jmeter console日志及sql结果树
文章来源:https://www.toymoban.com/news/detail-498052.html
可见打开了57734的端口映射,而且正确进行了查询,成功实现了模拟SSH进行端口转发的需求。文章来源地址https://www.toymoban.com/news/detail-498052.html
到了这里,关于利用jmeter java sample端口转发实现对远程数据库的压力测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!