JMeter JDBC Request 数据库压力测试

时间:2024-03-28 19:34:27

准备

  • 所执行数据库的权限,用户名,密码
  • 需要执行的sql语句
  • 数据库驱动包

步骤

以mysql数据库为例

  • 先验证sql语句,通过数据库管理工具或者命令行执行sql语句,确保sql语句的正确性和有期望的返回数据。

  • 导入mysql数据库的驱动jar包,前往https://dev.mysql.com/downloads/connector/j/  下载jar包,下载后将mysql-connector-java-5.1.45-bin.jar复制到JMeter的安装目录下的/lib/ext/下。

  • 在JMeter中添加线程组,然后添加“配置元件”>JDBC Connection Configuration;再添加”Sampler”>JDBC Request。

  • 设置Configuration中的相关参数。

    JMeter JDBC Request 数据库压力测试

  • 设置JDBC Request中相关参数。

    JMeter JDBC Request 数据库压力测试

  • 设置线程数、或者基准测试,压多少,就不作赘述了。

说明

  • 若无法直接连接数据库,先在本地编辑好jmx,将jmx文件复制到跳板机或者可以访问数据库的服务器进行调试和压测。
  • 如果先打开JMeter后导入驱动jar包,则需要重启JMeter。
  • 为什么JDBC Driver class填com.mysql.jdbc.Driver?jar包是很多java类的封装,把jar解压或者反编译,就会明白,这里其实是引用了一个Driver的class,在jar包里。
  • 每次压测执行完以后,需要上一次连接全部断开后再进行下一次压测。

踩到2个坑

  • mysql数据库连接池做了限制,会返回错误Cannot get a connection,pool error Timeout waiting for idle object,所以在压测时需要注意线程数、循环次数或者请求次数与数据库最大连接数的关系,根据情况适当调整。
  • 查询语句执行后,返回的时间相关的参数中含有“0000-00-00 00:00:00”的数据,会返回错误Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp,改一下sql语句,不要查询这个字段就可以。举例,执行select * from test会返回id,name,d_time三个字段,但是d_time的内容是“0000-00-00 00:00:00”,会导致错误,把sql语句改成select id,name from test,不查d_time就可以了。