适合程序员的DB性能测试工具 JMeter
背景
1、想要一款既要能压数到mysql,又要能压数到postGre,还要能压数到oracle的自动化工具
2、能够很容易编写insert sql(因为需要指定表和指定字段类型压数据),然后点击运行按钮后,就能直接运行;不要写应用代码,因为我比较懒
3、可以指定测试时间,或者TPS等执行时行为。因为压数有数量级要求
4、sql插入的值,最好能动态生成;
目前选择了JMeter,初步的用起来还比较的可爱和丝滑。使用步骤和遇到的问题如下:
Q1 JMeter能同时测试 Mysql,postGreSql,oracle 数据库吗?
能支持的,JMeter 是用java写的,添加对应的JDBC驱动后,理论上任何数据库都可以进行测试。
这货还能测试常用的HTTP接口,TCP,FTP等,支持的种类还挺多。
在得到肯定回答后,开始了正式动手
Q2 JMeter 如何下载,安装和配置了?
两种下载方式
官网,非常慢:下载地址:https://jmeter.apache.org/
百度网盘下载地址: https://pan.baidu.com/s/1Ymoqk9besbSGSVha7OhW3Q 提取码:altb
和官网源文件 SHA512对比过,没有更改,请放十二个心使用。
安装
由于下载的是zip包,解压到本地目录即可。入下图:
配置
系统环境变量里增加
JMETER_HOME 解压包目录
Path %JMETER_HOME%\bin
ClassPath %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;
启动
JMeter由于是java开发,运行依赖jvm。具体java安装配置,不详讲
进入bin目录。点击jmeter.bat。
启动后大概长这样
Q3 JMeter 如何配置 mysql 连接信息?
把Mysql 驱动加入到测试计划里,否则执行的时候会找不到对应驱动。在配置页面—>browse里加入mysql驱动位置
新建一个ThreadGroup,默认配置就好。
(见名知意,编程术语里叫线程组,测试术语里叫做用户数,可以指定测试的时候,模拟多少个用户,其实是多少个线程)
在ThreadGroup下新建JDBC链接信息。
路径Add===>Config Element===>JDBC Connection Configuration
配置JDBC链接信息。比如数据库url,用户名,密码,驱动名字等。入下图
Q4 JMeter 如何配置测试的insert sql
在新建的ThreadGroup下新建JDBC Request。路径 Add—>Sampler---->JDBC Request
简单的三步配置,即可执行sql:
- 指定数据源
- 选择Update Statement
- 填写Sql
一般到这里,就可以调试性的执行了;如果要查看sql执行结果请看Q9;如果执行错误,需要排查问题请看Q9和Q8
Q5 Jmeter 在测试 insert 语句时,能动态生成插入字段的值吗?
可以的。目前有三种方式支持动态插入值。
第一种:用户变量定义
定义用户变量: 测试计划里,用户定义变量设置
在Sql里,用${变量名}的方式进行使用;
INSERT INTO `orders`(`order_id`,`sku_id`, `pay_type`, `pay_amount`, `pay_time`, `remark`) VALUES (${order_id},1, 1, 12.03, '2023-08-14 14:34:23', '第一个测试');
第二种:从excel文件中指定,不详述;比第一种值的来源更灵活
第三种:使用JmeterBean shell。非常的灵活,对写java代码的同学无门槛
用法:新建BeanShell PreProcessor :路径add===》Pre Processor===>eanShell PreProcessor
BeanShell 语法,基本上是java语法。
在sql里使用 ${order_id_shell} 对变量进行引用。这个脚本里,我用时间戳作为订单ID;注意这个值只支持String
Q6 jmeter 里如何设置,测试总次数或者测试持续时间
想要压测一定的数据量到库里,不可能只执行一次就完了吧。可以设置sql执行总次数或者持续执行sql的时间来解决。
注意 测试总次数和测试持续时间,两者选其一;
测试 总次数=图里的线程数*循环次数
测试持续时间,以秒为单位
Q7 数据库里的自增,在JMeter里能实现吗?
可以实现的,JMeter里有计数器,再加上变量引用,能解决自增的问题。并且还能保证在多个线程并发情况下,保证自增ID的唯一。
新建Counter:路径 在Add=config Element=>Counter里
填写;初始值,增量值;申明外部使用的变量名即可;使用也是通过${order_id_auto_incr}方式;这个变量在Bean shell脚本里也可以使用;大大增强了编码的灵活性
Q8 JMeter里能看到执行的错误日志吗?
如果不小心编写的脚本有问题,执行的时候,报错了,需要去排查,可以看JMeter本身的执行日志,在安装目录下的\bin\jmeter.log里
Q9 JMeter 能看到SQL执行结果吗?
想看看SQL执行结果,或者类似的HTTP执行返回后的结果 可在View Results Tree里查看。路径 Add===>Listener===>View Results Tree
之前没配置mysql 驱动jar包,返回报错了
Q10 JMeter如何查看测试报告
预测试已通过,正式压测后,想看看测试接口执行总次数(Samples),TPS(Throught),平均相应时间(Average),最大响应时间(Max),最小响应时间(Min),接口正确率(Std.Dev),错误率(Error)等指标,需要添加 Summary Report。路径 Add===>Listener======Summary Report
总结
天天写CRUD接口,到底写的这些接口性能咋样了?敢拿出来遛遛吗?JMeter可以让我们用数据来说话;我写的接口性能非常好,延迟小,吞吐量大。每个程序员都值得试试
相关文章:

