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版本如下:
这里选择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下载下载压缩包后解压,其目录结构如下:
安装后进入解压文件夹下的bin目录,双击jmeter.bat后启动图形管理界面
3使用JMeter压测数据库
使用JMeter的步骤共有三步,创建测试计划,运行负载测试,进行负载分析。这三步中,第一步稍微复杂一点,如果创建的测试计划有问题,后面运行时会报各种错误。JMeter测试计划支持图形界面和编程方式,这里采用图形界面,操作简单,也比较直观。
3.1 创建测试计划(test plan)
1)创建线程组
创建测试计划的第一步是创建线程组,也称为用户。线程组告诉JMeter想要模拟的用户的数量, 他们发送请求的频率以及发送请求的数量。以GUI模式启动JMeter后,右击左边的TestPlan图标依次选择add->Threads(users)->ThreadGroup,弹出界面如下
JMeter的操作方式和通常的应用程序不同,在做了更改之离开控制盘后,会自动用新值更新相关数据,不需要手动确认。这里面要填的是number of users,Ramp-Up Period,和Loop Count,Ramp-Up Period确定启动每个用户之间的延迟。举个例子来说,这个值是100,用户数是50,那么启动每个用户之间的延迟就是2秒。
2)创建jdbc连接
jdbc连接在线程组下配置,右击刚才创建的线程组,依次选择add->Config Element->JDBC connection Configuration,界面如下
配置连接池和数据库连接,这里要注意的是Variable Name for created pool(要创建池的变量名称),这个变量实际是就是连接池的名字。并发连接数也要在数据库的允许范围内。
3)创建JDBC 请求
JMeter通过JDBC请求发送SQL查询至数据库,右击线程组,依次选择add->sampler->JDBC request,弹出界面如下
这个界面要注意的一是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,界面如下
3.2 运行负载测试
负载测试可以在图形界面运行,推荐通过命令行运行。
1)图形界面
创建好测试计划后,点击run菜单下start即可运行,运行结果如下
2)命令行运行
进入windows命令提示符模式,键入下面命令回车后运行测试
jmeter -n -t testplan.jmx -l my_test.csv
复制
-t指定测试计划的名称,-l指定测试结果的输出文件,运行结果如下
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的日志里没有任何错误,直至用命令行运行测试才在输出里发现错误的原因如下
java.lang.IllegalArgumentException: Name for DataSoure must not be empty in JDBC Request1