jmeter 压测之发送 java 请求
Posted 隔岸无名
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 压测之发送 java 请求的主要内容,如果未能解决你的问题,请参考以下文章