准备
- 所执行数据库的权限,用户名,密码
- 需要执行的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中的相关参数。
-
设置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就可以了。