当前位置: 首页 > news >正文

适合程序员的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包,解压到本地目录即可。入下图:

image.png

配置

系统环境变量里增加
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。

启动后大概长这样

image.png

Q3 JMeter 如何配置 mysql 连接信息?

把Mysql 驱动加入到测试计划里,否则执行的时候会找不到对应驱动。在配置页面—>browse里加入mysql驱动位置
image.png

新建一个ThreadGroup,默认配置就好。
(见名知意,编程术语里叫线程组,测试术语里叫做用户数,可以指定测试的时候,模拟多少个用户,其实是多少个线程)
image.png

在ThreadGroup下新建JDBC链接信息。
路径Add===>Config Element===>JDBC Connection Configuration
配置JDBC链接信息。比如数据库url,用户名,密码,驱动名字等。入下图

image.png

Q4 JMeter 如何配置测试的insert sql

在新建的ThreadGroup下新建JDBC Request。路径 Add—>Sampler---->JDBC Request
简单的三步配置,即可执行sql:

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

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

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

可以的。目前有三种方式支持动态插入值。
第一种:用户变量定义
定义用户变量: 测试计划里,用户定义变量设置

image.png

在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语法。
image.png

在sql里使用 ${order_id_shell} 对变量进行引用。这个脚本里,我用时间戳作为订单ID;注意这个值只支持String

Q6 jmeter 里如何设置,测试总次数或者测试持续时间

想要压测一定的数据量到库里,不可能只执行一次就完了吧。可以设置sql执行总次数或者持续执行sql的时间来解决。

注意 测试总次数和测试持续时间,两者选其一;
测试 总次数=图里的线程数*循环次数
测试持续时间,以秒为单位

image.png

Q7 数据库里的自增,在JMeter里能实现吗?

可以实现的,JMeter里有计数器,再加上变量引用,能解决自增的问题。并且还能保证在多个线程并发情况下,保证自增ID的唯一。
新建Counter:路径 在Add=config Element=>Counter里
填写;初始值,增量值;申明外部使用的变量名即可;使用也是通过${order_id_auto_incr}方式;这个变量在Bean shell脚本里也可以使用;大大增强了编码的灵活性

image.png

Q8 JMeter里能看到执行的错误日志吗?

如果不小心编写的脚本有问题,执行的时候,报错了,需要去排查,可以看JMeter本身的执行日志,在安装目录下的\bin\jmeter.log里

Q9 JMeter 能看到SQL执行结果吗?

想看看SQL执行结果,或者类似的HTTP执行返回后的结果 可在View Results Tree里查看。路径 Add===>Listener===>View Results Tree
之前没配置mysql 驱动jar包,返回报错了

image.png

Q10 JMeter如何查看测试报告

预测试已通过,正式压测后,想看看测试接口执行总次数(Samples),TPS(Throught),平均相应时间(Average),最大响应时间(Max),最小响应时间(Min),接口正确率(Std.Dev),错误率(Error)等指标,需要添加 Summary Report。路径 Add===>Listener======Summary Report

image.png

总结

天天写CRUD接口,到底写的这些接口性能咋样了?敢拿出来遛遛吗?JMeter可以让我们用数据来说话;我写的接口性能非常好,延迟小,吞吐量大。每个程序员都值得试试

相关文章:

适合程序员的DB性能测试工具 JMeter

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

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列表表头去掉复选框改为选择

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

Flutter实战·第二版-第三章 基础组件笔记

第三章&#xff1a;基础组件 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&#xff1f;2 时间复杂度2.1 常数阶复杂度2.2 对数阶复杂度2.3 线性阶复杂度2.4 平方阶复杂度2.5 指数阶复杂度2.6 总结 3 空间复杂度 1 PNP&#xff1f; P类问题(Polynomial)指在多项式时间内能求解的问题&#xff1b;NP类问题(Non-Deterministic Polynomial)指在…...

Mysql的索引详解

零. 索引类型概述 1. 实际开发中使用的索引种类 主键索引唯一索引普通索引联合索引全文索引空间索引 2. 索引的格式类型 BTree类型Hash类型FullText类型&#xff08;全文索引)RTree类型&#xff08;空间索引) MySQL 的索引方法&#xff0c;主要包括 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等引擎&#xff0c;使用JAVA语言开发&#xff0c;采用 B/S 结构&#xff0c;用户无需下载客户端&#xff0c;可直接通过浏览器进行…...

【问题】java序列化,什么时候使用

文章目录 是什么为什么如何做流操作 注事事项 是什么 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途&#xff1a;   1&#xff09;把对象的字节序列永久地保存到硬盘上&#xff0c;通常存放在一…...

【最新可用】VMware中ubuntu与主机window之间使用共享文件夹传输大文件

一、VMware设置共享文件夹 &#xff08;1&#xff09;虚拟机关机情况下&#xff0c;创建一个共享文件夹 &#xff08;2&#xff09;ubuntu中挂载共享文件夹 1、如果之前已经挂载 hgfs&#xff0c;先取消挂载 sudo umount /mnt/hgfs2、重新使用以下命令挂载 sudo /usr/bin/vmh…...

A. Two Semiknights Meet

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

〔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的默认勾选,翻页记录勾选状态

需求&#xff1a;当弹出一个列表页数据&#xff0c;对其进行筛选选择。 列表更新&#xff0c;填充已选数据 主要使用toggleRowSelection 代码如下&#xff1a; <el-table v-loading"loading" :data"drugList" selection-change"handleSelection…...

CloudCompare——统计滤波

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

nodejs+vue古诗词在线测试管理系统

一开始&#xff0c;本文就对系统内谈到的基本知识&#xff0c;从整体上进行了描述&#xff0c;并在此基础上进行了系统分析。为了能够使本系统较好、较为完善的被设计实现出来&#xff0c;就必须先进行分析调查。基于之前相关的基础&#xff0c;在功能上&#xff0c;对新系统进…...

174-地下城游戏

题目 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...