适合程序员的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:

  1. 指定数据源
  2. 选择Update Statement
  3. 填写Sql

一般到这里,就可以调试性的执行了;如果要查看sql执行结果请看Q9;如果执行错误,需要排查问题请看Q9和Q8

Q5 Jmeter 在测试 insert 语句时,能动态生成插入字段的值吗?

可以的。目前有三种方式支持动态插入值。

第一种:用户变量定义

定义用户变量: 测试计划里,用户定义变量设置

在Sql里,用${变量名}的方式进行使用;

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可以让我们用数据来说话;我写的接口性能非常好,延迟小,吞吐量大。每个程序员都值得试试

相关推荐
疯狂成瘾者3 分钟前
后端系统、服务稳定性里核心的指标有哪些
数据库
卡布奇诺-海晨12 分钟前
Jmeter实现3000个参数进行并发
jmeter
SPC的存折31 分钟前
openEuler 24.03 MariaDB Galera 集群部署指南(cz)
linux·运维·服务器·数据库·mysql
仲芒32 分钟前
[24年单独笔记] MySQL 常用的 DML 命令
数据库·笔记·mysql
SPC的存折1 小时前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
西瓜程序猿1 小时前
使用手机如何将纸质礼薄转换为电子礼薄?
测试工具·智能手机·创业创新·记了么·电子礼薄·份子钱
蓦然乍醒1 小时前
使用 DBeaver 还原 PostgreSQL 备份文件 (.bak) 技术文档
数据库·postgresql
XDHCOM1 小时前
Redis节点故障自动恢复机制详解,如何快速抢救故障节点,确保数据不丢失?
java·数据库·redis
QCzblack1 小时前
BugKu BUUCTF ——Reverse
java·前端·数据库
cyber_两只龙宝1 小时前
【Oracle】Oracle之DQL中WHERE限制条件查询
linux·运维·数据库·云原生·oracle