如何用JMeter对MySQL数据库进行压测
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用JMeter对MySQL数据库进行压测相关的知识,希望对你有一定的参考价值。
参考技术A 在Jmeter中建立一个JDBCRequest
测试计划主要分两步。
(1)设置JDBC连接池(在JDBC
Connection
Configuration)
(2)添加JDBC
Request
其他步骤就是设置参数化、断言、监听结果。
第一步:添加
JDBC
Connection
Configuration
需要设置jdbc线程池变量的名称,这里设置为jdbcConfig,这个变量在JDBC
Request中要使用的;还有要设置Database
URL,格式为:jdbc:mysql://localhost:3306/chen?serverTimezone=UTC&characterEncoding=utf-8,注意:?后面的serverTimezone=UTC&characterEncoding=utf-8不能缺少,否则会报时区错误。
第二部:设置JDBC
Request
jmeter 压测之发送 java 请求
由于在工作实践中经常会碰到要进行非http请求的压测,如mq,dubbo等需要进行java请求的压测,这时需要进行java编码来解决了。
jmeter提供了发送java请求的功能,有一个 JavaSamplerClient 接口可供调用,下面就以通过java jdbc 接口对mysql进行数据插入来进行java请求实践。
一、首先要了解 JavaSamplerClient 有四个函数:
1、初始化函数,每个并发用户仅执行一次
public void setupTest(JavaSamplerContext javaSamplerContext)
2、运行函数,每个并发用户执行N次
public SampleResult runTest(JavaSamplerContext javaSamplerContext)
3、停止函数,每个并发用户仅执行一次
public void teardownTest(JavaSamplerContext javaSamplerContext)
4、参数化函数,可以获取jmeter界面上传入的参数:
public Arguments getDefaultParameters()
说明:jmeter 5.1.1 需要5个依赖包
二、在 idea 或其他 java IDE 上 coding 如下:
package org.example;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JmeterJdbcInsert implements JavaSamplerClient {
public Connection conn;
public PreparedStatement ps;
@Override
public void setupTest(JavaSamplerContext javaSamplerContext) {
String sql="insert into user(user_name,password,age) values (?,?,?)";
String url=javaSamplerContext.getParameter("url");
String dbUsername=javaSamplerContext.getParameter("dbUsername");
String dbPassword=javaSamplerContext.getParameter("dbPassword");
//注册mysql数据库驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
//获取数据库连接对象connection
conn = DriverManager.getConnection(url,dbUsername,dbPassword);
//对sql进行预编译
ps = conn.prepareStatement(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
//创建一个执行结果对象
SampleResult sampleResult = new SampleResult();
//设置本次请求的名称
sampleResult.setSampleLabel("insert");
//对sql语句中中的?进行传参
int rows=0;
try {
ps.setString(1,javaSamplerContext.getParameter("name"));
ps.setString(2,javaSamplerContext.getParameter("password"));
ps.setInt(3,javaSamplerContext.getIntParameter("age"));
//执行sql
rows= ps.executeUpdate();
//将返回结果存储到请求对象中,在jmeter查看结果树中可以看到这个结果
String response = "插入的条数为:" +rows;
sampleResult.setResponseData(response,"utf-8");
//做对数据库执行结果进行判断
if (rows == 1){
//请求成功
sampleResult.setSuccessful(true);
}else {
//请求失败
sampleResult.setSuccessful(false);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return sampleResult;
}
@Override
public void teardownTest(JavaSamplerContext javaSamplerContext) {
//关闭连接
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
/*
参数化函数,可以获取jmeter界面上传入的参数数据
*/
@Override
public Arguments getDefaultParameters() {
Arguments arguments = new Arguments();
arguments.addArgument("url","jdbc:mysql://localhost:3306/myquery?useUnicode=true&characterEncoding=utf8");
arguments.addArgument("dbUsername","root");
arguments.addArgument("dbPassword","123456");
arguments.addArgument("name","he123");
arguments.addArgument("password","123456");
arguments.addArgument("age","19");
return arguments;
}
}
三、打成jar包,放入jmeter ../lib/ext/ 目录下,启动 jmeter。
四、运行 jmeter,查看结果树
五、检查数据库
数据插入成功!
以上是关于如何用JMeter对MySQL数据库进行压测的主要内容,如果未能解决你的问题,请参考以下文章
一文1500字手把手教你Jmeter如何压测数据库保姆级教程