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

news2024/10/6 0:50:49

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,结构如图所示。

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结果树

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python支持一行多写,让你的代码更简洁高效

Python支持一行多写,让你的代码更简洁高效 Python是一种简洁而又灵活的编程语言,它支持一行多写代码,让你的代码更加简洁高效。当你需要在一行代码中写入多个语句时,使用一行多写可以让你的代码更加易读和易维护。这篇文章将介绍…

NUCLEO-F411RE RT-Thread 体验 (4) - GCC环境 LED控制以及CMD命令的添加

NUCLEO-F411RE RT-Thread 体验 (4) - GCC环境 LED控制以及CMD命令的添加 1、LED的控制 前面pin驱动移植后,我们使用rt_pin_mode() rt_pin_write() 控制gpio拉高拉低,从而控制LED灯的闪烁。 整个pin的初始化流程在rt_hw_board_init里。 rt_hw_pin_init…

梅林固件启用自定义DDNS(以cloudflare为例)

参考: In-a-dyn 组件:In-a-dynhttps://github.com/RMerl/asuswrt-merlin.ng/wiki/DDNS-services In-a-dyn配置示例https://github.com/troglobit/inadyn/tree/master/examples原理: 原版梅林固件即Asuswrt-Merlin 自384.7开始,引…

JDK自带的构建线程池的方式之newSingleThreadExecutor

newSingleThreadExecutor从名称上就可以知道这个是一个单例的线程池。在这个线程池中只有一个线程来处理任务。 就可以使用在业务涉及到顺序消费的时候。 newSingleThreadExecutor的代码展示 可以从这个在Executors中的静态方法newSingleThreadExecutor可以发现,该…

chatgpt赋能python:Python数值区间判断

Python数值区间判断 Python是一种高级编程语言,具有强大的数值计算和处理功能。在Python中,经常需要进行数值区间判断,以确定一个特定的数值是否位于指定的范围内。本文将介绍Python中常用的数值区间判断方法,并对其进行详细的讲…

SpringBoot操作Word实现文字替换和盖章(提供Gitee源码)

前言:在日常的工作当中,避免不了会涉及到一些Word文件方面的操作,这篇博客将使用SpringBoot整合开源Apache来操作Word,分享的都是目前实际当中会经常用到的一些功能代码都实际测试过,只分享干货,大家一键复…

AI加持、共建共享...亚马逊云科技重新定义云安全

我们正在进入数字化时代,无数传统企业正在飞速走上云端,无数基础设施服务在云的加持下焕发全新的活力。AI、物联网、大数据等新兴技术逐步落地应用,IaaS、PaaS、云原生技术日渐成熟,“云”正在快速扩容。2021年,我国云…

#10035. 「一本通 2.1 练习 1」Power Strings

Power Strings 题意简述: 求一个字符串由多少个重复的子串连接而成。 例如 ababab 由三个 ab 连接而成,abcd 由 abcd 由一个 abcd 连接而成。 输入格式 本题多组数据。 每一组数据仅有一行,这一行仅有一个字符串 s s s。 输入的结束标…

蓝牙GATT协议介绍

前言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。 GAP 详细介绍 GAT…

鉴源论坛丨汽车电子ISO 26262:2018标准概述(一)

作者 | 郭建 上海控安可信软件创新研究院特聘专家 版块 | 鉴源论坛 观模 摘要:安全在汽车研发中是关键要素之一,辅助驾驶、车辆的动态控制等功能的研发和集成都需要加强安全系统研发,同时,需要为满足所有预期的安全目标提供证据…

牛客网最新890道大厂 Java 八股文面试题整理

程序员真的是需要将终生学习贯彻到底的职业,一旦停止学习,离被淘汰,也就不远了。 面试跳槽季,这是一个千年不变的话题,每到这个时候,很多人都会临阵磨枪,相信不快也光。于是,大家都…

2023 最新版navicat 下载与安装 步骤及演示 (图示版)

2023 最新版navicat 下载与安装 步骤演示 -图示版 1. 下载Navicat2 .安装navicat 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请…

三子棋小游戏【C语言】

目录 前言 一、基本实现逻辑 二、实现步骤 1.实现进入游戏后的选择菜单——》这个实现起来较为容易,我们约定为:1是玩游戏, 0 是退出游戏! 2.要玩完了一局后接着玩,很容易想到要用循环。 3.采用多文件编程---》我…

0011-TIPS-pawnyable : Heap-Overflow

原文 Linux Kernel PWN | 040202 Pawnyable之堆溢出 Holstein v2: Heap Overflowの悪用 题目下载 漏洞代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/uaccess.h>…

【Nginx介绍和安装与升级】

文章目录 Nginx网站服务一、nginx服务基础1. Nginx简介2. Tengine3. Nginx 相对于 Apache 的优点4. 阻塞与非阻塞 同步与异步5. nginx 应用场景 二、编译安装nginx 服务1. 在线安装nginx2. nginx编译安装1. 关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2. 安装依…

二维码标签制作教程

如今二维码已被广泛应用在了许多场景中&#xff0c;譬如设备巡检、固定资产盘点、隐患上报、人员管理等&#xff0c;在二维码投入使用前需要为设备、物品、人员等制作一物一码标签。为了让标签快速落地&#xff0c;可使用草料二维码的标签制作功能&#xff0c;只需选择心仪的标…

Cortext-M3系统:中断的具体行为(6)

1、中断/异常的响应序列 当CM3开始响应一个中断时&#xff0c;会在它小小的体内奔涌起三股暗流&#xff1a; ​ 入栈&#xff1a;把8个寄存器的值压入栈 ​ 取向量&#xff1a;从向量表中找出对应的服务程序入口地址 ​ 选择堆栈指针MSP/PSP&#xff0c;更新堆栈指针SP&#xf…

数据恢复技巧:如何恢复已删除的手机短信

短信包含大量重要信息&#xff0c;例如个人联系人、密码和重要业务数据。丢失有价值的数据可能会令人失望&#xff0c;但很高兴知道可以使用多种方法恢复短信。 在本文中&#xff0c;我们将探讨您可以采取哪些步骤来恢复 Android 或 iOS 设备上丢失或删除的短信。 第 1 部分…

chatgpt赋能python:Python指定区域截图:优化截图流程的最佳方式

Python指定区域截图&#xff1a;优化截图流程的最佳方式 在网络时代&#xff0c;图片作为一种重要的信息传播方式&#xff0c;扮演着举足轻重的角色。截图作为最常见的图片处理方式之一&#xff0c;也时常被我们用于记录屏幕内容、报告问题及展示操作流程。 若想提高截图的效…

操作系统-I/O管理-磁盘和固态硬盘

目录 一、磁盘结构 二、磁盘调度算法 ​编辑 2.1先来先服务(FCFS) 2.2最短寻找时间优先(SSTF) 2.3扫描算法(SCAN) 2.4LOOK调度算法 2.5循环扫描算法(C-SCAN) 2.6 C-LOOK调度算法 三、减少延迟时间方法 交替编号 ​磁盘地址结构的设计 错位命名 四、磁盘的管理 4.1磁盘…