暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

使用Apache JMeter对Oracle数据库进行压测

原创 听见风的声音 4天前
65

1 Apache JMeter简介

Apache Jmeter是一个开源的测试工具,是1个100%的纯Java程序,最初设计的目的是用来测试web应用程序,后来扩展到其它场景的测试,包括数据库。由于是纯Java程序,JMeter安装起来十分简单,支持各种操作系统,程序本身也比较轻巧,逐渐成为测试人员喜欢使用的主流的测试工具。本文介绍怎样用它来对Oracle数据库进行压测。

2 Apache JMeter安装

2.1 Java及Jdbc版本选择

Apache JMeter是一个纯Java程序,最新的版本是5.6.3,自5.6开始,JMeter需要Java 8及以后版本才能,推荐使用Java 17 或以后版本(JMeter下一个版本会需要Java 17以后版本)。考虑JMeter使用Jdbc链接到Oracle数据库,在选择Jdbc时,要根据数据库支持的Jdbc版本来选择Java版本,这里的数据库是Oracle 23AI,查一下Oracle官网,支持的Jdbc版本如下:
Jdbc.PNG
这里选择ojdbc8,相应的Java版本选择11,也可以选择Java 8,这里Java选择应该在Jdbc支持的版本里选择,否则可能会在连接数据库时可能会有问题。

2.2 Java及Jdbc的安装

安装Java可以选择官网的JDK安装包,下载后双击安装即可,这里选择Openjdk版本,下载下来后解压,Openjdk国外网站下载比较慢,可以从国内镜像的网站进行下载,比如华为云的镜像站,下载地址如下
Openjdk 11 下载
下载后需要设置两个环境变量,右击此电脑点击属性->高级系统设置->环境变量->系统变量,设置JAVA_HOME 和PATH(D:\APP\openjdk-11.0.2_windows-x64_bin\jdk-11.0.2\是解压后的路径),如下:

JAVA_HOME=D:\APP\openjdk-11.0.2_windows-x64_bin\jdk-11.0.2 Path=C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;D:\APP\openjdk-11.0.2_windows-x64_bin\jdk-11.0.2\bin;
复制

Jdbc的安装非常简单,从官网下载相应包解压后放到JMeter解压文件夹下的lib目录下即可。

2.3 JMeter的安装

从官网Jmeter下载下载压缩包后解压,其目录结构如下:
Jmeter.PNG
安装后进入解压文件夹下的bin目录,双击jmeter.bat后启动图形管理界面
Jmeter启动.PNG

3使用JMeter压测数据库

使用JMeter的步骤共有三步,创建测试计划,运行负载测试,进行负载分析。这三步中,第一步稍微复杂一点,如果创建的测试计划有问题,后面运行时会报各种错误。JMeter测试计划支持图形界面和编程方式,这里采用图形界面,操作简单,也比较直观。

3.1 创建测试计划(test plan)
1)创建线程组

创建测试计划的第一步是创建线程组,也称为用户。线程组告诉JMeter想要模拟的用户的数量, 他们发送请求的频率以及发送请求的数量。以GUI模式启动JMeter后,右击左边的TestPlan图标依次选择add->Threads(users)->ThreadGroup,弹出界面如下
线程组.PNG
JMeter的操作方式和通常的应用程序不同,在做了更改之离开控制盘后,会自动用新值更新相关数据,不需要手动确认。这里面要填的是number of users,Ramp-Up Period,和Loop Count,Ramp-Up Period确定启动每个用户之间的延迟。举个例子来说,这个值是100,用户数是50,那么启动每个用户之间的延迟就是2秒。

2)创建jdbc连接

jdbc连接在线程组下配置,右击刚才创建的线程组,依次选择add->Config Element->JDBC connection Configuration,界面如下
image.png
image.png
配置连接池和数据库连接,这里要注意的是Variable Name for created pool(要创建池的变量名称),这个变量实际是就是连接池的名字。并发连接数也要在数据库的允许范围内。

3)创建JDBC 请求

