![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
public class JdbcInsert implements JavaSamplerClient { // 全局变量 PreparedStatement pstmt; Connection conn; @Override public Arguments getDefaultParameters() { // 主要用于把jmeter界面中的参数和java脚本关联起来 Arguments arguments = new Arguments(); arguments.addArgument("uuid",UUID.randomUUID().toString()); arguments.addArgument("username","张三"); arguments.addArgument("pwd","123"); arguments.addArgument("jdbcurl","jdbc:mysql://localhost:3306/xxxx" return arguments; } // 执行测试操作,类似于LR里的Action函数,执行N次 @Override public SampleResult runTest(JavaSamplerContext context) { int rows = 0; // 框架要求可能出现问题的代码,不能抛出异常,只能自己处理,把有问题的代码放到try里面,解决方案放到catch里 try { pstmt.setString(1,context.getParameter("uuid")); pstmt.setString(2, context.getParameter("username")); pstmt.setString(3, context.getParameter("pwd")); // 执行sql多次 rows = pstmt.executeUpdate(); } catch (SQLException e) { // 当出现异常时打印异常 e.printStackTrace(); } System.out.println(rows); return null; } // 初始化操作,类似于LR中的init函数,执行1次 @Override public void setupTest(JavaSamplerContext context) { String url =context.getParameter("jdbcurl"); String username = "root"; String password = "123123"; String sql = "insert into t_user (uuid,username,pwd) values(?,?,?) // 注册驱动,告诉java要链接哪个数据库 try { Class.forName("com.mysql.jdbc.Driver"); // 建立mysql数据库链接 conn = (Connection) DriverManager.getConnection(url, username, // 把sql进行编译 pstmt = (PreparedStatement) conn.prepareStatement(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 结束操作,类似于LR里的end函数,执行1次 @Override public void teardownTest(JavaSamplerContext context) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { JdbcInsert jdbcInsert = new JdbcInsert(); //先创建一个参数对象Argument Arguments arguments = jdbcInsert.getDefaultParameters(); //再创建一个上下文对象JavaSamplerContext,并且把Argument对象传入 JavaSamplerContext context = new JavaSamplerContext(arguments); jdbcInsert.setupTest(context); jdbcInsert.runTest(context); jdbcInsert.teardownTest(context); } }
jmeter中实现java请求思路:采用jmeter提供的框架包,创建一个类,继承类JavaSamplerClient
重写该类的以下四个方法
getDefaultParameters()
runTest(JavaSamplerContext context)
setupTest(JavaSamplerContext context)
teardownTest(JavaSamplerContext context)
重点是通过getDefaultParameters方法构造jmeter参数,将从jmeter里获取到的参数,进行参数化
代码写好调试好后,用ecipse的export runnable jar方法,导出jar包和依赖包,放到jemeter安装包的ext文件夹下面,重启jmeter,即可以实现jmeter接收参数,调用java脚本
1.找到jmeter的框架包,以下三个包就足够了,jmeter3.3找不到另外2个包
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155221846-1236453853.png)
在jmeter安装包里寻找以上jar包
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155245679-132887984.png)
eclipse工程右键导入外部jar包
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155332356-1094657064.png)
新建java类继承JavaSamplerClient
加入jdbc jar包
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155502406-367012719.png)
java代码按照jmeter框架,分别编写setup,teatdown,run方法
代码至少运行一次,没问题进行以下操作,从eclipse导出可执行的jar包,供jmeter调用
工程右键
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155531168-1692789940.png)
此为导出的可执行jar包和依赖包文件夹
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155643114-749701721.png)
将这2个文件导入到以下目录,jmeter的拓展包,每个脚本有个单独的文件夹,存放依赖包
重启jmeter,新建java请求
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155708690-1460987058.png)
点击运行后,数据库已新增一条数据,说明脚本导入成功
查看结果树看不到java请求的信息,因为底层是二进制数据,只有控制台可以看到syso打印的信息
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806155810798-1498856122.png)
下面接着实现jmeter参数化入参
![](https://images2018.cnblogs.com/blog/1384149/201808/1384149-20180806160506812-746842531.png)