适合程序员的DB性能测试工具 JMeter
背景 1、想要一款既要能压数到mysql,又要能压数到postGre,还要能压数到oracle的自动化工具 2、能够很容易编写insert sql(因为需要指定表和指定字段类型压数据),然后点击运行按钮后,就能直接运行ÿ…...

java实现人物关系抽取
java实现人物关系抽取 人物关系抽取是实体关系抽取的一种情况。实际上是两个过程:命名实体识别和关系抽取。 Java人物关系抽取是指从文本中提取出与Java相关的人物之间的关系。这个过程可以通过自然语言处理和文本分析的方法来实现。具体的步骤包括: 文本…...

Docker网络与资源控制
一、Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿…...

图片怎么转换成pdf格式?可以试试这样转换
图片怎么转换成pdf格式?图片转换成PDF格式是一个常见的需求,无论是为了方便存储还是为了分享文件,将图片转换成PDF格式都是一个不错的选择。有许多软件和在线工具可以帮助你完成这个任务,下面就给大家介绍一款转换工具。 【迅捷PD…...

[国产MCU]-W801开发实例-GPIO输入与中断
GPIO输入与中断 文章目录 GPIO输入与中断1、硬件准备2、软件准备3、驱动实现4、驱动测试W801的GPIO支持软件配置中断,中断触发方式包含:上升沿触发、下降沿触发、高电平触发、低电平触发。本文在前面[ 国产MCU]-W801开发实例-按键与GPIO输入的基础上实现GPIO中断配置。 1、硬…...

Layui列表表头去掉复选框改为选择
效果: 代码: // 表头复选框去掉改为选择 $(".layui-table th[data-field"0"] .layui-table-cell").html("<span>选择</span>");...

Flutter实战·第二版-第三章 基础组件笔记
第三章:基础组件 3.1文本及样式 3.1.1 Text Text("Hello world",textAlign: TextAlign.left, );Text("Hello world! Im Jack. "*4,maxLines: 1,overflow: TextOverflow.ellipsis, );Text("Hello world",textScaleFactor: 1.5, );3.1…...

一文彻底理解时间复杂度和空间复杂度(附实例)
目录 1 PNP?2 时间复杂度2.1 常数阶复杂度2.2 对数阶复杂度2.3 线性阶复杂度2.4 平方阶复杂度2.5 指数阶复杂度2.6 总结 3 空间复杂度 1 PNP? P类问题(Polynomial)指在多项式时间内能求解的问题;NP类问题(Non-Deterministic Polynomial)指在…...

Mysql的索引详解
零. 索引类型概述 1. 实际开发中使用的索引种类 主键索引唯一索引普通索引联合索引全文索引空间索引 2. 索引的格式类型 BTree类型Hash类型FullText类型(全文索引)RTree类型(空间索引) MySQL 的索引方法,主要包括 BTREE 和 HASH。 顾名思…...

.netcore windows app启动webserver
创建controller: using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks;namespace MyWorker.…...

泰迪大数据挖掘建模平台功能特色介绍
大数据挖掘建模平台面相高校、企业级别用户快速进行数据处理的建模工具。 大数据挖掘建模平台介绍 平台底层算法基于R语言、Python、Spark等引擎,使用JAVA语言开发,采用 B/S 结构,用户无需下载客户端,可直接通过浏览器进行…...
【问题】java序列化,什么时候使用
文章目录 是什么为什么如何做流操作 注事事项 是什么 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1)把对象的字节序列永久地保存到硬盘上,通常存放在一…...

【最新可用】VMware中ubuntu与主机window之间使用共享文件夹传输大文件
一、VMware设置共享文件夹 (1)虚拟机关机情况下,创建一个共享文件夹 (2)ubuntu中挂载共享文件夹 1、如果之前已经挂载 hgfs,先取消挂载 sudo umount /mnt/hgfs2、重新使用以下命令挂载 sudo /usr/bin/vmh…...

A. Two Semiknights Meet
题目描述 可知走法为中国象棋中的象的走法 解题思路 利用结构体来存储两个 K K K的位置 x , y x,y x,y,因为两个 K K K同时走,所以会出现两种情况 相向而行,两者距离减少 相反而行,两者距离不变 我们完全可以不考虑格子是好…...

〔011〕Stable Diffusion 之 解决绘制多人或面部很小的人物时面部崩坏问题 篇
✨ 目录 🎈 脸部崩坏🎈 下载脸部修复插件🎈 启用脸部修复插件🎈 插件生成效果🎈 插件功能详解🎈 脸部崩坏 相信很多人在画图时候,特别是画 有多个人物 图片或者 人物在图片中很小 的时候,都会很容易出现面部崩坏的问题这是由于神经网络无法完全捕捉人脸的微妙细节…...

在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问
文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…...

Vue elementui 实现表格selection的默认勾选,翻页记录勾选状态
需求:当弹出一个列表页数据,对其进行筛选选择。 列表更新,填充已选数据 主要使用toggleRowSelection 代码如下: <el-table v-loading"loading" :data"drugList" selection-change"handleSelection…...

CloudCompare——统计滤波
目录 1.统计滤波2.软件实现3.完整操作4.算法源码5.相关代码 本文由CSDN点云侠原创,CloudCompare——统计滤波,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 1.统计滤波 算法原理见:PCL 统计滤波器…...

nodejs+vue古诗词在线测试管理系统
一开始,本文就对系统内谈到的基本知识,从整体上进行了描述,并在此基础上进行了系统分析。为了能够使本系统较好、较为完善的被设计实现出来,就必须先进行分析调查。基于之前相关的基础,在功能上,对新系统进…...
174-地下城游戏
题目 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...