使用Java编写JDBC脚本对Mysql进行增删改查等操作的性能测试
使用Jmeter提供的脚本框架依赖的jar包(分别在jmeter目录下的lib和ext目录下)
ApacheJMeter_core.jar
ApacheJMeter_java.jar
avalon-framework-4.1.4.jar jorphan.jar
logkit-2.0.jar
若为4.+以上的jmeter还需加两个 slf4j-api-的.jar包
脚本调试好后,导出为jar包,放在apache-jmeter-3.1libext目录下
Jmeter脚本要点
1,实现JavaSamplerClient接口
2,四个方法:
getDefaultParameters:获取参数,设置的参数会在Jmeter的参数面板上显示出来
setupTest:初始化方法,只执行一次,跟LR里的init方法一样的,用于建立链接
runTest:执行N次,处理业务
teardownTest:结束方法,只执行一次,LR里的end方法是一样的,用于释放资源
3,导出Jmeter的java脚本
导出之前先把脚本运行一遍,使用main方法,空的也行
file-export-runnable java file - launch configuration 那里要选择你的类名
Library handing那里选择第三项copy xxxx
将导出的xxx.jar 和xxx_lib文件夹放到Jmeter的lib/ext目录下
重新启动Jmeter
创建class文件时在interfaces处add->JavaSamplerClient
package cn.test.jmeter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
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;
public class MyJmeterTest implements JavaSamplerClient {
// 全局变量
PreparedStatement statement;
Connection conn;
@Override
public Arguments getDefaultParameters() {
// TODO Auto-generated method stub
return null;
}
/**
* 初始化的操作写在setup方法里,类似于LR里的init
*/
@Override
public void setupTest(JavaSamplerContext arg0) {
// 注册驱动,告诉Java接下来要链接哪个数据库
try {
Class.forName("com.mysql.jdbc.Driver");
// 建立mysql数据库链接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa", "root", "123456");
// 把sql进行编译
statement = conn.prepareStatement("insert into itcast_role (name, description) values (?,?)");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 真正多次操作的业务,放在runtest方法里,类似于LR里的action
*/
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult result = new SampleResult();
// 给事务起个名称
result.setSampleLabel("insert");
// 事务开始
result.sampleStart();
// 执行sql之前,先进行参数化
try {
statement.setString(1, "abc");
statement.setString(2, "test");
int rows = statement.executeUpdate();
if (rows > 0){
// 事务成功
result.setSuccessful(true);
}else{
// 事务失败
result.setSuccessful(false);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 事务结束
result.sampleEnd();
return result;
}
/**
* 结束的操作放在teardown里,类似于LR里的end
*/
@Override
public void teardownTest(JavaSamplerContext arg0) {
// 关闭链接
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
MyJmeterTest test = new MyJmeterTest();
// 创建一个JavaSamplerContext对象,该对象创建的时候需要传入一个Arguments对象
JavaSamplerContext context = new JavaSamplerContext(new Arguments());
test.setupTest(context);
test.runTest(context);
test.teardownTest(context);
}
}
导出到jmeter中用
拷贝到jmeter的lib_ext下,包括二次开发的脚本也都是放在这个目录下,重启jmeter
创建一个java请求