JMeter通过JDBC请求发送SQL查询至数据库,右击线程组,依次选择add->sampler->JDBC request,弹出界面如下
testplan.jmx D__APP_apachejmeter5.6.3_apachejmeter5.6.3_bin_testplan.jmx  Apache JMeter 5.6.3 2025_4_1 15_06_55.png
这个界面要注意的一是Variable Name of Pool declared in JDBC Connection Configuration,填入刚才创建的连接池的名称(Variable Name for created pool),其次SQL语句的结尾不能有分号,一个请求只能有一条SQL语句,可以创建多个请求,支持多个查询类型,UpdateStatement包含insert和delete语句。

4)添加listener

测试计划的最后一步是添加listener,用来显示测试的结果,有多个listener可以选择,这里添加一个
Summary Report,步骤如下,右击线程组,依次选择add->listener->Summary Report,界面如下
testplan.jmx D__APP_apachejmeter5.6.3_apachejmeter5.6.3_bin_testplan.jmx  Apache JMeter 5.6.3 2025_4_1 15_13_22.png

3.2 运行负载测试

负载测试可以在图形界面运行,推荐通过命令行运行。

1)图形界面

创建好测试计划后,点击run菜单下start即可运行,运行结果如下
testplan.jmx D__APP_apachejmeter5.6.3_apachejmeter5.6.3_bin_testplan.jmx  Apache JMeter 5.6.3 2025_4_1 15_18_01.png

2)命令行运行

进入windows命令提示符模式,键入下面命令回车后运行测试

jmeter -n -t testplan.jmx -l my_test.csv
复制

-t指定测试计划的名称,-l指定测试结果的输出文件,运行结果如下
C__WINDOWS_system32_cmd.exe 2025_4_1 15_36_28.png

3.3 测试结果分析

使用命令行运行测试,可以从输出文件里获得每一次运行的详细记录,可以用于分析
my_test.csv  Excel 2025_4_1 15_42_36.png

4踩坑记录

整个过程并不复杂,期间却踩了几个坑,费了不少时间,记述如下

1) JAVA版本和JDBC版本匹配,最先选择的是ojdbc17.jar和JAVA JDK 18,在运行测试时一直报ORA-17800:Got minus one from a read call错误,JDBC对JAVA的版本要求非常严格,一定要选择官网给定的组合。
2)在创建JDBC请求时未输入连接池名称,在运行测试时JMeter的日志里没有任何错误,直至用命令行运行测试才在输出里发现错误的原因如下

java.lang.IllegalArgumentException: Name for DataSoure must not be empty in JDBC Request1

3)也是在创建JDBC请求时,SQL语句后面习惯性的加了分号,运行测试时输出里显示SQL语法错误。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

暂无图片
获得了118次点赞
暂无图片
内容获得34次评论
暂无图片
获得了201次收藏
目录
  • 1 Apache JMeter简介
  • 2 Apache JMeter安装
    • 2.1 Java及Jdbc版本选择
    • 2.2 Java及Jdbc的安装
    • 2.3 JMeter的安装
  • 3使用JMeter压测数据库
    • 3.1 创建测试计划(test plan)
      • 1)创建线程组
      • 2)创建jdbc连接
      • 3)创建JDBC 请求
      • 4)添加listener
    • 3.2 运行负载测试
      • 1)图形界面
      • 2)命令行运行
    • 3.3 测试结果分析
  • 4踩坑记录
    • 1) JAVA版本和JDBC版本匹配,最先选择的是ojdbc17.jar和JAVA JDK 18,在运行测试时一直报ORA-17800:Got minus one from a read call错误,JDBC对JAVA的版本要求非常严格,一定要选择官网给定的组合。
    • 2)在创建JDBC请求时未输入连接池名称,在运行测试时JMeter的日志里没有任何错误,直至用命令行运行测试才在输出里发现错误的原因如下
    • 3)也是在创建JDBC请求时,SQL语句后面习惯性的加了分号,运行测试时输出里显示SQL语法错误。